Yii - изменение HTML, сгенерированное CListView - PullRequest
1 голос
/ 23 марта 2012

Я использую 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 ]

2 голосов
/ 05 апреля 2012

С этим расширением класса:

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,



));

В вывод можно получить то, что мне нужно.

0 голосов
/ 24 марта 2012

Попробуйте установить шаблон для CClistView как

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

вы можете расположить шаблонные элементы так, как вам нужно.

0 голосов
/ 23 марта 2012

Поскольку вы пытаетесь сгенерировать таблицу, вы должны пытаться сделать это, используя CGridView вместо CListView.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...