CListView
| Пакет | zii.widgets |
|---|---|
| Наследование | класс CListView » CBaseListView » CWidget » CBaseController » CComponent |
| С момента | 1.1 |
| Исходный код | framework/zii/widgets/CListView.php |
В отличие от CGridView, который отображает элементы данных в таблице, CListView позволяет использовать шаблон представления для рендеринга каждого элемента данных. В результате CListView может генерировать более гибкий результат рендеринга.
CListView поддерживает сортировку и пагинацию элементов данных. Сортировка и пагинация могут выполняться в режиме AJAX или обычного запроса страницы. Преимущество использования CListView заключается в том, что при отключении JavaScript в браузере пользователя сортировка и пагинация автоматически переключаются на обычные запросы страницы и по-прежнему функционируют как ожидается.
CListView следует использовать вместе с провайдером данных, предпочтительно с CActiveDataProvider.
Минимальный код для использования CListView выглядит следующим образом:
$dataProvider=new CActiveDataProvider('Post');
$this->widget('zii.widgets.CListView', array(
'dataProvider'=>$dataProvider,
'itemView'=>'_post', // refers to the partial view named '_post'
'sortableAttributes'=>array(
'title',
'create_time'=>'Post Time',
),
));
Приведенный выше код сначала создаёт провайдер данных для
Post класса ActiveRecord. Затем он использует CListView для отображения каждого элемента данных, возвращённого провайдером данных. Отображение выполняется посредством частичного представления с именем '_post'. Это частичное представление будет рендериться один раз для каждого элемента данных. В представлении можно получить доступ к текущему элементу данных через переменную $data. Для получения более подробной информации см. itemView. Для поддержки сортировки необходимо указать свойство sortableAttributes. В результате будет отображен список гиперссылок, позволяющих отсортировать данные.
Общественные свойства
| Свойство | Тип | Описание | Определено |
|---|---|---|---|
| actionPrefix | строка | префикс к идентификаторам действий. | CWidget |
| afterAjaxUpdate | строка | функция javascript, которая будет вызвана после успешного получения ответа AJAX. | CListView |
| ajaxType | строка | тип ('GET' или 'POST') запросов AJAX. | CListView |
| ajaxUpdate | смешанный тип | Идентификатор контейнера, содержимое которого может быть обновлено с помощью ответа AJAX. | CListView |
| ajaxUpdateError | строка | функция javascript, которая будет вызвана в случае ошибки обновления AJAX. | CListView |
| ajaxUrl | смешанный тип | URL для отправки запросов AJAX. | CListView |
| ajaxVar | строка | имя переменной GET, указывающей, что запрос является запросом AJAX, инициированным этим виджетом. | CListView |
| baseScriptUrl | строка | базовый URL скрипта для всех ресурсов списка (например, javascript, CSS-файл, изображения). | CListView |
| beforeAjaxUpdate | строка | функция javascript, которая будет вызвана перед обновлением AJAX. | CListView |
| controller | CController | Возвращает контроллер, к которому относится этот виджет. | CWidget |
| cssFile | строка | URL CSS-файла, используемого этим списком. | CListView |
| dataProvider | IDataProvider | Провайдер данных для представления. | CBaseListView |
| emptyCssClass | строка | имя CSS-класса для контейнера свойства emptyText. | CBaseListView |
| emptyTagName | строка | имя HTML-тега для контейнера свойства emptyText. | CBaseListView |
| emptyText | строка | сообщение, отображаемое, если dataProvider не содержит данных. | CBaseListView |
| enableHistory | логическое | включает ли использование {@link https://developer. | CListView |
| enablePagination | логическое | включает ли пагинацию. | CBaseListView |
| enableSorting | логическое | включает ли сортировку. | CBaseListView |
| htmlOptions | массив | HTML-опции для тега контейнера представления. | CBaseListView |
| id | строка | Возвращает ID виджета или генерирует новый, если запрошено. | CWidget |
| itemView | строка | представление, используемое для рендеринга каждого элемента данных. | CListView |
| itemsCssClass | строка | имя CSS-класса для контейнера всех элементов отображения данных. | CBaseListView |
| itemsTagName | строка | имя HTML-тега для контейнера всех элементов отображения данных. | CListView |
| loadingCssClass | строка | имя CSS-класса, которое будет назначено элементу контейнера виджета, когда виджет обновляет свое содержимое через AJAX. | CListView |
| owner | CBaseController | Возвращает владельца/создателя этого виджета. | CWidget |
| pager | массив|строка | настройка для пагинации. | CBaseListView |
| pagerCssClass | строка | имя CSS-класса для контейнера пагинации. | CBaseListView |
| separator | строка | HTML-код, отображаемый между любыми двумя последовательными элементами. | CListView |
| skin | смешанный тип | имя скина, используемого этим виджетом. | CWidget |
| sortableAttributes | массив | список имен сортируемых атрибутов. | CListView |
| sorterCssClass | строка | имя CSS-класса для контейнера сортировки. | CListView |
| sorterFooter | строка | текст, отображаемый после ссылок сортировки. | CListView |
| sorterHeader | строка | текст, отображаемый перед ссылками сортировки. | CListView |
| summaryCssClass | строка | имя CSS-класса для контейнера текста резюме. | CBaseListView |
| summaryTagName | строка | имя HTML-тега для контейнера свойства summaryText. | CBaseListView |
| summaryText | строка | шаблон текста резюме для представления. | CBaseListView |
| tagName | строка | имя тега для контейнера представления. | CBaseListView |
| template | строка | шаблон, используемый для управления макетом различных компонентов в представлении списка. | CListView |
| updateSelector | строка | jQuery селектор HTML-элементов, которые могут инициировать обновления AJAX при нажатии. | CListView |
| viewData | массив | дополнительные данные, передаваемые в itemView при рендеринге каждого элемента данных. | CListView |
| viewPath | строка | Возвращает директорию, содержащую файлы представления для данного виджета. | CWidget |
Публичные методы
| Метод | Описание | Определено в |
|---|---|---|
| __call() | Вызывает метод с указанным именем, который не является методом класса. | CComponent |
| __construct() | Конструктор. | CWidget |
| __get() | Возвращает значение свойства, список обработчиков событий или поведение по его имени. | CComponent |
| __isset() | Проверяет, является ли значение свойства null. | CComponent |
| __set() | Устанавливает значение свойства компонента. | CComponent |
| __unset() | Устанавливает свойство компонента в null. | CComponent |
| actions() | Возвращает список действий, используемых этим виджетом. | CWidget |
| asa() | Возвращает объект поведения с указанным именем. | CComponent |
| attachBehavior() | Присоединяет поведение к этому компоненту. | CComponent |
| attachBehaviors() | Присоединяет список поведений к компоненту. | CComponent |
| attachEventHandler() | Присоединяет обработчик событий к событию. | CComponent |
| beginCache() | Начинает кэширование фрагмента. | CBaseController |
| beginClip() | Начинает запись клипа. | CBaseController |
| beginContent() | Начинает рендеринг содержимого, которое должно быть оформлено указанным представлением. | CBaseController |
| beginWidget() | Создаёт виджет и выполняет его. | CBaseController |
| canGetProperty() | Определяет, можно ли прочитать свойство. | CComponent |
| canSetProperty() | Определяет, можно ли установить свойство. | CComponent |
| createWidget() | Создаёт виджет и инициализирует его. | CBaseController |
| detachBehavior() | Отсоединяет поведение от компонента. | CComponent |
| detachBehaviors() | Отсоединяет все поведения от компонента. | CComponent |
| detachEventHandler() | Отсоединяет существующий обработчик событий. | CComponent |
| disableBehavior() | Отключает присоединённое поведение. | CComponent |
| disableBehaviors() | Отключает все присоединённые поведения к этому компоненту. | CComponent |
| enableBehavior() | Включает присоединённое поведение. | CComponent |
| enableBehaviors() | Включает все присоединённые к этому компоненту поведения. | CComponent |
| endCache() | Завершает кэширование фрагмента. | CBaseController |
| endClip() | Завершает запись клипа. | CBaseController |
| endContent() | Завершает рендеринг содержимого. | CBaseController |
| endWidget() | Завершает выполнение указанного виджета. | CBaseController |
| evaluateExpression() | Оценивает выражение PHP или обратный вызов в контексте этого компонента. | CComponent |
| getController() | Возвращает контроллер, к которому принадлежит этот виджет. | CWidget |
| getEventHandlers() | Возвращает список присоединённых обработчиков событий для события. | CComponent |
| getId() | Возвращает идентификатор виджета или генерирует новый, если запрошено. | CWidget |
| getOwner() | Возвращает владельца/создателя этого виджета. | CWidget |
| getViewFile() | Ищет файл скрипта представления по имени представления. | CWidget |
| getViewPath() | Возвращает директорию, содержащую файлы представлений для этого виджета. | CWidget |
| hasEvent() | Определяет, определено ли событие. | CComponent |
| hasEventHandler() | Проверяет, имеет ли событие с указанным именем прикреплённые обработчики. | CComponent |
| hasProperty() | Определяет, определено ли свойство. | CComponent |
| init() | Инициализирует список представлений. | CListView |
| raiseEvent() | Вызывает событие. | CComponent |
| registerClientScript() | Регистрирует необходимые скрипты клиента. | CListView |
| render() | Рендерит представление. | CWidget |
| renderContent() | Рендерит основное содержимое представления. | CBaseListView |
| renderEmptyText() | Рендерит сообщение об отсутствии данных, когда нет данных. | CBaseListView |
| renderFile() | Рендерит файл представления. | CBaseController |
| renderInternal() | Рендерит файл представления. | CBaseController |
| renderItems() | Рендерит список элементов данных. | CListView |
| renderKeys() | Рендерит значения ключей данных в скрытом теге. | CBaseListView |
| renderPager() | Рендерит страницу. | CBaseListView |
| renderSorter() | Рендерит сортировщик. | CListView |
| renderSummary() | Рендерит текст сводки. | CBaseListView |
| run() | Рендерит представление. | CBaseListView |
| setId() | Устанавливает идентификатор виджета. | CWidget |
| widget() | Создаёт виджет и выполняет его. | CBaseController |
Защищённые методы
| Метод | Описание | Определено в |
|---|---|---|
| renderSection() | Отображает раздел. | CBaseListView |
Подробности свойств
afterAjaxUpdate свойство
public string $afterAjaxUpdate;
Функция JavaScript, которая будет вызвана после успешного получения ответа AJAX. Подпись функции: function(id, data) , где «id» относится к ID списка, а «data» — к полученным данным ответа AJAX.
ajaxType свойство (доступно с v1.1.14)
public string $ajaxType;
Тип («GET» или «POST») запросов AJAX. Если не задано, используется «GET». Вы можете установить значение «POST», если фильтруете по многим полям одновременно и у вас проблемы с длиной строки запроса GET. Обратите внимание, что в режиме POST прямые ссылки и функция enableHistory могут работать некорректно!
ajaxUpdate свойство
public mixed $ajaxUpdate;
ID контейнера, содержимое которого может быть обновлено с помощью ответа AJAX. По умолчанию null, что означает контейнер для данного экземпляра списка. Если значение false, сортировка и постраничная навигация будут выполняться в обычных запросах страницы вместо запросов AJAX. Если сортировка и постраничная навигация должны вызывать обновление содержимого нескольких контейнеров по методу AJAX, эти идентификаторы контейнеров могут быть перечислены здесь (разделены запятыми).
ajaxUpdateError свойство (доступно с v1.1.13)
public string $ajaxUpdateError;
Функция JavaScript, которая будет вызвана в случае ошибки обновления AJAX.
Подпись функции: function(xhr, textStatus, errorThrown, errorMessage)
-
xhr— объект XMLHttpRequest. -
textStatus— строка, описывающая тип произошедшей ошибки. Возможные значения (кроме null) — «timeout», «error», «notmodified» и «parsererror» -
errorThrown— необъект исключения, если таковое имело место. -
errorMessage— стандартное сообщение об ошибке CGridView, полученное из xhr и errorThrown. Полезно, если вы просто хотите отобразить эту ошибку по-другому. CGridView по умолчанию отображает эту ошибку с помощью javascript.alert()
Пример (добавить в вызов CGridView):
...
'ajaxUpdateError'=>'function(xhr,ts,et,err,id){ $("#"+id).text(err); }',
...
ajaxUrl свойство (доступно с v1.1.8)
public mixed $ajaxUrl;
URL для запросов AJAX, который должен быть отправлен. На это свойство будет применено CHtml::normalizeUrl(). Если не указано, для запросов AJAX будет использоваться текущий URL страницы.
ajaxVar свойство
public string $ajaxVar;
Имя переменной GET, которая указывает, что запрос является запросом AJAX, инициированным этим виджетом. По умолчанию «ajax». Это эффективно только тогда, когда ajaxUpdate не равно false.
baseScriptUrl свойство
public string $baseScriptUrl;
Базовый URL скрипта для всех ресурсов списка (например, файлы JavaScript, CSS, изображения). По умолчанию null, что означает использование интегрированных ресурсов списка (которые публикуются как активы).
beforeAjaxUpdate свойство
public string $beforeAjaxUpdate;
Функция JavaScript, которая будет вызвана перед обновлением AJAX. Подпись функции: function(id) , где «id» относится к ID списка.
cssFile свойство
public string $cssFile;
URL файла CSS, используемого этим списком. По умолчанию null, что означает использование интегрированного файла CSS. Если это значение равно false, вы несёте ответственность за явное включение необходимого файла CSS на вашей странице.
enableHistory свойство (доступно с v1.1.11)
public boolean $enableHistory;
Нужно ли использовать объект истории DOM DOM history object. Установите это свойство в значение true, чтобы сохранить состояние списка при повторном посещении страницы. Обратите внимание на два ограничения для этой функции: — Эта функция совместима только с браузерами, поддерживающими HTML5. — Ожидайте непредсказуемого поведения (например, нескольких запросов AJAX) если на одной странице имеется более одной сетки/списка с включённой функцией enableHistory.
itemView свойство
public string $itemView;
Вид, используемый для отображения каждого элемента данных. Это значение свойства будет передано в качестве первого параметра либо CController::renderPartial, либо CWidget::render для отображения каждого элемента данных. В соответствующей шаблоне представления, помимо переменных, объявленных в viewData, можно использовать следующие переменные:
-
$this: относится к владельцу этого виджета списка. Например, если виджет находится в представлении контроллера, то$thisотносится к контроллеру. -
$data: относится к элементу данных, который в данный момент отображается. -
$index: относится к нулевому индексу элемента данных, который в данный момент отображается. -
$widget: относится к экземпляру этого виджета списка.
itemsTagName свойство (доступно с v1.1.4)
public string $itemsTagName;
Имя HTML-тега для контейнера отображения всех элементов данных. По умолчанию «div».
loadingCssClass свойство (доступно с v1.1.1)
public string $loadingCssClass;
Имя класса CSS, которое будет назначено элементу контейнера виджета при обновлении виджетом своего содержимого с помощью AJAX. По умолчанию «list-view-loading».
separator свойство (доступно с v1.1.7)
public string $separator;
HTML-код, который будет отображаться между любыми двумя последовательными элементами.
sortableAttributes свойство
public array $sortableAttributes;
Список имён сортируемых атрибутов. Для того, чтобы атрибут был сортируемым, он также должен быть сортируемым атрибутом в свойстве IDataProvider::sort объекта dataProvider.
См. также
sorterCssClass свойство
public string $sorterCssClass;
Имя класса CSS для контейнера сортировки. По умолчанию «sorter».
sorterFooter свойство
public string $sorterFooter;
Текст, отображаемый после ссылок сортировки. По умолчанию пусто.
sorterHeader свойство
public string $sorterHeader;
Текст, отображаемый перед ссылками сортировки. По умолчанию «Сортировать по: ».
template свойство
public string $template;
Шаблон, используемый для управления макетом различных компонентов в списке. Различаются следующие токены: {summary}, {sorter}, {items} и {pager}. Они будут заменены на текст резюме, ссылки сортировки, список элементов данных и постраничную навигацию.
updateSelector свойство (доступно с v1.1.7)
public string $updateSelector;
jQuery-селектор HTML-элементов, которые могут инициировать обновления AJAX при нажатии на них. Если не задано, ссылки постраничной навигации и ссылки сортировки будут инициировать обновления AJAX.
viewData свойство
public array $viewData;
Дополнительные данные, передаваемые в itemView при отображении каждого элемента данных. Этот массив будет преобразован в локальные PHP-переменные, доступные в itemView.
Подробности методов
init() метод
public void init() |
public function init()
{
if($this->itemView===null)
throw new CException(Yii::t('zii','The property "itemView" cannot be empty.'));
parent::init();
if(!isset($this->htmlOptions['class']))
$this->htmlOptions['class']='list-view';
if($this->baseScriptUrl===null)
$this->baseScriptUrl=Yii::app()->getAssetManager()->publish(Yii::getPathOfAlias('zii.widgets.assets')).'/listview';
if($this->cssFile!==false)
{
if($this->cssFile===null)
$this->cssFile=$this->baseScriptUrl.'/styles.css';
Yii::app()->getClientScript()->registerCssFile($this->cssFile);
}
}
Инициализирует список. Этот метод инициализирует необходимые значения свойств и создаёт объекты столбцов.
registerClientScript() метод
public void registerClientScript() |
public function registerClientScript()
{
$id=$this->getId();
if($this->ajaxUpdate===false)
$ajaxUpdate=array();
else
$ajaxUpdate=array_unique(preg_split('/\s*,\s*/',$this->ajaxUpdate.','.$id,-1,PREG_SPLIT_NO_EMPTY));
$options=array(
'ajaxUpdate'=>$ajaxUpdate,
'ajaxVar'=>$this->ajaxVar,
'pagerClass'=>$this->pagerCssClass,
'loadingClass'=>$this->loadingCssClass,
'sorterClass'=>$this->sorterCssClass,
'enableHistory'=>$this->enableHistory
);
if($this->ajaxUrl!==null)
$options['url']=CHtml::normalizeUrl($this->ajaxUrl);
if($this->ajaxType!==null)
$options['ajaxType']=strtoupper($this->ajaxType);
if($this->updateSelector!==null)
$options['updateSelector']=$this->updateSelector;
foreach(array('beforeAjaxUpdate', 'afterAjaxUpdate', 'ajaxUpdateError') as $event)
{
if($this->$event!==null)
{
if($this->$event instanceof CJavaScriptExpression)
$options[$event]=$this->$event;
else
$options[$event]=new CJavaScriptExpression($this->$event);
}
}
$options=CJavaScript::encode($options);
$cs=Yii::app()->getClientScript();
$cs->registerCoreScript('jquery');
$cs->registerCoreScript('bbq');
if($this->enableHistory)
$cs->registerCoreScript('history');
$cs->registerScriptFile($this->baseScriptUrl.'/jquery.yiilistview.js',CClientScript::POS_END);
$cs->registerScript(__CLASS__.'#'.$id,"jQuery('#$id').yiiListView($options);");
}
Регистрирует необходимые скрипты клиента.
renderItems() метод
public void renderItems() |
public function renderItems()
{
echo CHtml::openTag($this->itemsTagName,array('class'=>$this->itemsCssClass))."\n";
$data=$this->dataProvider->getData();
if(($n=count($data))>0)
{
$owner=$this->getOwner();
$viewFile=$owner->getViewFile($this->itemView);
$j=0;
foreach($data as $i=>$item)
{
$data=$this->viewData;
$data['index']=$i;
$data['data']=$item;
$data['widget']=$this;
$owner->renderFile($viewFile,$data);
if($j++ < $n-1)
echo $this->separator;
}
}
else
$this->renderEmptyText();
echo CHtml::closeTag($this->itemsTagName);
}
Отображает список элементов данных.
renderSorter() метод
public void renderSorter() |
public function renderSorter()
{
if($this->dataProvider->getItemCount()<=0 || !$this->enableSorting || empty($this->sortableAttributes))
return;
echo CHtml::openTag('div',array('class'=>$this->sorterCssClass))."\n";
echo $this->sorterHeader===null ? Yii::t('zii','Sort by: ') : $this->sorterHeader;
echo "<ul>\n";
$sort=$this->dataProvider->getSort();
foreach($this->sortableAttributes as $name=>$label)
{
echo "<li>";
if(is_integer($name))
echo $sort->link($label);
else
echo $sort->link($name,$label);
echo "</li>\n";
}
echo "</ul>";
echo $this->sorterFooter;
echo CHtml::closeTag('div');
}
Отображает сортировку.
© 2008–2017 by Yii Software LLC
Licensed under the three clause BSD license.
http://www.yiiframework.com/doc/api/1.1/CListView