将视图文件中的值发送到 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 中的小部件的主要内容,如果未能解决你的问题,请参考以下文章
从 javascript 设置 yii2 select2 小部件的值