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

18.08.2011

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

оригинал статьи - http://www.yiiframework.com/wiki/106/using-cbuttoncolumn-to-customize-buttons-in-cgridview/

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

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

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

Замечание:

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

Более гибкая настройка

Если использовать вышеупомянутые свойства для настройки кнопок, в коде это будет выглядеть немного беспорядочно. Или же в случае необходимости комплексной настройки и добавления новых кнопок лучшим способом будет – использование шаблонов кнопок.

Вы можете использовать шаблоны свойств кнопок для редактирования или же удаления, к примеру:

array
(
    'class'=>'CButtonColumn',
    'template'=>'{delete}{update}',
)

Пример настройки кнопок, показанный выше, определяет отображение кнопок Удалить и Обновить (кнопка Viewотсутствует).

Кроме этого можно определять и другие кнопки

array
(
    'class'=>'CButtonColumn',
    'template'=>'{up}{down}{delete}',
)

Для этих новых кнопок необходимо указать вид и поведение. Это можно сделать при помощи массива конфигурации для каждой кнопки, к примеру:

'buttonID' => 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.
)

ButtonID – в нашем случае может быть up, down, delete.

Текст в параметре Labelбудет виден только в случае текстовой ссылки, а в случае же изображения как аргумент тега imgalt. Если же нужно изменить текст подсказки, который появляется при наведении на изображение, надо определить свойство title параметра options:

'buttonID' => 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...'),
)

Замечания:

  1. В PHP-выражениях, используемых для определения свойств urlи visible, можно использовать переменную $row – для номера строки (начиная с нуля) и $data – для данных строки взятых из модели;
  2. Если не задавать свойство 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()+'?'",
),
blog comments powered by Disqus
Наверх