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

Posted

技术标签:

【中文标题】将视图文件中的值发送到 yii 中的小部件【英文标题】:Send a value from view file to widget in yii 【发布时间】:2013-12-23 05:37:10 【问题描述】:

我有一个博客,里面有不同的博客类型,每个博客类型都有很多博客文章。我正在传递博客类型的 ID 以获取博客文章的详细信息(外键关系)。对于我创建了一个小部件的侧边栏,我想将博客类型 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;
 
 

但似乎没有任何效果。

谁能解决问题

【问题讨论】:

【参考方案1】:

如何做到这一点?我的例子...

文件夹结构:

        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)); 
        ?>

【讨论】:

【参考方案2】:

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));

【讨论】:

以上是关于将视图文件中的值发送到 yii 中的小部件的主要内容,如果未能解决你的问题,请参考以下文章

Yii 中的自定义小部件

从 javascript 设置 yii2 select2 小部件的值

QT3D Multiview - 小部件中的单一视图

Yii2 - 在模型中提交时如何从小部件中获取数据?

如何在不中断 tkinter 主循环的情况下运行一个函数,同时将该函数的信息发送到我的主循环中的小部件?

如何将旧的小部件迁移到新的小部件