index.php 6.11 KB
<?php

use yii\helpers\Html;
use yii\grid\GridView;
use kartik\select2\Select2;
use yii\helpers\ArrayHelper;
use common\modules\product\helpers\ProductHelper;
use common\components\artboxtree\ArtboxTreeHelper;

/* @var $this yii\web\View */
/* @var $searchModel common\modules\product\models\ProductSearch */
/* @var $dataProvider yii\data\ActiveDataProvider */

$this->title = Yii::t('product', 'Products');
$this->params['breadcrumbs'][] = $this->title;
?>
<div class="product-index">

    <h1><?= Html::encode($this->title) ?></h1>
    <?php // echo $this->render('_search', ['model' => $searchModel]); ?>

    <p>
        <?= Html::a(Yii::t('product', 'Create Product'), ['create'], ['class' => 'btn btn-success']) ?>
    </p>
    <?= GridView::widget([
        'dataProvider' => $dataProvider,
        'filterModel' => $searchModel,
        'columns' => [
            ['class' => 'yii\grid\SerialColumn'],
            'name',
            [
                'label' => Yii::t('product', 'Brand'),
                'attribute' => 'brand_name',
                'value' => 'brand.name',
                'format' => 'raw',
                'filter' => Select2::widget([
                    'model' => $searchModel,
                    'attribute' => 'brand_id',
                    'data' => ArrayHelper::map(ProductHelper::getBrands()->all(), 'brand_id', 'name'),
                    'language' => 'ru',
                    'options' => [
                        'placeholder' => Yii::t('product', 'Select brand'),
                        'multiple' => false,
                    ],
                    'pluginOptions' => [
                        'allowClear' => true
                    ],
                ])
            ],
            [
                'label' => Yii::t('product', 'Category'),
                'attribute' => 'category_name',
                'value' => function($model) {
                    $categories = [];
                    foreach ($model->categories as $category) {
                        $categories[] = $category->name;
                    }
                    return implode(", ", $categories);
                },
                'format' => 'raw',
                'filter' => Select2::widget([
                    'model' => $searchModel,
                    'attribute' => 'category_id',
                    'data' => ArtboxTreeHelper::treeMap(ProductHelper::getCategories(), 'category_id', 'name'),
                    'language' => 'ru',
                    'options' => [
                        'placeholder' => Yii::t('product', 'Select category'),
                        'multiple' => false,
                    ],
                    'pluginOptions' => [
                        'allowClear' => true
                    ],
                ])
            ],
            [
                'label' => Yii::t('product', 'SKU'),
                'attribute' => 'variant_sku',
                'value' => 'variant.sku',
            ],
            'variant.price',
            'variant.price_old',
            [
                'label' => Yii::t('product', 'Stock'),
                'attribute' => 'variant_stock',
                'value' => 'variant.stock_caption',
            ],
            [
                'class' => 'yii\grid\ActionColumn',
                'template' => '{items} {view} |{is_top} {is_new} {akciya}  | {update} {delete}',
                'buttons' => [
                    'is_top' => function ($url, $model) {
                        return Html::a('<span class="glyphicon glyphicon-star' . ($model->is_top ? '' : '-empty') . '"></span>', $url, [
                            'title' => Yii::t('product', ($model->is_top ? 'Set not is top' : 'Set is top')),
                        ]);
                    },
                    'is_new' => function ($url, $model) {
                        return Html::a('<span class="glyphicon glyphicon-heart' . ($model->is_new ? '' : '-empty') . '"></span>', $url, [
                            'title' => Yii::t('product', ($model->is_new ? 'Set not is new' : 'Set is new')),
                        ]);
                    },
                    'akciya' => function ($url, $model) {
                        return Html::a('<span class="glyphicon glyphicon-tag' . ($model->akciya ? 's' : '') . '"></span>', $url, [
                            'title' => Yii::t('product', ($model->akciya ? 'Set not is promotion' : 'Set is promotion')),
                        ]);
                    },
                    'items' => function ($url, $model) {
                        return Html::a('<span class="glyphicon glyphicon-th-list"></span>', $url, [
                            'title' => Yii::t('product', 'Variants'),
                        ]);
                    },

                ],
                'urlCreator' => function ($action, $model, $key, $index) {
                    switch ($action) {
                        case 'items':
                            return \yii\helpers\Url::to(['/product/variant', 'product_id' => $model->product_id]);
                            break;
                        case 'is_top':
                            return \yii\helpers\Url::to(['manage/is_top', 'id' => $model->product_id]);
                            break;
                        case 'is_new':
                            return \yii\helpers\Url::to(['manage/is_new', 'id' => $model->product_id]);
                            break;
                        case 'akciya':
                            return \yii\helpers\Url::to(['manage/akciya', 'id' => $model->product_id]);
                            break;
                        case 'view':
                            return \yii\helpers\Url::to(['/catalog/product', 'id' => $model->product_id, ['target' => '_blank']]);
                            break;
                        case 'update':
                            return \yii\helpers\Url::to(['manage/update', 'id' => $model->product_id]);
                            break;
                        case 'delete':
                            return \yii\helpers\Url::to(['manage/delete', 'id' => $model->product_id]);
                            break;
                    }
                }
            ],
        ],
    ]); ?>
</div>