- 论坛徽章:
- 0
|
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视图只是渲染一个大的结果,比如导航面包碎屑,记录的条数和 分页等。
|
|