免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1545 | 回复: 0

Yii技术之 -- 总结和技巧一 [复制链接]

论坛徽章:
0
发表于 2011-12-20 09:48 |显示全部楼层
yii视图中使用的widget方式总结:
常用的有3种方式:
一、显示详细信息:
<?php
$this->widget('zii.widgets.CDetailView', array(
    'data' => $model,
    'attributes' => array(
        'id',
        'title',
        'content',
    ),
);
?>

二、显示列表,可以进行条件限制和分页:
控制器:
$dataProvider = new CActiveDataProvider('Post', array(
    'criteria' => array(
            'condition' => 'project_id = :project_id',
            'params' => array(':project_id' => $pid),
        ),
    'pagination' => array(
        'pageSize' => '5',
    ),
));
视图:
<?php
    $this->widget('zii.widgets.CListView',array(
        'dataProvider' => $dataProvider, //数据源
        'itemView' => '_view', //渲染子视图,传给模板的值用$data接收。
        ),
    );
?>
子视图:
<div class="view">
    <b><?php echo CHtml::encode($data->getAttributeLabel('id')); ?>:</b>//$data接收来自父视图的数据,使用getAttributeLabel()获取模型中设置的标签
    <?php echo CHtml::link(CHtml::encode($data->id), array('view', 'id'=>$data->id)); ?>//使用$data->attribute获取值。
    <br />
</div>

三、显示列表,但是结果会在表格中显示
$this->widget('zii.widgets.grid.CGridView', array(
    'dataProvider'=>$dataProvider, //数据源
    'columns'=>array(
        'title',          // display the 'title' attribute
        'category.name',  // display the 'name' attribute of the 'category' relation //显示与category相关的name
        'content:html',   // display the 'content' attribute as purified HTML 显示净化过的HTML格式
        array(            // display 'create_time' using an expression
            'name'=>'create_time',
            'value'=>'date("M j, Y", $data->create_time)',
        ),
        array(            // display 'author.username' using an expression
            'name'=>'authorName',
            'value'=>'$data->author->username',
        ),
        array(            // display a column with "view", "update" and "delete" buttons
            'class'=>'CButtonColumn',
        ),
    ),
    'filter'=>$model,//对用户的输入进行过滤
));


Yii中loadModel的使用:$this->loadModel($modelId);
一般在R/U/D操作中,会loadModel($modelId),这是因为此时,读,更新和删除时,已经通过GET方式获取到了model的id值,只需要将对应id的model加载进来,就可以了。
但是在C(建立),不需要loadModel,而是需要新建一个初始化的model。
使用$_POST['Model']的值分别填充model的attribute后,就可以save()了。

Yii中不同控制器使用同一个模板:
在Yii的CRUD操作中,C和U使用的是同一个子视图。区别在于:
C操作中,所有的input的值都是空,新建的model也是初始化状态,并准备接收来自POST的值。
在U操作中,所有input的值需要通过loadModel($id)的方式填充,然后准备接收来自POST的更新的值(有的
值并没有被用户修改);
然后,根据$model->isNewRecord()来判断提交按钮显示C还是U操作。
最后使用$model->save();将记录存储。

Yii中渲染视图的方式:
使用$this->render()和$this->renderPartial()渲染视图;
前者一般渲染一个整体视图,在整体视图中可能会用后者渲染需要重复渲染的部分。
例如在indexAction中一般会显示记录列表,由于所有记录的渲染方式一致,此时会使用子
视图来分别渲染相同的部分。而index视图只是渲染一个大的结果,比如导航面包碎屑,记录的条数和
分页等。

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP