将视图文件中的值发送到yii中的小部件

时间:2013-12-23 05:37:10

标签: php view yii widget

我有一个博客,其中有不同的博客类型,每个博客类型都有很多博客文章。我正在传递博客类型的ID以获取博客文章(外键关系船)的详细信息。对于侧边栏我创建了一个小部件,我想将blogtype ID传递给小部件,以便我可以显示相应博客类型的最新帖子。

我在视图文件中尝试了这个

 $this->widget('application.widget.blogs',array(blog_type_id=>$res_blog)); 

这在小部件中

 class Categories extends CWidget
 {
 public $blog_type;
 public function run() 
 {
   echo $blog_type;
 }
 }

但似乎没有任何效果。

任何人都可以查看问题

2 个答案:

答案 0 :(得分:2)

怎么做?我的例子......

文件夹结构:

        Application (Your App Folder)
            |
            |
            protected (Folder)
                |
                |
                widget (Folder)
                    |
                    |
                    views (Folder)
                    |    |
                    |    blog.php (PHP View file)
                    |
                    Blog.php (PHP Class file)

Blog.php 在protected / widget /

        <?php
        class Blog extends CWidget
        {
            public $dataProvider;
            public function init()
            {
                // this method is called by CController::beginWidget()
            }

            public function run()
            {
                $dataSet=$this->dataProvider->getData();
                $this->render('blog', array('dataSet'=>$dataSet));
            }
        }
        ?>

blog.php 在protected / widget / views /

        <!-- Your View as you want. Example: -->
        <table>
            <tr>
                <th>Blog Name</th>
                <th>Description</th>
            </tr>
            <?php foreach ($dataSet as $data): ?>
                <tr>
                    <td><?= $data->name; ?></td>
                    <td><?= $data->description; ?></td>
                </tr>
            <?php endforeach; ?>
        </table>

如何使用此小部件

        <?php
        $dataProvider=new CActiveDataProvider('YourBlogModel'); //It has to come from controller
        $this->widget('application.widget.Blog', array('dataProvider' => $dataProvider)); 
        ?>

答案 1 :(得分:1)

将小部件保留在Components/Blogs.php上,并创建如下代码。

class Blogs extends CWidget
{
   public $blog_type_id;
   public function run() 
   {
   echo $this->blog_type_id; 
   // put other relevant code here. 
   }
}

而且,你可以用,

来调用它
$this->widget('blogs',array(blog_type_id=>$res_blog));

如果您将上面的类代码放在 protected / widget / Blogs.php 中,那么您可以将此小部件称为

 $this->widget('application.widget.blogs',array(blog_type_id=>$res_blog));