Yii: Групповые операции в CGridView
Создадим свой класс GridView, который унаследуем от CGridView. Создаю его в application/components/widgets/GridView.php
Добавим в первый столбец колонку с чекбоксами. А внизу под таблицу выведем поле с выпадающим списком, в который будем передавать список групповых операций.
<?php //Yii::import('zii.widgets.grid.CGridView'); Yii::import('application.extensions.alphapager.ApGridView'); // так как я использую ещё фильтрацию по первой букве имени, то расширять буду не CGridView, а ApGridView (стороннее расширение alphapager) class GridView extends ApGridView { public $groupActions = array(); public function init() { array_unshift($this->columns, array( 'id'=>'autoId', 'class'=>'CCheckBoxColumn', 'selectableRows'=>2, 'checkBoxHtmlOptions'=>array( 'name'=>'autoId[]', ), 'htmlOptions'=>array( 'class'=>'group-checkbox-column', ), )); return parent::init(); } public function renderPager() { echo "<div class='pre-header' style='float:left'>"; if(count($this->groupActions)) { echo CHtml::dropDownList('group-actions', null, array(null=>'Выберите действие:')+$this->groupActions, array()); } echo CHtml::button('submit', array( 'id'=>'group-operation-submit', 'onclick'=>'groupOperation()', )); echo "</div>"; $actionLinks = array(); foreach($this->groupActions as $k=>$v) { $actionLinks[$k] = Yii::app()->controller->createUrl($k); } $actionLinks = json_encode($actionLinks); Yii::app()->clientScript->registerScript('go', " var actionLinks = $actionLinks; function groupOperation(){ var select = $('#group-actions'); var action = select.val(); var submit = $('#group-operation-submit'); submit.attr('disabled', 'disabled'); $.ajax({ url: actionLinks[action], type: 'POST', data: $('.group-checkbox-column input').serializeArray(), complete: function(){ submit.removeAttr('disabled'); }, success: function(){ jQuery('#{$this->id}').yiiGridView('update'); } }); } ", CClientScript::POS_HEAD); parent::renderPager(); } }
Далее, как видно, добавлен в вывод ява-скрипт-обработчик и пару элементов управления.
Все, теперь можем использовать:
<?php $this->widget('application.components.widgets.GridView', array( 'template'=>"{alphapager}\n{summary}\n{items}\n{pager}", 'alphaPager'=>array( 'showNumPage'=>'true', 'header'=>'Имена на букву: ' // <=====Setting different header text ), 'id'=>'mailerbase-grid', 'dataProvider'=>$model->search(), 'filter'=>$model, 'groupActions'=>array( 'restore'=>'Сформировать заявки', 'blacklist'=>'Отправить в чёрный список', ), 'columns'=>array( 'id', array( 'name'=>'category_id', 'value'=>'($data->category->parent_id ? $data->getCategoryList($data->category->parent_id) . " / " : "") . $data->category->name', 'headerHtmlOptions'=>array('width'=>'0px'), 'filter'=>MailerBaseCategories::getCategoriesList(), ), array( 'name'=>'email', 'value'=>'$data->email . ($data->blacklist ? "<img title=\"" . $data->blacklist->name . "\" src=\"/themes/default/images/blacklist.png\">" : "")', 'type'=>'raw', ), 'surname', 'name', 'middle_name', 'company', ... array( 'class'=>'CButtonColumn', 'template'=>'{view}{update}{blacklist}{delete}', 'headerHtmlOptions'=>array('width'=>'80px'), 'buttons'=>array ( ... ), ), ), )); ?>
При нажатии на кнопку submit данные (id выбранных элементов) отправятся на соовтествующий, указанный в конфиге компонента экшен текущего компонента, тут - actionRestore или actionBlacklist (можете так же указывать и имя нужного контролера через слеш)
То есть, при выборе действия "Сформировать заявки" данные будут отправлены в текущий контроллер на действие actionRestore.
public function actionRestore() { $autoIdAll = $_POST['autoId']; if(count($autoIdAll)>0) { foreach($autoIdAll as $autoId) { ...// здесь действие с каждой из выбранных записей } } $this->redirect(array('admin')); }
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)