Yii: Используем CButtonColumn для настройки кнопок управления в виджете CGridView
CGreedView это один из наиболее гибко настраиваемых виджетов в Yii и примером его гибкости является CButtonColumn - используемый для настройки кнопок управления данными из модели каждой строки. В этой статье будет показано, как настроить CButtonColumn как нам нужно.
Основная настройка
По умолчанию CButtonColumn настроен на отображения трёх кнопок: {view}, {update} и {delete}. Их значения - просмотр, редактирование и удаление записи.
Наиболее простой путь для настройки отображения и поведения CButtonColumn - использовать свойства, например:
- updateButtonImageUrl - путь до изображения для кнопки Обновить,
- updateButtonLabel - текст для метки кнопки Обновить,
- updateButtonOptions - HTML опции для кнопки, используется как прочие свойства htmlOptions в других виджетах
- updateButtonUrl - выражение на PHP для кнопки, URL.
Сответственные свойства можно использовать для других кнопок по умолчанию.
Замечание:
- Только у кнопки удалить существует свойство - deleteConfirmation, принимающее в качестве аргумента строковое выражение, для подтверждения удаления строки.
- В PHP выражении, используемом для свойств xxxButtonUrl можно использовать переменные: $row, для указания номера строки(начиная с нуля); $data - для модели данных строки и $this - для объекта столбца.
- Если оставить пустым или задать значение false для свойства xxxButtonImageUrl будет использована текстовая ссылка.
Более гибкая настройка
Если использовать вышеупомянутые свойства для настройки кнопок, в коде это будет выглядеть немного беспорядочно. Или же в случае необходимости комплексной настройки и добавления новых кнопок лучшим способом будет – использование шаблонов кнопок.
Вы можете использовать шаблоны свойств кнопок для редактирования или же удаления, к пример:
<?php $this->widget('ext.bootstrap.widgets.BootGridView',array( 'id'=>'people-grid', 'dataProvider'=>$model->search(), 'filter'=>$model, 'columns'=>array( 'id', 'name', 'country', array( 'class'=>'CButtonColumn', 'template'=>'{delete}{update}', ), ), )); ?>
Пример настройки кнопок, показанный выше, определяет отображение кнопок Удалить и Обновить (кнопка View отсутствует).
Кроме этого в CButtonColumn можно определять и свои кнопки
array ( 'class'=>'CButtonColumn', 'template'=>'{up}{down}{delete}', )
Для этих новых кнопок необходимо указать вид и поведение. Это можно сделать при помощи массива конфигурации для каждой кнопки, к примеру:
'up' => array ( 'label'=>'...', //Text label of the button. 'url'=>'...', //A PHP expression for generating the URL of the button. 'imageUrl'=>'...', //Image URL of the button. 'options'=>array(), //HTML options for the button tag. 'click'=>'...', //A JS function to be invoked when the button is clicked. 'visible'=>'...', //A PHP expression for determining whether the button is visible. )
Текст в параметре Label будет виден только в случае текстовой ссылки, а в случае же изображения как аргумент тега img alt. Если же нужно изменить текст подсказки, который появляется при наведении на изображение, надо определить свойство title параметра options:
'up' => array ( 'label'=>'Text shown as alt text to image or as label to text link...', 'options'=>array('title'=>'Text shown as tooltip when user hovers image...'), )
Замечания:
- <>В PHP-выражениях, используемых для определения свойств urlи visible, можно использовать переменную $row – для номера строки (начиная с нуля) и $data – для данных строки взятых из модели;
- Если не задавать свойство imageUrlили задать его в false, будет использована текстовая ссылка.
Пример подключения новых кнопок с использованием CButtonColumn
array ( 'class'=>'CButtonColumn', 'template'=>'{email}{down}{delete}', 'buttons'=>array ( 'email' => array ( 'label'=>'Send an e-mail to this user', 'imageUrl'=>Yii::app()->request->baseUrl.'/images/email.png', 'url'=>'Yii::app()->createUrl("users/email", array("id"=>$data->id))', ), 'down' => array ( 'label'=>'[-]', 'url'=>'"#"', 'visible'=>'$data->score > 0', 'click'=>'function(){alert("Going down!");}', ), ), ),
Замечание: в параметре click, кнопки downиспользуется jQuery. Таким образом, любое событие возникающее при нажатии на кнопку должно быть описано в синтаксисе jQuery.
Подтверждение удаления
При удалении записи в таблице CGridView, сгенерированной для CRUDпри помощи Gii, появляется окно подтверждения удаления. Текст в этом всплывающем окне можно изменить под конкретные удаляемые элементы.
array ( 'class'=>'CButtonColumn', 'deleteConfirmation'=>"js:'Record with ID '+$(this).parent().parent().children(':first-child').text()+' will be deleted! Continue?'", ),
Или для получения содердимого других столбцов:
array ( 'class'=>'CButtonColumn', 'deleteConfirmation'=>"js:'Do you really want to delete record with ID '+$(this).parent().parent().children(':nth-child(2)').text()+'?'", ),
almix
Разработчик Loco, автор статей по веб-разработке на Yii, CodeIgniter, MODx и прочих инструментах. Создатель Team Sense.
Вы можете почитать все статьи от almix'а.
- 14 Разработка приложения на Yii. Урок 14: Выводим список категорий как новый виджет на сайте (29.04.2015)
- 13 Разработка приложения на Yii. Урок 13: Внедряем категории для статей. (29.04.2015)
- 12 Разработка приложения на Yii. Урок 12: Профилирование приложения, включаем кеширование. (20.01.2015)
- 11 Yiico. Видеокурс по разработке сайта на Yii. Урок 11: Отладка приложения, включаем журналирование. (20.01.2015)
- 10 Yiico. Видеокурс по разработке сайта на Yii. Урок 10: Если ваше приложение находится не в корневой папке, а во вложенной. (19.10.2014)
- 9 Разработка сайта на Yii с нуля. Урок 9. Выборка статей определённого автора. (13.08.2014)
- 8 Разработка сайта на Yii с нуля. Урок 8. Вызов в моделях функции, общей для них. Как избегать дублирования кода? (25.07.2014)
- 7 Разработка сайта на Yii с нуля. Урок 7. Изменение количества выводимых записей на странице в CGridView. Включаем сессии Yii. (04.09.2013)
- 6 Разработка сайта на Yii с нуля. Урок 6. Автоматич. отправка оповещений об одобренных комментариях на email автора комментария (11.08.2013)
- 5 Разработка сайта на Yii с нуля. Урок 5. Переименовываем blog в yiico. Изменяем "Home" в breadcrumbs. Включаем Gzip-сжатие. (09.08.2013)
- 4 Курс по Yii с нуля. Урок 4. Дорабатываем простую работу с пользователями: хранение пароля при редактировании пользователя. (13.04.2013)
- 3 Курс по Yii с нуля. Урок 3. Создаём новых пользователей. Организуем простую систему авторизации. Аутентификация, пароли, соли. (20.07.2014)
- 2 Yii + Git (github) на Mac. (24.03.2013)
- 2 Курс по Yii с нуля. Урок 2. Переносим и настраиваем Yii и проект нашего сайта на рабочем сервере. Избавляемся от index.php в url (09.07.2014)
- 1 Курс по Yii с нуля. Урок 1. Устанавливаем Yii на локальном компьютере. Заводим проект будущего сайта. (10.03.2013)
- 0 Composer – пакетный менеджер PHP. Что и как? (22.07.2014)
- 0 MySQL: проверить содержится ли значение в поле столбца (в столбце хранится строка значений через запятую) (22.05.2014)
- 0 Yii: Статичные страницы (создание, редактирование, удаление) (28.04.2014)
- 0 Yii: Расширение ECKEditor = Связка ckeditor + kcfinder (визуальный редактор с бесплатным файловым менеджером) (28.04.2014)
- 0 Yii: Bootstrap tabs, делаем активной вкладку на которую выполняется переход по ссылке (20.03.2014)
- 0 Yii: Доступ к атрибуту модели из файла шаблона (Вызов в шаблоне какого-либо атрибута модели). (17.02.2014)
- 0 Yii: Множественный автокомплит с помощью CJuiAutoComplete (автокомплит нескольких значений в одно поле) (07.02.2014)
- 0 Yii: Фотогалерея через поведение (доработка расширения imagesgallerymanager) (08.03.2016)
- 0 Yii: Установка и настройка Yii-app заготовки приложения от Crisu83 (09.03.2014)
- 0 Twitter Bootstrap Carousel Crossfade (09.09.2013)