GroupActionColumn.php 2.6 KB
<?php
    
    namespace artbox\catalog\widgets;
    
    use yii\grid\ActionColumn;
    use Yii;
    use yii\helpers\Html;

    /**
     * Class GroupActionColumn
     *
     * @package artbox\catalog\widgets
     */
    class GroupActionColumn extends ActionColumn
    {
        public $template = '{options} {seo} {view} {update} {delete}';
    
        /**
         * Initializes parent method and adds two artbox option group specific buttons
         */
        protected function initDefaultButtons()
        {
            parent::initDefaultButtons();
            $this->initArtboxButton('options', 'align-justify');
            $this->initArtboxButton('seo', 'leaf');
        }
    
        /**
         * Generate buttons for option list of current group
         * and link to alias update
         *
         * @param       $name
         * @param       $iconName
         * @param array $additionalOptions
         */
        protected function initArtboxButton($name, $iconName, $additionalOptions = [])
        {
            if (!isset($this->buttons[$name]) && strpos($this->template, '{' . $name . '}') !== false) {
                $this->buttons[$name] = function ($url, $model, $key) use ($name, $iconName, $additionalOptions) {
                    switch ($name) {
                        case 'options':
                            $title = Yii::t('yii', 'Options');
                            $link = str_replace('option-group', 'option', $url);
                            $link = str_replace('options', 'index', $link);
                            $link = str_replace('?id', '?group_id', $link);
                            break;
                        case 'seo':
                            $title = Yii::t('yii', 'Seo');
                            $link = [
                                'alias/view',
                                'id' => $model->lang->alias_id,
                            ];
                            break;
                        default:
                            $title = ucfirst($name);
                            $link = $url;
                    }
                    $options = array_merge([
                                               'title' => $title,
                                               'aria-label' => $title,
                                               'data-pjax' => '0',
                                           ], $additionalOptions, $this->buttonOptions);
                    $icon = Html::tag('span', '', ['class' => "glyphicon glyphicon-$iconName"]);
                    return Html::a($icon, $link, $options);
                };
            }
        }
    }