Кастомные кнопки в CGridView. Часть 1. Базовая кастомизация

Как мы знаем, в гриде для вывода колонки кнопок существует специальный класс CButtonColumn. С его помощью мы получаем дополнительную функциональность. Но что, если предусмотренных по дефолту кнопок не хватает или мы хотим изменить их вид или функциональность? Для этого заглянем в документацию.

Итак, по умолчанию выводятся три кнопки - просмотра, редактирования и удаления записи.

Для вывода колонки кнопок необходимо добавить следующий код в массив columns:
    array(
       'class'=>'CButtonColumn'
    ),
   
Порядок вывода кнопок задается шаблоном, а именно параметром template, который по умолчанию содержит значение "{view} {update} {delete}".
    array(
       'class'=>'CButtonColumn'
       'template'=>'{view} {update} {delete}'
    ),
 // или
    array(
       'class'=>'CButtonColumn'
       'template'=>'{update} {view}'
    ),
 // или
    array(
       'class'=>'CButtonColumn'
       'template'=>'{update}'
    ),
   
Кроме того, для каждой кнопки также есть ряд параметров, например, updateButtonUrl, viewButtonLabel и т.д., которые определяют основные настройки.
Обратите внимание, что для каждой кнопки в параметре [button]ButtonUrl доступны переменные:
  • $row - номер строки (начиная с нуля),
  • $data - модель данных для строки,
  • $this - объект столбца

Кнопка view - Просмотр


viewButtonLabel
@var string надпись для кнопки просмотра. По умолчанию - "View".
ВАЖНО! Значение не проходит HTML-кодирование при генерации
viewButtonImageUrl
@var string URL-адрес изображения для кнопки просмотра. Если не установлено, используется встроенная кнопка.
Можно установить данное свойство в значение false для генерации текстовой ссылки вместо ссылки-пиктограммы
viewButtonUrl='Yii::app()->controller->createUrl("view",array("id"=>$data->primaryKey))'
@var string PHP-выражение, выполняющееся для каждой кнопки просмотра и результат которого используется в качестве URL-адреса кнопки. В данном выражении доступны переменные:
  • $row - номер строки (начиная с нуля),
  • $data - модель данных для строки,
  • $this - объект столбца
viewButtonOptions=array('class'=>'view')
@var array HTML-опции для тега кнопки просмотра

Кнопка update - Редактирование


updateButtonLabel
@var string надпись кнопки обновления. По умолчанию - "Update".
ВАЖНО! Значение не проходит HTML-кодирование при генерации
updateButtonImageUrl
@var string URL-адрес изображения для кнопки обновления. Если не установлено, используется встроенная кнопка.
Можно установить данное свойство в значение false для генерации текстовой ссылки вместо ссылки-пиктограммы
updateButtonUrl='Yii::app()->controller->createUrl("update",array("id"=>$data->primaryKey))'
@var string PHP-выражение, выполняющееся для каждой кнопки обновления и результат которого используется в качестве URL-адреса кнопки. В данном выражении доступны переменные:
  • $row - номер строки (начиная с нуля),
  • $data - модель данных для строки,
  • $this - объект столбца
updateButtonOptions=array('class'=>'update')
@var array HTML-опции для тега кнопки обновления

Кнопка delete - Удаление


deleteButtonLabel
@var string надпись кнопки удаления. По умолчанию - "Delete".
ВАЖНО! Значение не проходит HTML-кодирование при генерации
deleteButtonImageUrl
@var string URL-адрес изображения для кнопки удаления. Если не установлено, используется встроенная кнопка.
Можно установить данное свойство в значение false для генерации текстовой ссылки вместо ссылки-пиктограммы
deleteButtonUrl='Yii::app()->controller->createUrl("delete",array("id"=>$data->primaryKey))'
@var string PHP-выражение, выполняющееся для каждой кнопки удаления и результат которого используется в качестве URL-адреса кнопки. В данном выражении доступны переменные:
  • $row - номер строки (начиная с нуля),
  • $data - модель данных для строки,
  • $this - объект столбца
deleteButtonOptions=array('class'=>'delete')
@var array HTML-опции для тега кнопки удаления
deleteConfirmation
@var string сообщение подтверждения, отображаемое при щелчке на кнопке удаления. Установка данного свойства в значение false позволяет не отображать сообщение подтверждения. Свойство используется только если $this->buttons['delete']['click'] не установлено
afterDelete
@var string javascript-функция, выполняемая после ajax-вызова удаления. Свойство используется только если $this->buttons['delete']['click'] не установлено. Функция имеет вид function(link, success, data), где
  • link - ссылка для удаления;
  • success - статус ajax-вызова: true - если ajax-вызов прошел успешно, false - неуспешно;
  • data - возвращаемые сервером данные в случае успешного выполнения запроса или объект XHR в случае ошибки.
Примечание: если флаг успешности имеет значение true, это не значит, что само удаление прошло успешно, это все лишь значит, что ajax-запрос выполнен успешно. Пример:
    array(
       'class'=>'CButtonColumn',
       'afterDelete'=>'function(link,success,data){ if(success) alert("Удаление успешно проведено"); }',
    ),
   

Читать продолжение. Часть 2. Тонкая настройка

Полезные ссылки:

Класс CButtonColumn 

Комментарии

  1. В статье наверно есть опечатка. Написано, что для вывода кнопок используется параметр template, но в примере все так же задается параметр class 2 раза.
    array(
    'class'=>'CButtonColumn'
    'class'=>'{view} {update} {delete}' //так должно быть или все таки здесь template?
    )

    ОтветитьУдалить

Отправить комментарий

Популярные сообщения