Yii: Используем CButtonColumn для настройки кнопок управления в виджете CGridView

Yii: Используем CButtonColumn для настройки кнопок управления в виджете CGridView В виджете CButtonColumn по умолчанию присутствуют кнопки просмотра, редактирования и удаления записи. С помошью класса CButtonColumn настраиваем кнопки управления. Добавляем свои кнопки и скрываем те, которые не нужны. 

CGreedView это один из наиболее гибко настраиваемых виджетов в Yii и примером его гибкости является CButtonColumn - используемый для настройки кнопок управления данными из модели каждой строки. В этой статье будет показано, как настроить CButtonColumn как нам нужно.

Основная настройка

По умолчанию CButtonColumn настроен на отображения трёх кнопок: {view}, {update} и {delete}. Их значения - просмотр, редактирование и удаление записи.

Наиболее простой путь для настройки отображения и поведения CButtonColumn - использовать свойства, например: 

  • updateButtonImageUrl - путь до изображения для кнопки Обновить,
  • updateButtonLabel - текст для метки кнопки Обновить,
  • updateButtonOptions - HTML опции для кнопки, используется как прочие свойства htmlOptions в других виджетах
  • updateButtonUrl - выражение на PHP для кнопки, URL.

Сответственные свойства можно использовать для других кнопок по умолчанию.

Замечание:

  1. Только у кнопки удалить существует свойство - deleteConfirmation, принимающее в качестве аргумента строковое выражение, для подтверждения удаления строки.
  2. В PHP выражении, используемом для свойств xxxButtonUrl можно использовать переменные: $row, для указания номера строки(начиная с нуля); $data - для модели данных строки и $this - для объекта столбца.
  3. Если оставить пустым или задать значение 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 – для данных строки взятых из модели;
  1. Если не задавать свойство 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'а.



Другие статьи по этой теме:

Комментарии (0)     Подпишитесь на RSS комментариев к этой статье.