cuwangpu 2012-09-10 15:30:03 6270次浏览 5条回复 1 0 0

用gii生成一个model,然后用CRUD生成对应的controller和view,发现view里用zii.widgets.CDetailView和zii.widgets.CListView两个函数用于读取数据,这两个函数在framework/zii/widgets/下有定义,定义了相关的样式,默认是用<table>标签显示内容。并且会自动在页头里加css文件,例如: <link rel="stylesheet" type="text/css" href="/assets/809a85a7/detailview/styles.css" />

我的问题时,如何自定义显示内容的样式,难道我要修改zii.widgets.CDetailView这个函数吗?如果我有两个不同的model,里面的字段数不同,想要用于展示的样式也不同,调用

<?php $this->widget('zii.widgets.CDetailView', array(
    'data'=>$model,

恐怕不行吧,如何实现呢?可不可以让title,create_time,author等这些字段以变量的形式让view文件使用,然后在view文件里自定义样式?

刚接触yii不久,对yii还不熟悉,望高手指点。

  • 回复于 2012-09-10 16:04 举报

    都可以自定义配置的。
    例如:

    $this->widget('zii.widgets.CDetailView', array(
         'data'=>$model,
         'attributes'=>array(
             'title',             // title attribute (in plain text)
             'owner.name',        // an attribute of the related object "owner"
             'description:html',  // description attribute in HTML
             array(               // related city displayed as a link
                 'label'=>'City',
                 'type'=>'raw',
                 'value'=>CHtml::link(CHtml::encode($model->city->name),
                                      array('city/view','id'=>$model->city->id)),
             ),
         ),
     ));
    
  • 回复于 2012-09-10 19:46 举报

    还有一点不能自定义,就是这里:

    'itemCssClass'=>array(
        'blog',
    ),
    'itemTemplate'=>'<span class="{class}">{label}:{value}<br /></span>',
    

    这样写的话,会把所有字段都加上blog这个css属性,包括id,title,author等等。如果我想这样,
    <span class="id">id:1</span> title:这是一篇博文 <span>author:1</span>

    这个itemTemplate怎样写?就是我想随心所欲的控制各个字段的展现方式,没有规律可循,怎样写一个统一的itemTemplate,能实现吗?谢谢。

  • 回复于 2012-09-11 06:31 举报
    'itemCssClass'=>array(
        'blog',
    ),
    

    这个就不要定义了。
    如果想实现你说的,可以自定义一下attributes。

    $this->widget('zii.widgets.CDetailView', array(
        'data' => $model,
        'attributes' => array(
            array('label'=>'ID','name'=>'id','cssClass'=>'id'),
            array('label'=>'标题','name'=>'title','cssClass'=>'title'),
            array('label'=>'内容','name'=>'content','cssClass'=>'content'),
        ),
    	'itemTemplate'=>"<div class=\"{class}\"><span>{label}</span><span>{value}</span></div>\n",
    );
    
  • 回复于 2012-09-11 08:19 举报

    知道了,在attributes 属性里cssClass,template这些可以自定义。但是这个 'itemCssClass'如果没定义,就会是默认的array('odd', 'even').还会自动添加到每个template里。可以加上

    'itemCssClass'=>array(
        'null',
    ),
    

    这样每个template都会加上一个null的css属性,然后在main.css里不定义.null就行了。.null{}

  • 回复于 2012-09-11 08:39 举报

    呵呵,是的。。。。。

您需要登录后才可以回复。登录 | 立即注册