能够重用的小的代码模块,不涉及业务逻辑的,用在跟视图相关的方面比较多,一般把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'], )); ?>
相关推荐
6. 支持插件widget(portlet):Yii通过widget插件系统允许开发者方便地添加和维护应用程序中的部件,从而实现丰富的用户界面。 二、Yii1.1核心组件与功能: 1. CRUD生成器Gii:Gii是一个强大的工具,提供了代码生成...
9. **窝轮(Widget**):一个通用的窝轮小部件,可以包装任何Bootstrap的JavaScript组件,使其易于在Yii应用中使用。 使用YiiWheels,开发者可以充分利用Bootstrap的强大功能,同时保持Yii框架的效率和灵活性。安装...
反编译工具,可以看C#代码
谷歌浏览器,安卓离线版APK
Delphi 12.3控件之SiComponents TsiLang Components Suite V7.6.0.1 for D7-DX10.3 WIN32-WIN64 ONLY.7z
MySQL课程考试题.txt
内容概要:本文详细探讨了深度神经网络(DNN)并行化技术的发展历程、现有技术和未来挑战。文章首先介绍了DNN的发展背景及其在图像分析、语音识别、自动驾驶等领域的广泛应用。随着DNN模型复杂度和训练数据量的增长,训练时间和计算成本急剧上升,促使研究人员寻求并行化解决方案。文中讨论了多核CPU、GPU、MIC、FPGA和ASIC等多种硬件平台的并行计算能力,并分析了CUDA、OpenCL、OpenMP、MPI和Spark等并行编程框架的特点和适用范围。接着,文章深入讲解了DNN的模型并行和数据并行两种主要并行化方法,并通过AlexNet案例展示了这两种方法的具体实施过程。此外,文章还比较了几款流行的DNN开源软件系统(如Caffe、TensorFlow、MXNet等)的并行化策略。最后,文章总结了当前DNN并行化存在的挑战,包括性能可移植性、任务自动划分、通信瓶颈等,并对未来的发展方向进行了展望。 适合人群:从事深度学习研究的科研人员、工程师和技术爱好者。 使用场景及目标:帮助读者全面了解DNN并行化技术的现状和发展趋势,指导他们在实际工作中选择合适的硬件平台和编程框架,优化DNN模型的训
网络工程师备考资源库80M(笔记和历年真题).zip
Java项目基于ssm框架的课程设计,包含LW+ppt
chromedriver-win32-135.0.7049.41.zip
Delphi 12.3控件之文件系统生成器GenFs(File System Generator)源代码包.zip
Fannker 3D Metahuman UE开发资源合集 探索UE5的高效开发利器!本合集整合Fannker精选3D Metahuman资源,涵盖角色模型、材质、动画及插件,助你快速打造逼真数字人。适用于游戏、影视及虚拟制作,提升工作流效率。兼容UE5先进功能,如Nanite与Lumen,让创作更流畅。立即获取,开启次世代角色开发之旅!
uTPLb_StreamUtils.pas
Delphi 12.3控件之UPXShell.rar
Java项目基于ssm框架的课程设计,包含LW+ppt
发嘎嘎撒日嘎三个人个人嘎斯人噶世人公认嘎嘎微软给我个如果
My project aims to develop a brain tumor segmentation model using DeepLabV3+ with ResNet-50 使用DeepLabV3+和ResNet-50开发一个脑肿瘤分割模型 具有resnet50骨干的deeplabv3开发脑肿瘤分割的正在进行的项目
第六周上课内容.odt
java面向对象 - 类与对象 java面向对象:用Java写一个计算器.