Yii - Modifing html generated by CListView

99封情书 提交于 2019-12-22 01:36:20

问题


I'm using ClistView to display the content of a dataprovider.

ClistView is supposed to call a partial view, that will loop for each model.

I would like to display something (i.e. a tag) before the first model and something (i.e. a ) after the last model of the pagination.

Assume that I have a view (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',
                    ),
                    ));

In _view.php I have just the cells of a table.

If I put before the widget the html to render the table header and just after the html to render the table footer I obtain that inside the div there is the html of the pager.

How I can shift the header and the footer directly in _view.php?

Thanks


回答1:


With this class extension:

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";

}


 }

I's possible to override the lines of the base version of the class

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

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

With this solution with code:

$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,



));

It's possible to get in the output what I need.




回答2:


Since you are trying to generate a table, you should be trying to do it using CGridView instead of CListView.




回答3:


Try setting the template for the CClistView as

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

you might arrange the template stuff as you need.



来源:https://stackoverflow.com/questions/9831685/yii-modifing-html-generated-by-clistview

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!