Разберем пример вывода списка статей (таблица posts) и данных об авторе статьи (таблица user, для примера сортировки по связанным таблицам). Структуру таблиц описывать не будем (в таблице posts данные о статьях, в таблице user данные об авторах).
Модели для таблиц user и posts стандартные, единственное, что необходимо заметить - это в модели posts необходимо добавить связь с авторами (по id автора) для примера сортировки по связанной таблице (путь к модели: /protected/models/Posts.php):
<?php
class Posts extends CActiveRecord {
//...код модели ...
public function relations() {
return array(
'user' => array(self::BELONGS_TO, 'User', 'userId'),
);
}
//...код модели ...
}
Код контроллера PostsController (путь к файлу: /protected/controllers/PostsController.php):
<?php
class PostsController extends Controller {
public function actionIndex() {
$criteria = new CDbCriteria(array(
'condition' => 'visibility=1',
'with' => 'user',
));
$dataProvider = new CActiveDataProvider('Posts', array(
'pagination' => array(
//количество элементов на странице
'pageSize' => 5,
),
'criteria' => $criteria,
//настройки для сортировки
'sort' => array(
//атрибуты по которым происходит сортировка
'attributes' => array(
//заголовок
'header' => array(
'asc' => 'header ASC',
'desc' => 'header DESC',
//по умолчанию, сортируем поле header по убыванию (desc)
'default' => 'DESC',
),
'user' => array(
'asc' => 'user.name ASC',
'desc' => 'user.name DESC',
//по умолчанию, сортируем поле user по убыванию (desc)
'default' => 'DESC',
),
'date' => array(
'asc' => 't.date ASC',
'desc' => 't.date DESC',
//по умолчанию, сортируем поле date по убыванию (desc)
'default' => 'DESC',
),
),
//сортировка по умолчанию
'defaultOrder' => array(
'date' => CSort::SORT_DESC,
)
),
));
$this->render('index', array(
'dataProvider' => $dataProvider,
));
}
//... код контроллера ...
}
Код представления (view, путь к файлу: /themes/themeName/views/posts/index.php):
<?php
$this->widget('zii.widgets.CListView', array(
'dataProvider' => $dataProvider,
'itemView' => '_list', // представление для одной записи
'ajaxUpdate' => true, // true - ajax обновление данных, false - без ajax
'emptyText' => 'В данной категории записей.',
'summaryText' => "{start} — {end} из {count}",
'template' => '{pager} {summary} {sorter} {items} <hr/> {pager}',
'sorterHeader' => 'Сортировать по:',
// ключи, которые были описаны $sort->attributes
// если не описывать $sort->attributes, можно использовать атрибуты модели
// настройки CSort перекрывают настройки sortableAttributes
'sortableAttributes' => array('header', 'user' => 'Автор', 'date'),
'pagerCssClass' => 'text-center',
'loadingCssClass' => 'preloader',
'pager'=>array(
'nextPageLabel' => '<span>»</span>',
'prevPageLabel' => '<span>«</span>',
'lastPageLabel' => '<span>»»</span>',
'firstPageLabel' => '<span>««</span>',
'selectedPageCssClass' => 'active',
'hiddenPageCssClass' => 'disabled',
'htmlOptions' => array('class' => 'pagination'),
'class' => 'CLinkPager',
'header' => false,
),
));
Код представления для записи (itemView, путь к файлу: /themes/themeName/views/posts/_list.php):
<div class="media-body-list">
<h3 class="media-heading mrgn-btn-10">
<a href="<?php echo $data->url; ?>" class="link-h3"><?php echo $data->name; ?></a>
</h3>
<?php echo $data->shortText; ?>
<div class="overflow-hidden">
<a href="<?php echo $data->url; ?>" class="detail btn btn-default pull-right">Подробнее...</a>
</div>
</div>
Список записей готов.
Основные свойства виджета для настройки вывода данных:
| Свойство | Тип | Описание |
|---|---|---|
| afterAjaxUpdate | string | JavaScript функция, которая будет вызвана после успешного выполнения AJAX запроса. |
| ajaxType | string | Тип AJAX запроса, "GET" или "POST". |
| ajaxUpdate | mixed | ID контейнера в который будет записаны данные из ответа AJAX. false - отключит AJAX обновление данных. |
| ajaxUpdateError | string | JavaScript функция, которая будет вызываться при возникновении ошибки обновления AJAX. |
| ajaxUrl | mixed | URL для AJAX запросов. |
| ajaxVar | string | Имя GET переменной, что указывает на AJAX запрос который вызван из текущего виджета. |
| beforeAjaxUpdate | string | JavaScript функция, которая будет вызвана, перед AJAX запросом. |
| cssFile | string | Путь к CSS файлу для виджета. |
| emptyCssClass | string | Имя CSS класса для контейнера при пустом списке. |
| emptyTagName | string | Имя HTML тега для контейнера при пустом списке. |
| emptyText | string | Сообщение, которое отображается при пустом списке. |
| htmlOptions | array | HTML атрибуты для контейнера списка. |
| itemView | string | Вид (view) для рендеринга элемента списка. |
| itemsCssClass | string | CSS класс элемента списка. |
| itemsTagName | string | HTML тег для контейнера списка. |
| loadingCssClass | string | CSS класс, который будет назначен в виджет элемента контейнера при обновлении контента AJAX запросом. |
| pager | array|string | Конфигурация постраничного навигатора. |
| pagerCssClass | string | CSS класс постраничного навигатора. |
| sortableAttributes | array | Список атрибутов сортировки. |
| sorterCssClass | string | CSS класс для контейнера сортировки. |
| sorterHeader | string | Текст, отображаемый до сортировки. |
| sorterFooter | string | Текст, отображаемый после сортировки. |
| summaryCssClass | string | CSS класс для суммарного текста контейнера. |
| summaryTagName | string | HTML тег суммарного контейнера. |
| summaryText | string | Шаблон текста для суммарного контейнера. |
| tagName | string | Тег контейнера списка. |
| template | string | Шаблон, использоваться для управления размещением различных компонентов. |
| viewData | array | Дополнительные данные которые будут переданы в itemView. |
devreadwrite.com



