Yii - 修改由CListView生成的html

时间:2012-03-22 22:48:06

标签: yii

我正在使用ClistView来显示数据提供者的内容。

ClistView应该调用部分视图,它将为每个模型循环。

我想在第一个模型之前显示一些东西(即标签),在最后一个分页模型之后显示某些东西(即a)。

假设我有一个视图(index.php):

$this->widget('zii.widgets.CListView', array(
                    'dataProvider'=>$localDataProvider,
                    'itemView'=>'_view',   // refers to the partial view named '_post'
                    'summaryText'=>'Sono visualizzati i record da {start} a {end} su un totale di {count} libri',
                    'pager' => Array(
                    'header' => 'Vai alla pagina',
                    'prevPageLabel' => 'Indietro',
                    'nextPageLabel' => 'Avanti',
                    ),
                    ));

在_view.php中我只有一个表的单元格。

如果我在窗口小部件之前放置html来呈现表头,并在html之后呈现表格页脚,我在div中获得了寻呼机的html。

如何直接在_view.php中移动页眉和页脚?

由于

3 个答案:

答案 0 :(得分:2)

使用此类扩展名:

Yii::import('zii.widgets.CListView');

class PlainCListView extends CListView

{

public $preItemsTag = '';
public $postItemsTag = '';

public function renderItems()
{
    echo $this->preItemsTag."\n";
    $data=$this->dataProvider->getData();
    if(($n=count($data))>0)
    {
        $owner=$this->getOwner();
        $render=$owner instanceof CController ? 'renderPartial' : 'render';
        $j=0;
        foreach($data as $i=>$item)
        {
            $data=$this->viewData;
            $data['index']=$i;
            $data['data']=$item;
            $data['widget']=$this;
            $owner->$render($this->itemView,$data);
            if($j++ < $n-1)
                echo $this->separator;
        }
    }
    else
        $this->renderEmptyText();
    echo $this->postItemsTag."\n";

}


 }

我可以覆盖类

的基本版本的行
echo CHtml::openTag($this->itemsTagName,array('class'=>$this->itemsCssClass))."\n";

echo CHtml::closeTag($this->itemsTagName);

使用此代码的解决方案:

$pre_html = '<table><thead><th>Codice Account</th><th>Nome</th></thead><tbody>';
$post_html = '</tbody></table>';

$this->widget('zii.widgets.PlainCListView', array(
                    'dataProvider'=>$dataProvider,
                    'itemView'=>'_view', 
                    'preItemsTag'=>$pre_html,
                    'postItemsTag'=>$post_html,
                    'summaryText'=>'Sono visualizzati i record da {start} a {end} su un totale di {count} libri',
                    'pager' => Array(
                    'header' => 'Vai alla pagina',
                    'prevPageLabel' => 'Indietro',
                    'nextPageLabel' => 'Avanti',
                        ),
                    'sortableAttributes'=>array('titolo'),
                    'enableSorting'=>0,



));

可以输出我需要的内容。

答案 1 :(得分:0)

由于您正在尝试生成表,因此您应该尝试使用CGridView而不是CListView来执行此操作。

答案 2 :(得分:0)

尝试将CClistView的模板设置为

'template'   => "<your header tag>{items}<your footer tag>{pager}",

您可以根据需要安排模板内容。