能够重用的小的代码模块,不涉及业务逻辑的,用在跟视图相关的方面比较多,一般把Sidebar,Navigation,Page,JS控件(上传,日历)封装成Widget,但Portlet生成的html系统会自动套2层div在html外面,改变了页面样式,可能操作页面样式布局js等失效
下面以一个随机广告图片为例说明Yii中Widget的用法
1. 调用Widget
<?php $this->widget('WidgetName'); ?>
或者
<?php $widget=$this->beginWidget('path.to.WidgetClass'); ?> ...可能会由小物件获取的内容主体... <?php $this->endWidget(); ?>
也可以传参到Widget类
<?php $this->widget('WidgetName',array('userId'=>$userId)); ?>
参数userId自动映射到Widget类的同名属性,所以在定义Widget时,别忘记了声明该属性。
2. 创建Widget
自定义Widget类要继承CWidget,覆盖方法run
<?php class BannerMagic extends CWidget { public function run(){ } }
或者:
class MyWidget extends CWidget { public function init() { // 此方法会被 CController::beginWidget() 调用 } public function run() { // 此方法会被 CController::endWidget() 调用 } }
下面是是BannerMagicWidget实现,存储到protected\components\BannerMagicWidget.php
<?php class BannerMagicWidget extends CWidget { public function run() { $random = rand(1,3); if ($random == 1) { $advert = "advert1.jpg"; } else if ($random == 2) { $advert = "advert2.jpg"; } else { $advert = "advert3.jpg"; } $this->render('bannermagic',array( "advert"=>$advert, )); } }
对应的view文件可能的内容如下:
<img src="images/adverts/<?php echo $advert; ?>" alt="whatever" />
存储到protected\components\views\bannermagic.php
3. 调用该Widget
<?php $this->widget('BannerMagicWidget'); ?>
CPortlet继承自CWidget。这意味portlet作为一个widget,可以在用widget()方法在页面中插入.它覆盖了CPortlet
类的 renderContent()
方法等
protected\components\RecentComments.php (1)
<?php Yii::import('zii.widgets.CPortlet'); class RecentComments extends CPortlet { public $title='Recent Comments'; //title public $maxComments=10; public function getRecentComments() { return Comment::model()->findRecentComments($this->maxComments); } protected function renderContent() { $this->render('recentComments'); //模板文件 } }
protected\components\views\recentComments.php 模板文件(2)
<ul> <?php foreach($this->getRecentComments() as $comment): ?> <li><?php echo $comment->authorLink; ?> on <?php echo CHtml::link(CHtml::encode($comment->post->title), $comment->getUrl()); ?> </li> <?php endforeach; ?> </ul>
调用方法 (3)
<?php $this->widget('RecentComments', array('maxComments'=>Yii::app()->params['recentCommentCount'], )); ?>
相关推荐
yii 自定义widget地址联动
本文实例讲述了yii中widget的用法。分享给大家供大家参考。具体分析如下: WIDGET定义很简单,如果你在/protected/widget/test/下建立了一个名为“testWidget.php”的widget。 在视图中调用需要这样写: 复制代码 ...
主要介绍了yii2框架中使用下拉菜单的自动搜索yii-widget-select2的方法,介绍了yii-widget-select2的下载,安装及具体使用技巧,需要的朋友可以参考下
当然啦,废话说在前头,咱们的重点喃,是要利用ActiveForm,然后怎么去实现自定义验证规则。 先来说说场景: 条件:①、有两个字段分别是A和B ②、A有两个值分别是1和2 需求是:当用户选择的A的值等于1的时候,B...
NULL 博文链接:https://hudeyong926.iteye.com/blog/1397434
主要介绍了YII2框架自定义全局函数的实现方法,总结分析了YII2框架自定义全局函数相关实现技巧与操作注意事项,需要的朋友可以参考下
本文实例讲述了YII框架实现自定义第三方扩展操作。分享给大家供大家参考,具体如下: cat.php <?php /** * Created by PhpStorm. * Date: 2016/5/25 * Time: 15:23 */ namespace vendor\animal; use \yii\...
这是一个yii的kindeditor的widget 其中将上传的action绑定好了widget中,方便使用。 也是一种抽离出widget的好方法。
主要介绍了Yii框架自定义数据库操作组件,结合实例形式分析了Yii自定义数据库操作组件的原理与实现方法,需要的朋友可以参考下
主要介绍了Yii2实现自定义独立验证器的方法,结合实例形式分析了Yii2自定义独立验证器的实现与使用方法,需要的朋友可以参考下
主要介绍了Yii视图操作之自定义分页实现方法,结合实例形式分析了Yii自定义分页的实现步骤与相关技巧,需要的朋友可以参考下
主要介绍了Yii2框架自定义验证规则操作,结合实例形式分析了Yii2自定义验证规则实现方法、操作技巧与注意事项,需要的朋友可以参考下
Yii 2.x应用程序中的自定义错误处理 该模块允许您将其处理挂在Exceptions上。 ###何时需要###例如,捕获“危险”的用户操作。 发生错误时,您可以记录数据并跟踪特定用户或IP的ForbiddenHttpException或...
Bootbox.js 是一个小型的 JavaScript 库用来创建简单的可编程对话框,基于 Twitter 的 Bootstrap 开发。今天我们就来研究下,如何使用bootbox插件来实现自定义弹窗。
yii2-widget-rating StarRating小部件是Krajee设计的 JQuery插件的包装。 该插件是用于Bootstrap的简单但功能强大的JQuery星级评分插件。 着重开发纯CSS-3样式来呈现控件。 注意:此扩展是的子拆分。 自2014年11月8...
带有yii2自定义内容的下拉字段 这个小部件允许您将任何内容嵌入到下拉列表中,例如GridView。 为此,您需要在容器小部件(“ containerOptions”)的设置中传输html内容,其中下拉菜单的每个选项均具有类“ item”和...
php echo CHtml::link(Yii::t(‘cmp’,’Delete’),’[removed]’,array(‘class’=>’c_06c’,’onclick’=>’return art_del_confirm(“/company/msglog/delete/id/’.$data->zml_id.'”,”你确定要删除这条...