Подборка адаптивных шаблонов для вашей CMS
Статьи по
Как получить и установить HTTPS сертификат на сайта

Комментарии
А можно передать дополнительные параметры в код представления записи (_list.php)? Например начальный url, т.е. параметр одинаковый для всех записей
ОтветитьИспользуйте парамеьр viewData в виджете CListView. Пример:
Ответитьфайл index.php
$this->widget('zii.widgets.CListView', array('dataProvider' => $dataProvider,
'itemView' => '_list',
//...
'viewData' => array('startUrl' => 'myURL', 'value1' => $value1),
//...
));
?>
файл _list.php
<?phpecho $startUrl . $value1;
Спасибо, то что надо
ОтветитьА как передать дополнительный параметр в список _list?
ОтветитьВ index.php:
Ответить<?php$this->widget( 'CListView', array(
'dataProvider' => $dataProvider,
//...
'viewData' => array( 'text' => 'text', 'id' => 7),
'itemView' => '_list',
) );
В _list
<?phpecho $text . $id;
А как передать инкремент в CListView, т.е. получить номер записи?
ОтветитьВывод номера записи в _list можно получить $index (начинается с 0):
Ответить<?phpecho $index;
Спасибо, у меня еще вопрос. А как получить количество позиций в $dataProvider?
ОтветитьВ том месте где вызывается CListView можно получить так:
Ответить$dataProvider->totalItemCount;или так:
$dataProvider->getTotalItemCount();Передать в _list так:
<?php$this->widget('CListView',
array(
'dataProvider' => $dataProvider,
//...
'viewData' => array('itemCount' => $dataProvider->totalItemCount),
'itemView' => '_list',
)
);
В _list.php:
<?phpecho $itemCount;
Все получилось, спасибо за помощь
Ответить