Кастомные кнопки в CGridView. Часть 2. Тонкая настройка

В первой части статьи я привела основные параметры настройки кнопок, в этой части покажу, как добавить свои кнопки. Многамногакнопок! )))

Мы уже знаем, что в параметре template задается, какие кнопки и в каком порядке будут выведены.
Кроме стандартных update, view, delete у нас есть возможность добавлять любую кнопку в виде {buttonID} в шаблон, но каждую добавленную кнопку необходимо описать в массиве buttons. Например:
    array(
        'class' => 'CButtonColumn',
        'template' => '{add}{preview}', // в шаблоне определяем новые две кнопки add и preview
        'buttons' => array(
            'add' => array( ... ), // определение кнопки add
            'preview' => array( ... ), // определение кнопки preview
        )
    )
Каждый элемент массива buttons определяет отдельную кнопку в следующем формате:
    'buttonID' => array(
        'label'=>'...',     // текстовая надпись кнопки
        'url'=>'...',       // PHP-выражение для генерации URL-адреса кнопки
        'imageUrl'=>'...',  // URL-адрес изображения кнопки. Если не установлено или установлено в значение false, используется текстовая ссылка
        'options'=>array(...), // HTML-опции для тега кнопки
        'click'=>'...',     // JS-функция, вызываемая по клику на кнопку
        'visible'=>'...',   // PHP-выражение для определения видимости кнопки
    )
В PHP-выражении для опций url и/или visible доступны переменные:
  • $row - текущий номер строки (начиная с нуля);
  • $data - модель данных для строки.

Примеры

    // Установка видимости кнопки в зависимости от прав доступа и доп. условий
    'update' => array(
        'url'=>'Yii::app()->urlManager->createUrl("/list/update", array("id" => $data->id))',
        'visible'=>'(!$data->archive AND Yii::app()->user->checkAccess("update"))',
    ),
    
    // При клике отрабатывает функция dataLoad, в которой происходит ajax-запрос по указанному URL и открывается попап с полученными данными
    'view' => array(
        'url'=>'Yii::app()->urlManager->createUrl("/list/view", array("id" => $data->id))',
        'options'=>array(
            'onclick'=>"dataLoad($(this).attr('href')); return false;"
        ),
    ),

    // Установка иконки и видимости кнопки
    'statistic' => array(
        'url'=>'Yii::app()->urlManager->createUrl("/list/statistic", array("id" => $data->id))',
        'imageUrl'=>'/images/chart.gif',
        'options'=>array('title'=>'Statistics'),
        'visible'=>'($data->date_start<=date("Y-m-d",time()))',
    ),
Часть 1. Базовая настройка

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


Комментарии

  1. Ответы
    1. Нет, последние пару лет в основном работаю с Битриксом. А Yii посматриваю для себя. Был бы интересный проект - заюзала бы и Yii2 :)

      Удалить
  2. Отличная статья, А когда планируется переход на Yii2

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

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

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