CGridView
| Пакет | zii.widgets.grid |
|---|---|
| Наследование | класс CGridView » CBaseListView » CWidget » CBaseController » CComponent |
| С версии | 1.1 |
| Исходный код | framework/zii/widgets/grid/CGridView.php |
Каждая строка таблицы представляет данные одного элемента данных, а столбец обычно представляет атрибут элемента (некоторые столбцы могут соответствовать сложным выражениям атрибутов или статическому тексту).
CGridView поддерживает сортировку и постраничный вывод элементов данных. Сортировка и постраничный вывод могут выполняться в режиме AJAX или обычного запроса на страницу. Преимущество использования CGridView заключается в том, что при отключении JavaScript в браузере пользователя сортировка и постраничный вывод автоматически переходят к обычным запросам на страницу и все еще работают как ожидается.
CGridView следует использовать совместно с поставщиком данных, предпочтительно с CActiveDataProvider.
Минимальный код для использования CGridView:
$dataProvider=new CActiveDataProvider('Post');
$this->widget('zii.widgets.grid.CGridView', array(
'dataProvider'=>$dataProvider,
));
В приведенном коде сначала создается поставщик данных для класса
Post ActiveRecord. Затем используется CGridView для отображения каждого атрибута в каждом Post экземпляре. Отображаемая таблица оснащена функциями сортировки и постраничного вывода. Для избирательного отображения атрибутов с различными форматами можно настроить свойство CGridView::columns. Например, можно указать, что будут отображаться только атрибуты
title и create_time, а атрибут create_time должен быть отформатирован для отображения в виде времени. Также можно отобразить атрибуты связанных объектов, используя синтаксис точки, как показано ниже:
$this->widget('zii.widgets.grid.CGridView', array(
'dataProvider'=>$dataProvider,
'columns'=>array(
'title', // display the 'title' attribute
'category.name', // display the 'name' attribute of the 'category' relation
'content:html', // display the 'content' attribute as purified HTML
array( // display 'create_time' using an expression
'name'=>'create_time',
'value'=>'date("M j, Y", $data->create_time)',
),
array( // display 'author.username' using an expression
'name'=>'authorName',
'value'=>'$data->author->username',
),
array( // display a column with "view", "update" and "delete" buttons
'class'=>'CButtonColumn',
),
),
));
Для получения дополнительной информации о настройке этого свойства см. столбцы.
Общие свойства
| Свойство | Тип | Описание | Определено в |
|---|---|---|---|
| actionPrefix | строка | префикс к идентификаторам действий. | CWidget |
| afterAjaxUpdate | строка | функция JavaScript, которая будет вызвана после успешного получения ответа AJAX. | CGridView |
| ajaxType | строка | тип ('GET' или 'POST') запросов AJAX. | CGridView |
| ajaxUpdate | смешанный тип | идентификатор контейнера, содержимое которого может быть обновлено ответом AJAX. | CGridView |
| ajaxUpdateError | строка | функция JavaScript, которая будет вызвана в случае ошибки обновления AJAX. | CGridView |
| ajaxUrl | смешанный тип | URL для отправки запросов AJAX. | CGridView |
| ajaxVar | строка | имя переменной GET, указывающее, что запрос является AJAX-запросом, инициированным этим виджетом. | CGridView |
| baseScriptUrl | строка | базовый URL скрипта для всех ресурсов грида (например, JavaScript, файлы CSS, изображения). | CGridView |
| beforeAjaxUpdate | строка | функция JavaScript, которая будет вызвана перед обновлением AJAX. | CGridView |
| blankDisplay | строка | текст, отображаемый в пустой ячейке грида. | CGridView |
| columns | массив | конфигурация столбцов грида. | CGridView |
| controller | CController | Возвращает контроллер, к которому принадлежит этот виджет. | CWidget |
| cssFile | строка | URL файла CSS, используемого этим гридом. | CGridView |
| dataProvider | IDataProvider | источник данных для представления. | CBaseListView |
| emptyCssClass | строка | имя класса CSS для контейнера свойства emptyText. | CBaseListView |
| emptyTagName | строка | имя HTML-тега для контейнера свойства emptyText. | CBaseListView |
| emptyText | строка | сообщение, отображаемое, когда у dataProvider нет данных. | CBaseListView |
| enableHistory | булево | включает использование {@link https://developer. | CGridView |
| enablePagination | булево | включает пагинацию. | CBaseListView |
| enableSorting | булево | включает сортировку. | CBaseListView |
| filter | CModel | экземпляр модели, хранящий данные фильтра пользователя. | CGridView |
| filterCssClass | строка | имя класса CSS для элемента строки таблицы, содержащего все поля ввода фильтра. | CGridView |
| filterPosition | строка | управление отображением фильтров в представлении грида. | CGridView |
| filterSelector | строка | селектор jQuery для полей ввода фильтра. | CGridView |
| formatter | CFormatter | экземпляр форматировщика. | CGridView |
| hasFooter | булево | включает подвал таблицы. | CGridView |
| hideHeader | булево | скрывает заголовки ячеек грида. | CGridView |
| htmlOptions | массив | HTML-опции для тега контейнера представления. | CBaseListView |
| id | строка | Возвращает ID виджета или генерирует новый, если необходимо. | CWidget |
| itemsCssClass | строка | имя класса CSS для контейнера отображения элементов данных. | CBaseListView |
| loadingCssClass | строка | имя класса CSS, которое будет назначено элементу контейнера виджета при обновлении содержимого виджета с помощью AJAX. | CGridView |
| nullDisplay | строка | текст, отображаемый в ячейке данных, когда значение данных равно null. | CGridView |
| owner | CBaseController | Возвращает владельца/создателя этого виджета. | CWidget |
| pager | массив или строка | конфигурация для пагинации. | CBaseListView |
| pagerCssClass | строка | имя класса CSS для контейнера пагинации. | CBaseListView |
| rowCssClass | массив | имена классов CSS для строк тела таблицы. | CGridView |
| rowCssClassExpression | строка | PHP-выражение, которое вычисляется для каждой строки тела таблицы, и результат которого используется в качестве имени класса CSS для строки. | CGridView |
| rowHtmlOptionsExpression | строка | PHP-выражение, которое вычисляется для каждой строки тела таблицы, и результат которого используется в качестве дополнительных HTML-атрибутов для строки. | CGridView |
| selectableRows | целое число | количество строк тела таблицы, которые можно выбрать. | CGridView |
| selectionChanged | строка | функция JavaScript, которая будет вызвана после изменения выбора строки. | CGridView |
| showTableOnEmpty | булево | отображать таблицу даже при отсутствии данных. | CGridView |
| skin | смешанный тип | имя используемой темы виджета. | CWidget |
| summaryCssClass | строка | имя класса CSS для контейнера текста резюме. | CBaseListView |
| summaryTagName | строка | имя HTML-тега для контейнера свойства summaryText. | CBaseListView |
| summaryText | строка | шаблон текста резюме для представления. | CBaseListView |
| tagName | строка | имя тега для контейнера представления. | CBaseListView |
| template | строка | шаблон для управления макетом различных разделов в представлении. | CBaseListView |
| updateSelector | строка | селектор jQuery для HTML-элементов, которые могут инициировать AJAX-обновления при нажатии. | CGridView |
| viewPath | строка | Возвращает директорию с файлами представления для этого виджета. | CWidget |
Публичные методы
| Метод | Описание | Определено в |
|---|---|---|
| __call() | Вызывает метод с указанным именем, который не является методом класса. | CComponent |
| __construct() | Конструктор. | CWidget |
| __get() | Возвращает значение свойства, список обработчиков событий или поведение по его имени. | CComponent |
| __isset() | Проверяет, является ли значение свойства пустым. | 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 |
| getFormatter() | Возвращает экземпляр форматировщика. По умолчанию - компонент приложения 'format'. | CGridView |
| getHasFooter() | Возвращает, должен ли столбец отображать нижнюю часть таблицы. Это истинно, если у любого из столбцов значение CGridColumn::hasFooter равно true. | CGridView |
| getId() | Возвращает ID виджета или генерирует новый, если запрошено. | CWidget |
| getOwner() | Возвращает владельца/создателя этого виджета. | CWidget |
| getViewFile() | Ищет файл скрипта представления по имени представления. | CWidget |
| getViewPath() | Возвращает каталог, содержащий файлы представления для этого виджета. | CWidget |
| hasEvent() | Определяет, определено ли событие. | CComponent |
| hasEventHandler() | Проверяет, есть ли присоединённые обработчики для события с указанным именем. | CComponent |
| hasProperty() | Определяет, определено ли свойство. | CComponent |
| init() | Инициализирует виджет грида. | CGridView |
| raiseEvent() | Вызывает событие. | CComponent |
| registerClientScript() | Регистрирует необходимые скрипты для клиента. | CGridView |
| render() | Отображает представление. | CWidget |
| renderContent() | Отображает основное содержимое представления. | CBaseListView |
| renderEmptyText() | Отображает сообщение об отсутствии данных. | CBaseListView |
| renderFile() | Отображает файл представления. | CBaseController |
| renderFilter() | Отображает фильтр. | CGridView |
| renderInternal() | Отображает файл представления. | CBaseController |
| renderItems() | Отображает элементы данных для виджета грида. | CGridView |
| renderKeys() | Отображает значения ключей данных в скрытом теге. | CBaseListView |
| renderPager() | Отображает компонент пагинации. | CBaseListView |
| renderSummary() | Отображает текст сводки. | CBaseListView |
| renderTableBody() | Отображает тело таблицы. | CGridView |
| renderTableFooter() | Отображает нижнюю часть таблицы. | CGridView |
| renderTableHeader() | Отображает заголовок таблицы. | CGridView |
| renderTableRow() | Отображает строку тела таблицы. | CGridView |
| run() | Отображает представление. | CBaseListView |
| setFormatter() | Устанавливает экземпляр форматировщика. | CGridView |
| setId() | Устанавливает идентификатор виджета. | CWidget |
| widget() | Создаёт виджет и выполняет его. | CBaseController |
Защищённые методы
| Метод | Описание | Определено |
|---|---|---|
| createDataColumn() | Создаёт CDataColumn на основе строки короткого описания колонки. | CGridView |
| initColumns() | Создаёт объекты колонок и инициализирует их. | CGridView |
| renderDataCell() | Точка входа для расширения CGridView, чтобы иметь возможность подключаться к процессу рендеринга ячейки данных. | CGridView |
| renderSection() | Отображает секцию. | CBaseListView |
Подробное описание свойств
afterAjaxUpdate свойство
public string $afterAjaxUpdate;
функция javascript, которая будет вызвана после успешного получения ответа AJAX. Подпись функции: function(id, data) , где 'id' относится к идентификатору таблицы, 'data' к полученным данным ajax.
ajaxType свойство (доступно с версии v1.1.14)
public string $ajaxType;
тип ('GET' или 'POST') запросов AJAX. Если не задано, используется 'GET'. Можно установить 'POST', если вы фильтруете по многим полям одновременно и у вас проблемы с длиной строки GET запроса. Обратите внимание, что в режиме POST прямые ссылки и функция enableHistory могут работать некорректно!
ajaxUpdate свойство
public mixed $ajaxUpdate;
идентификатор контейнера, содержимое которого может быть обновлено ответом AJAX. По умолчанию null, что означает контейнер для этого экземпляра CGridView. Если установлено false, сортировка и пагинация будут выполняться при обычных запросах страницы вместо запросов AJAX. Если сортировка и пагинация должны вызывать обновление содержимого нескольких контейнеров AJAX-подобно, эти идентификаторы контейнеров могут быть перечислены здесь (разделенные запятыми).
ajaxUpdateError свойство
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,options) , где 'id' относится к идентификатору таблицы, 'options' к параметрам AJAX запроса (см. руководство по jQuery.ajax).
blankDisplay свойство (доступно с версии v1.1.7)
public string $blankDisplay;
текст, который будет отображаться в пустой ячейке таблицы. Это свойство НЕ будет кодироваться в HTML при рендеринге. По умолчанию HTML пустая строка. Это отличается от nullDisplay, так как nullDisplay используется только CDataColumn для рендеринга значений null.
columns свойство
public array $columns;
конфигурация колонок таблицы. Каждый элемент массива представляет конфигурацию одной колонки, которая может быть строкой или массивом.
Если колонка задана как строка, она должна быть в формате "name:type:header", где "type" и "header" — необязательны. В этом случае будет создан экземпляр CDataColumn, у которого CDataColumn::name, CDataColumn::type и CDataColumn::header будут инициализированы соответственно.
Если колонка задана как массив, она будет использоваться для создания экземпляра колонки, где элемент 'class' указывает имя класса колонки (по умолчанию CDataColumn, если отсутствует). В настоящее время предоставляются следующие официальные классы колонок: CDataColumn, CLinkColumn, CButtonColumn и CCheckBoxColumn.
cssFile свойство
public string $cssFile;
URL CSS-файла, используемого этой таблицей. По умолчанию null, что означает использование интегрированного CSS-файла. Если установлено false, вы сами должны включить необходимый CSS-файл на странице.
enableHistory свойство (доступно с версии v1.1.11)
public boolean $enableHistory;
использовать объект истории браузера. Установите это свойство в true, чтобы сохранить состояние таблицы при переходах на страницу. Обратите внимание, что для этой функции есть два ограничения:
- эта функция совместима только с браузерами, поддерживающими HTML5.
- ожидайте неожиданного поведения (например, несколько запросов AJAX), если на одной странице есть более одной таблицы/списка с включённой enableHistory.
filter свойство (доступно с версии v1.1.1)
public CModel $filter;
экземпляр модели, который хранит введённые пользователем данные фильтра. Если это свойство установлено, таблица включит фильтрацию по столбцам. Каждая колонка по умолчанию отображает поле ввода текста в верхней части, в которое пользователи могут вводить данные для фильтрации. Обратите внимание, что для отображения поля ввода для фильтрации у колонки должно быть установлено свойство CDataColumn::name или CDataColumn::filter в виде HTML кода для поля ввода. Если это свойство не установлено (null), фильтрация отключена.
filterCssClass свойство (доступно с версии v1.1.1)
public string $filterCssClass;
имя CSS класса для элемента строки таблицы, содержащего все поля ввода фильтра. По умолчанию 'filters'.
См. также
filterPosition свойство (доступно с версии v1.1.1)
public string $filterPosition;
должны ли фильтры отображаться в таблице. Допустимые значения:
- header: фильтры будут отображаться над каждой ячейкой заголовка столбца.
- body: фильтры будут отображаться непосредственно под каждой ячейкой заголовка столбца.
- footer: фильтры будут отображаться под каждой ячейкой подвала столбца.
См. также
filterSelector свойство (доступно с версии v1.1.13)
public string $filterSelector;
jQuery селектор полей ввода фильтра. Токен '{filter}' распознаётся и заменяется селектором фильтров таблицы. По умолчанию '{filter}'.
Примечание: если это значение пустое, будет выброшено исключение.
Пример (добавление пользовательского селектора к стандартному):
...
'filterSelector'=>'{filter}, #myfilter',
...
formatter свойство
public CFormatter getFormatter()
public void setFormatter(CFormatter $value)
экземпляр форматировщика. По умолчанию компонент 'format'.
hasFooter свойство только для чтения
public boolean getHasFooter()
должен ли таблица отображать подвал. Это true, если у любой из колонок есть значение true CGridColumn::hasFooter.
hideHeader свойство (доступно с версии v1.1.1)
public boolean $hideHeader;
скрывать ли ячейки заголовка таблицы. Если это true, ячейки заголовка не будут отображаться, что означает, что таблица больше не может быть отсортирована, так как ссылки сортировки находятся в заголовке. По умолчанию false.
loadingCssClass свойство (доступно начиная с v1.1.1)
public string $loadingCssClass;
имя CSS класса, которое будет присвоено элементу контейнера виджета, когда виджет обновляет содержимое через AJAX. По умолчанию «grid-view-loading».
nullDisplay свойство
public string $nullDisplay;
текст, который будет отображаться в ячейке данных, когда значение данных равно null. Это свойство НЕ будет кодироваться в HTML при рендеринге. По умолчанию пустой HTML.
rowCssClass свойство
public array $rowCssClass;
имена CSS-классов для строк тела таблицы. Если указано несколько имён CSS-классов, они будут присваиваться строкам последовательно и многократно. Это свойство игнорируется, если установлено rowCssClassExpression. По умолчанию array('odd', 'even').
См. также
rowCssClassExpression свойство
public string $rowCssClassExpression;
PHP-выражение, которое вычисляется для каждой строки тела таблицы, а результат используется в качестве имени CSS-класса для строки. В этом выражении вы можете использовать следующие переменные:
-
$rowномер строки (нумерация с нуля) -
$dataмодель данных для строки -
$thisобъект грида
PHP-выражение может быть любым кодом PHP, имеющим значение. Чтобы узнать больше о том, что такое выражение, обратитесь к руководству PHP.
См. также
rowHtmlOptionsExpression свойство (доступно начиная с v1.1.13)
public string $rowHtmlOptionsExpression;
PHP-выражение, которое вычисляется для каждой строки тела таблицы, а результат используется в качестве дополнительных атрибутов HTML для строки. Выражение должно возвращать массив, пары ключ-значение которого соответствуют атрибуту и значению HTML. В этом выражении вы можете использовать следующие переменные:
-
$rowномер строки (нумерация с нуля) -
$dataмодель данных для строки -
$thisобъект грида
PHP-выражение может быть любым кодом PHP, имеющим значение. Чтобы узнать больше о том, что такое выражение, обратитесь к руководству PHP.
selectableRows свойство
public integer $selectableRows;
количество строк тела таблицы, которые можно выбрать. Если 0, строки нельзя выбрать. Если 1, можно выбрать только одну строку. Если 2 или любое другое число, можно выбрать несколько строк. Выбранная строка будет иметь CSS-класс «selected». Вы также можете вызвать JavaScript-функцию $(gridID).yiiGridView('getSelection') для получения ключевых значений текущих выбранных строк (gridID — селектор DOM грида).
selectionChanged свойство
public string $selectionChanged;
JavaScript-функция, которая будет вызвана после изменения выбора строк. Подпись функции: function(id) , где «id» относится к идентификатору грида. В этой функции вы можете использовать $(gridID).yiiGridView('getSelection') для получения ключевых значений текущих выбранных строк (gridID — селектор DOM грида).
См. также
showTableOnEmpty свойство
public boolean $showTableOnEmpty;
отображать ли таблицу, даже если данных нет. По умолчанию true. emptyText будет отображаться, чтобы указать, что данных нет.
updateSelector свойство (доступно начиная с v1.1.7)
public string $updateSelector;
jQuery-селектор HTML-элементов, которые могут инициировать AJAX-обновления при нажатии. Распознаются токены: {page} и {sort}. Они будут заменены селекторами страниц и сортировки. По умолчанию '{page}, {sort}', что означает, что ссылки постраничной навигации и ссылки сортировки будут вызывать AJAX-обновления. Токены доступны с версии 1.1.11
Примечание: если это значение пустое, будет брошено исключение.
Пример (добавление пользовательского селектора к стандартным):
...
'updateSelector'=>'{page}, {sort}, #mybutton',
...
Подробное описание методов
createDataColumn() метод
protected CDataColumn createDataColumn(string $text) | ||
| $text | строка | строка описания столбца |
| {return} | CDataColumn | экземпляр столбца |
protected function createDataColumn($text)
{
if(!preg_match('/^([\w\.]+)(:(\w*))?(:(.*))?$/',$text,$matches))
throw new CException(Yii::t('zii','The column must be specified in the format of "Name:Type:Label", where "Type" and "Label" are optional.'));
$column=new CDataColumn($this);
$column->name=$matches[1];
if(isset($matches[3]) && $matches[3]!=='')
$column->type=$matches[3];
if(isset($matches[5]))
$column->header=$matches[5];
return $column;
}
Создаёт CDataColumn на основе короткой строки описания столбца.
getFormatter() метод
public CFormatter getFormatter() | ||
| {return} | CFormatter | экземпляр форматера. По умолчанию компонент приложения «format». |
public function getFormatter()
{
if($this->_formatter===null)
$this->_formatter=Yii::app()->format;
return $this->_formatter;
}
getHasFooter() метод
public boolean getHasFooter() | ||
| {return} | boolean | отображать ли подвал таблицы. Это true, если у любого из столбцов значение CGridColumn::hasFooter равно true. |
public function getHasFooter()
{
foreach($this->columns as $column)
if($column->getHasFooter())
return true;
return false;
}
init() метод
public void init() |
public function init()
{
parent::init();
if(empty($this->updateSelector))
throw new CException(Yii::t('zii','The property updateSelector should be defined.'));
if(empty($this->filterSelector))
throw new CException(Yii::t('zii','The property filterSelector should be defined.'));
if(!isset($this->htmlOptions['class']))
$this->htmlOptions['class']='grid-view';
if($this->baseScriptUrl===null)
$this->baseScriptUrl=Yii::app()->getAssetManager()->publish(Yii::getPathOfAlias('zii.widgets.assets')).'/gridview';
if($this->cssFile!==false)
{
if($this->cssFile===null)
$this->cssFile=$this->baseScriptUrl.'/styles.css';
Yii::app()->getClientScript()->registerCssFile($this->cssFile);
}
$this->initColumns();
}
Инициализирует грид. Этот метод инициализирует необходимые значения свойств и создаёт объекты столбцов.
initColumns() метод
protected void initColumns() |
protected function initColumns()
{
if($this->columns===array())
{
if($this->dataProvider instanceof CActiveDataProvider)
$this->columns=$this->dataProvider->model->attributeNames();
elseif($this->dataProvider instanceof IDataProvider)
{
// use the keys of the first row of data as the default columns
$data=$this->dataProvider->getData();
if(isset($data[0]) && is_array($data[0]))
$this->columns=array_keys($data[0]);
}
}
$id=$this->getId();
foreach($this->columns as $i=>$column)
{
if(is_string($column))
$column=$this->createDataColumn($column);
else
{
if(!isset($column['class']))
$column['class']='CDataColumn';
$column=Yii::createComponent($column, $this);
}
if(!$column->visible)
{
unset($this->columns[$i]);
continue;
}
if($column->id===null)
$column->id=$id.'_c'.$i;
$this->columns[$i]=$column;
}
foreach($this->columns as $column)
$column->init();
}
Создаёт объекты столбцов и инициализирует их.
registerClientScript() метод
public void registerClientScript() |
public function registerClientScript()
{
$id=$this->getId();
if($this->ajaxUpdate===false)
$ajaxUpdate=false;
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,
'filterClass'=>$this->filterCssClass,
'tableClass'=>$this->itemsCssClass,
'selectableRows'=>$this->selectableRows,
'enableHistory'=>$this->enableHistory,
'updateSelector'=>$this->updateSelector,
'filterSelector'=>$this->filterSelector
);
if($this->ajaxUrl!==null)
$options['url']=CHtml::normalizeUrl($this->ajaxUrl);
if($this->ajaxType!==null) {
$options['ajaxType']=strtoupper($this->ajaxType);
$request=Yii::app()->getRequest();
if ($options['ajaxType']=='POST' && $request->enableCsrfValidation) {
$options['csrfTokenName']=$request->csrfTokenName;
$options['csrfToken']=$request->getCsrfToken();
}
}
if($this->enablePagination)
$options['pageVar']=$this->dataProvider->getPagination()->pageVar;
foreach(array('beforeAjaxUpdate', 'afterAjaxUpdate', 'ajaxUpdateError', 'selectionChanged') 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.yiigridview.js',CClientScript::POS_END);
$cs->registerScript(__CLASS__.'#'.$id,"jQuery('#$id').yiiGridView($options);");
}
Регистрирует необходимые клиентские скрипты.
renderDataCell() метод (доступно начиная с v1.1.16)
protected void renderDataCell(CGridColumn $column, integer $row) | ||
| $column | CGridColumn | Экземпляр столбца |
| $row | целое | |
protected function renderDataCell($column, $row)
{
$column->renderDataCell($row);
}
Точка входа для расширения CGridView, чтобы подключиться к процессу рендеринга ячеек данных.
Переопределяя только этот метод, нам не нужно копировать и изменять весь метод `renderTableRow`. Или переопределить метод `renderDataCell()` всех возможных потомков CGridColumn.
renderFilter() метод (доступно начиная с v1.1.1)
public void renderFilter() |
public function renderFilter()
{
if($this->filter!==null)
{
echo "<tr class=\"{$this->filterCssClass}\">\n";
foreach($this->columns as $column)
$column->renderFilterCell();
echo "</tr>\n";
}
}
Отображает фильтр.
renderItems() метод
public void renderItems() |
public function renderItems()
{
if($this->dataProvider->getItemCount()>0 || $this->showTableOnEmpty)
{
echo "<table class=\"{$this->itemsCssClass}\">\n";
$this->renderTableHeader();
ob_start();
$this->renderTableBody();
$body=ob_get_clean();
$this->renderTableFooter();
echo $body; // TFOOT must appear before TBODY according to the standard.
echo "</table>";
}
else
$this->renderEmptyText();
}
Отображает элементы данных для грида.
renderTableBody() метод
public void renderTableBody() |
public function renderTableBody()
{
$data=$this->dataProvider->getData();
$n=count($data);
echo "<tbody>\n";
if($n>0)
{
for($row=0;$row<$n;++$row)
$this->renderTableRow($row);
}
else
{
echo '<tr><td colspan="'.count($this->columns).'" class="empty">';
$this->renderEmptyText();
echo "</td></tr>\n";
}
echo "</tbody>\n";
}
Отображает тело таблицы.
renderTableFooter() метод
public void renderTableFooter() |
public function renderTableFooter()
{
$hasFilter=$this->filter!==null && $this->filterPosition===self::FILTER_POS_FOOTER;
$hasFooter=$this->getHasFooter();
if($hasFilter || $hasFooter)
{
echo "<tfoot>\n";
if($hasFooter)
{
echo "<tr>\n";
foreach($this->columns as $column)
$column->renderFooterCell();
echo "</tr>\n";
}
if($hasFilter)
$this->renderFilter();
echo "</tfoot>\n";
}
}
Отображает подвал таблицы.
renderTableHeader() метод
public void renderTableHeader() |
public function renderTableHeader()
{
if(!$this->hideHeader)
{
echo "<thead>\n";
if($this->filterPosition===self::FILTER_POS_HEADER)
$this->renderFilter();
echo "<tr>\n";
foreach($this->columns as $column)
$column->renderHeaderCell();
echo "</tr>\n";
if($this->filterPosition===self::FILTER_POS_BODY)
$this->renderFilter();
echo "</thead>\n";
}
elseif($this->filter!==null && ($this->filterPosition===self::FILTER_POS_HEADER || $this->filterPosition===self::FILTER_POS_BODY))
{
echo "<thead>\n";
$this->renderFilter();
echo "</thead>\n";
}
}
Отображает заголовок таблицы.
renderTableRow() метод
public void renderTableRow(integer $row) | ||
| $row | целое число | номер строки (нумерация с нуля). |
public function renderTableRow($row)
{
$htmlOptions=array();
if($this->rowHtmlOptionsExpression!==null)
{
$data=$this->dataProvider->data[$row];
$options=$this->evaluateExpression($this->rowHtmlOptionsExpression,array('row'=>$row,'data'=>$data));
if(is_array($options))
$htmlOptions = $options;
}
if($this->rowCssClassExpression!==null)
{
$data=$this->dataProvider->data[$row];
$class=$this->evaluateExpression($this->rowCssClassExpression,array('row'=>$row,'data'=>$data));
}
elseif(is_array($this->rowCssClass) && ($n=count($this->rowCssClass))>0)
$class=$this->rowCssClass[$row%$n];
if(!empty($class))
{
if(isset($htmlOptions['class']))
$htmlOptions['class'].=' '.$class;
else
$htmlOptions['class']=$class;
}
echo CHtml::openTag('tr', $htmlOptions)."\n";
foreach($this->columns as $column)
$this->renderDataCell($column, $row);
echo "</tr>\n";
}
Отображает строку тела таблицы.
setFormatter() метод
public void setFormatter(CFormatter $value) | ||
| $value | CFormatter | экземпляр форматировщика |
public function setFormatter($value)
{
$this->_formatter=$value;
}
© 2008–2017 by Yii Software LLC
Licensed under the three clause BSD license.
http://www.yiiframework.com/doc/api/1.1/CGridView