Commit 2b3158498c4a5e029650159473412701eb9eaa15
1 parent
f540c70b
-Product card (without video)
Showing
19 changed files
with
271 additions
and
36 deletions
Show diff stats
controllers/ManageController.php
| @@ -2,6 +2,7 @@ | @@ -2,6 +2,7 @@ | ||
| 2 | 2 | ||
| 3 | namespace artweb\artbox\ecommerce\controllers; | 3 | namespace artweb\artbox\ecommerce\controllers; |
| 4 | 4 | ||
| 5 | + use artweb\artbox\ecommerce\models\ProductVideo; | ||
| 5 | use artweb\artbox\language\models\Language; | 6 | use artweb\artbox\language\models\Language; |
| 6 | use artweb\artbox\ecommerce\models\Export; | 7 | use artweb\artbox\ecommerce\models\Export; |
| 7 | use artweb\artbox\ecommerce\models\Import; | 8 | use artweb\artbox\ecommerce\models\Import; |
| @@ -147,6 +148,7 @@ | @@ -147,6 +148,7 @@ | ||
| 147 | 'model' => $model, | 148 | 'model' => $model, |
| 148 | 'modelLangs' => $model->modelLangs, | 149 | 'modelLangs' => $model->modelLangs, |
| 149 | 'groups' => $groups, | 150 | 'groups' => $groups, |
| 151 | + 'videos' => !empty( $model->videos ) ? $model->videos : [ new ProductVideo() ], | ||
| 150 | ] | 152 | ] |
| 151 | ); | 153 | ); |
| 152 | } | 154 | } |
| @@ -354,7 +356,7 @@ | @@ -354,7 +356,7 @@ | ||
| 354 | throw new \HttpRequestException('Must be AJAX'); | 356 | throw new \HttpRequestException('Must be AJAX'); |
| 355 | } | 357 | } |
| 356 | } | 358 | } |
| 357 | - | 359 | + |
| 358 | /** | 360 | /** |
| 359 | * Perform export | 361 | * Perform export |
| 360 | * | 362 | * |
| @@ -397,7 +399,7 @@ | @@ -397,7 +399,7 @@ | ||
| 397 | if (( $model = Product::find() | 399 | if (( $model = Product::find() |
| 398 | ->where([ 'id' => $id ]) | 400 | ->where([ 'id' => $id ]) |
| 399 | ->with('lang') | 401 | ->with('lang') |
| 400 | - ->one() ) !== null | 402 | + ->one() ) !== NULL |
| 401 | ) { | 403 | ) { |
| 402 | return $model; | 404 | return $model; |
| 403 | } else { | 405 | } else { |
models/Product.php
| @@ -21,6 +21,7 @@ | @@ -21,6 +21,7 @@ | ||
| 21 | * | 21 | * |
| 22 | * @property integer $brand_id | 22 | * @property integer $brand_id |
| 23 | * @property integer $id | 23 | * @property integer $id |
| 24 | + * @property ProductVideo[] $videos | ||
| 24 | * @property Category $category | 25 | * @property Category $category |
| 25 | * @property Category[] $categories | 26 | * @property Category[] $categories |
| 26 | * @property ProductVariant $variant | 27 | * @property ProductVariant $variant |
| @@ -340,8 +341,12 @@ | @@ -340,8 +341,12 @@ | ||
| 340 | public function getFullName():string | 341 | public function getFullName():string |
| 341 | { | 342 | { |
| 342 | $name = ''; | 343 | $name = ''; |
| 343 | - if (!empty($this->category->lang->category_synonym)) $name = $name . $this->category->lang->category_synonym . ' '; | ||
| 344 | - if (!empty($this->brand)) $name = $name . $this->brand->lang->title . ' '; | 344 | + if (!empty( $this->category->lang->category_synonym )) { |
| 345 | + $name = $name . $this->category->lang->category_synonym . ' '; | ||
| 346 | + } | ||
| 347 | + if (!empty( $this->brand )) { | ||
| 348 | + $name = $name . $this->brand->lang->title . ' '; | ||
| 349 | + } | ||
| 345 | $name .= $this->lang->title; | 350 | $name .= $this->lang->title; |
| 346 | return $name; | 351 | return $name; |
| 347 | } | 352 | } |
| @@ -455,6 +460,11 @@ | @@ -455,6 +460,11 @@ | ||
| 455 | return $groups; | 460 | return $groups; |
| 456 | } | 461 | } |
| 457 | 462 | ||
| 463 | + public function getVideos() | ||
| 464 | + { | ||
| 465 | + return $this->hasMany(ProductVideo::className(), [ 'product_id' => 'id' ]); | ||
| 466 | + } | ||
| 467 | + | ||
| 458 | /** | 468 | /** |
| 459 | * Get Stock query where current Product is in stock | 469 | * Get Stock query where current Product is in stock |
| 460 | * | 470 | * |
models/ProductVariant.php
| @@ -67,6 +67,10 @@ | @@ -67,6 +67,10 @@ | ||
| 67 | */ | 67 | */ |
| 68 | class ProductVariant extends ActiveRecord | 68 | class ProductVariant extends ActiveRecord |
| 69 | { | 69 | { |
| 70 | + | ||
| 71 | + public $customOption = []; | ||
| 72 | + | ||
| 73 | + | ||
| 70 | /** | 74 | /** |
| 71 | * @var int[] $options | 75 | * @var int[] $options |
| 72 | */ | 76 | */ |
| @@ -113,7 +117,7 @@ | @@ -113,7 +117,7 @@ | ||
| 113 | 'model' => ProductImage::className(), | 117 | 'model' => ProductImage::className(), |
| 114 | 'config' => [ | 118 | 'config' => [ |
| 115 | 'caption' => 'image', | 119 | 'caption' => 'image', |
| 116 | - 'delete_action' => '/product/variant/delete-image', | 120 | + 'delete_action' => 'variant/delete-image', |
| 117 | 'id' => 'id', | 121 | 'id' => 'id', |
| 118 | ], | 122 | ], |
| 119 | ], | 123 | ], |
| @@ -275,6 +279,28 @@ | @@ -275,6 +279,28 @@ | ||
| 275 | return $this->hasMany(TaxOption::className(), [ 'id' => 'option_id' ]) | 279 | return $this->hasMany(TaxOption::className(), [ 'id' => 'option_id' ]) |
| 276 | ->viaTable('product_variant_option', [ 'product_variant_id' => 'id' ]); | 280 | ->viaTable('product_variant_option', [ 'product_variant_id' => 'id' ]); |
| 277 | } | 281 | } |
| 282 | + | ||
| 283 | + /** | ||
| 284 | + * Get one variant's option whith needed conditions, or random if condition is empty | ||
| 285 | + * | ||
| 286 | + * @param array $conditions | ||
| 287 | + * | ||
| 288 | + * @return ActiveQuery | ||
| 289 | + */ | ||
| 290 | + public function getOption(array $conditions = []) | ||
| 291 | + { | ||
| 292 | + $query = $this->hasOne(TaxOption::className(), [ 'id' => 'option_id' ]) | ||
| 293 | + ->viaTable('product_variant_option', [ 'product_variant_id' => 'id' ]); | ||
| 294 | + foreach ($conditions as $condition) | ||
| 295 | + { | ||
| 296 | + if (!empty($condition) && is_array($condition)) | ||
| 297 | + { | ||
| 298 | + $query->andFilterWhere($condition); | ||
| 299 | + } | ||
| 300 | + } | ||
| 301 | + | ||
| 302 | + return $query; | ||
| 303 | + } | ||
| 278 | 304 | ||
| 279 | /** | 305 | /** |
| 280 | * Get TaxOptions with preloaded TaxGroups for current ProductVariant | 306 | * Get TaxOptions with preloaded TaxGroups for current ProductVariant |
| @@ -307,13 +333,15 @@ | @@ -307,13 +333,15 @@ | ||
| 307 | { | 333 | { |
| 308 | $this->options = $values; | 334 | $this->options = $values; |
| 309 | } | 335 | } |
| 310 | - | 336 | + |
| 311 | /** | 337 | /** |
| 312 | * Get all TaxGroups for current ProductVariant filled with $customOptions that satisfy current ProductVariant | 338 | * Get all TaxGroups for current ProductVariant filled with $customOptions that satisfy current ProductVariant |
| 313 | * | 339 | * |
| 314 | - * @return TaxGroup[] | 340 | + * @param array $conditions |
| 341 | + * | ||
| 342 | + * @return \artweb\artbox\ecommerce\models\TaxGroup[] | ||
| 315 | */ | 343 | */ |
| 316 | - public function getProperties() | 344 | + public function getProperties(array $conditions = []) |
| 317 | { | 345 | { |
| 318 | $groups = $options = []; | 346 | $groups = $options = []; |
| 319 | foreach ($this->getOptions() | 347 | foreach ($this->getOptions() |
| @@ -324,11 +352,18 @@ | @@ -324,11 +352,18 @@ | ||
| 324 | */ | 352 | */ |
| 325 | $options[ $option->tax_group_id ][] = $option; | 353 | $options[ $option->tax_group_id ][] = $option; |
| 326 | } | 354 | } |
| 327 | - foreach (TaxGroup::find() | 355 | + $query = TaxGroup::find() |
| 328 | ->where([ 'tax_group.id' => array_keys($options) ]) | 356 | ->where([ 'tax_group.id' => array_keys($options) ]) |
| 329 | ->orderBy([ 'sort' => SORT_ASC ]) | 357 | ->orderBy([ 'sort' => SORT_ASC ]) |
| 330 | - ->with('lang') | ||
| 331 | - ->all() as $group) { | 358 | + ->with('lang'); |
| 359 | + | ||
| 360 | + if (!empty($conditions)) { | ||
| 361 | + foreach ($conditions as $condition) { | ||
| 362 | + $query->andFilterWhere($condition); | ||
| 363 | + } | ||
| 364 | + } | ||
| 365 | + foreach ( | ||
| 366 | + $query->all() as $group) { | ||
| 332 | /** | 367 | /** |
| 333 | * @var TaxGroup $group | 368 | * @var TaxGroup $group |
| 334 | */ | 369 | */ |
| 1 | +<?php | ||
| 2 | + | ||
| 3 | + namespace artweb\artbox\ecommerce\models; | ||
| 4 | + | ||
| 5 | + use yii\db\ActiveRecord; | ||
| 6 | + | ||
| 7 | + /** | ||
| 8 | + * This is the model class for table "product_video". | ||
| 9 | + * | ||
| 10 | + * @property integer $id | ||
| 11 | + * @property integer $product_id | ||
| 12 | + * @property string $url | ||
| 13 | + * @property Product $product | ||
| 14 | + */ | ||
| 15 | + class ProductVideo extends ActiveRecord | ||
| 16 | + { | ||
| 17 | + /** | ||
| 18 | + * @inheritdoc | ||
| 19 | + */ | ||
| 20 | + public static function tableName() | ||
| 21 | + { | ||
| 22 | + return 'product_video'; | ||
| 23 | + } | ||
| 24 | + | ||
| 25 | + /** | ||
| 26 | + * @inheritdoc | ||
| 27 | + */ | ||
| 28 | + public function rules() | ||
| 29 | + { | ||
| 30 | + return [ | ||
| 31 | + [ | ||
| 32 | + [ 'product_id' ], | ||
| 33 | + 'integer', | ||
| 34 | + ], | ||
| 35 | + [ | ||
| 36 | + [ 'url' ], | ||
| 37 | + 'string', | ||
| 38 | + 'max' => 255, | ||
| 39 | + ], | ||
| 40 | + [ | ||
| 41 | + [ 'product_id' ], | ||
| 42 | + 'exist', | ||
| 43 | + 'skipOnError' => true, | ||
| 44 | + 'targetClass' => Product::className(), | ||
| 45 | + 'targetAttribute' => [ 'product_id' => 'id' ], | ||
| 46 | + ], | ||
| 47 | + ]; | ||
| 48 | + } | ||
| 49 | + | ||
| 50 | + /** | ||
| 51 | + * @inheritdoc | ||
| 52 | + */ | ||
| 53 | + public function attributeLabels() | ||
| 54 | + { | ||
| 55 | + return [ | ||
| 56 | + 'id' => \Yii::t('app', 'ID'), | ||
| 57 | + 'product_id' => \Yii::t('app', 'Product ID'), | ||
| 58 | + 'url' => \Yii::t('app', 'Url'), | ||
| 59 | + ]; | ||
| 60 | + } | ||
| 61 | + | ||
| 62 | + /** | ||
| 63 | + * @return \yii\db\ActiveQuery | ||
| 64 | + */ | ||
| 65 | + public function getProduct() | ||
| 66 | + { | ||
| 67 | + return $this->hasOne(Product::className(), [ 'id' => 'product_id' ]); | ||
| 68 | + } | ||
| 69 | + } |
models/TaxGroup.php
| @@ -24,6 +24,7 @@ | @@ -24,6 +24,7 @@ | ||
| 24 | * @property TaxOption[] $options | 24 | * @property TaxOption[] $options |
| 25 | * @property TaxOption[] $customOptions | 25 | * @property TaxOption[] $customOptions |
| 26 | * @property string $alias | 26 | * @property string $alias |
| 27 | + * @property integer $position | ||
| 27 | * * From language behavior * | 28 | * * From language behavior * |
| 28 | * @property TaxGroupLang $lang | 29 | * @property TaxGroupLang $lang |
| 29 | * @property TaxGroupLang[] $langs | 30 | * @property TaxGroupLang[] $langs |
| @@ -94,6 +95,7 @@ | @@ -94,6 +95,7 @@ | ||
| 94 | [ | 95 | [ |
| 95 | 'level', | 96 | 'level', |
| 96 | 'sort', | 97 | 'sort', |
| 98 | + 'position', | ||
| 97 | ], | 99 | ], |
| 98 | 'integer', | 100 | 'integer', |
| 99 | ], | 101 | ], |
| @@ -116,6 +118,7 @@ | @@ -116,6 +118,7 @@ | ||
| 116 | 'display' => 'Display', | 118 | 'display' => 'Display', |
| 117 | 'is_menu' => 'Отображать в меню', | 119 | 'is_menu' => 'Отображать в меню', |
| 118 | 'level' => 'уровень', | 120 | 'level' => 'уровень', |
| 121 | + 'ppsition' => 'Позиция', | ||
| 119 | ]; | 122 | ]; |
| 120 | } | 123 | } |
| 121 | 124 |
views/manage/_form.php
| 1 | <?php | 1 | <?php |
| 2 | 2 | ||
| 3 | + use artweb\artbox\ecommerce\models\ProductVideo; | ||
| 3 | use artweb\artbox\language\widgets\LanguageForm; | 4 | use artweb\artbox\language\widgets\LanguageForm; |
| 4 | use artweb\artbox\ecommerce\models\Brand; | 5 | use artweb\artbox\ecommerce\models\Brand; |
| 5 | use artweb\artbox\ecommerce\models\ProductLang; | 6 | use artweb\artbox\ecommerce\models\ProductLang; |
| 6 | use artweb\artbox\ecommerce\models\TaxGroup; | 7 | use artweb\artbox\ecommerce\models\TaxGroup; |
| 8 | + use wbraganca\dynamicform\DynamicFormWidget; | ||
| 7 | use yii\db\ActiveQuery; | 9 | use yii\db\ActiveQuery; |
| 8 | use yii\helpers\Html; | 10 | use yii\helpers\Html; |
| 9 | use yii\widgets\ActiveForm; | 11 | use yii\widgets\ActiveForm; |
| @@ -11,14 +13,31 @@ | @@ -11,14 +13,31 @@ | ||
| 11 | use artweb\artbox\components\artboxtree\ArtboxTreeHelper; | 13 | use artweb\artbox\components\artboxtree\ArtboxTreeHelper; |
| 12 | use artweb\artbox\ecommerce\helpers\ProductHelper; | 14 | use artweb\artbox\ecommerce\helpers\ProductHelper; |
| 13 | use kartik\select2\Select2; | 15 | use kartik\select2\Select2; |
| 16 | + use yii\web\View; | ||
| 14 | 17 | ||
| 15 | /** | 18 | /** |
| 16 | - * @var yii\web\View $this | 19 | + * @var yii\web\View $this |
| 17 | * @var artweb\artbox\ecommerce\models\Product $model | 20 | * @var artweb\artbox\ecommerce\models\Product $model |
| 18 | - * @var ProductLang[] $modelLangs | ||
| 19 | - * @var yii\widgets\ActiveForm $form | ||
| 20 | - * @var ActiveQuery $groups | 21 | + * @var ProductLang[] $modelLangs |
| 22 | + * @var yii\widgets\ActiveForm $form | ||
| 23 | + * @var ActiveQuery $groups | ||
| 24 | + * @var ProductVideo[] $videos | ||
| 21 | */ | 25 | */ |
| 26 | + | ||
| 27 | + $js = ' | ||
| 28 | +$(".dynamicform_wrapper").on("beforeDelete", function(e, item) { | ||
| 29 | + if (! confirm("Are you sure you want to delete this item?")) { | ||
| 30 | + return false; | ||
| 31 | + } | ||
| 32 | + return true; | ||
| 33 | +}); | ||
| 34 | + | ||
| 35 | +$(".dynamicform_wrapper").on("limitReached", function(e, item) { | ||
| 36 | + alert("Limit reached"); | ||
| 37 | +}); | ||
| 38 | +'; | ||
| 39 | + | ||
| 40 | + $this->registerJs($js, View::POS_END); | ||
| 22 | ?> | 41 | ?> |
| 23 | 42 | ||
| 24 | <div class="product-form"> | 43 | <div class="product-form"> |
| @@ -39,6 +58,68 @@ | @@ -39,6 +58,68 @@ | ||
| 39 | <?= $form->field($model, 'video') | 58 | <?= $form->field($model, 'video') |
| 40 | ->textarea(); ?> | 59 | ->textarea(); ?> |
| 41 | 60 | ||
| 61 | + <?php DynamicFormWidget::begin( | ||
| 62 | + [ | ||
| 63 | + 'widgetContainer' => 'dynamicform_wrapper', | ||
| 64 | + // required: only alphanumeric characters plus "_" [A-Za-z0-9_] | ||
| 65 | + 'widgetBody' => '.container-items', | ||
| 66 | + // required: css class selector | ||
| 67 | + 'widgetItem' => '.item', | ||
| 68 | + // required: css class | ||
| 69 | + 'limit' => 10, | ||
| 70 | + // the maximum times, an element can be added (default 999) | ||
| 71 | + 'min' => 1, | ||
| 72 | + // 0 or 1 (default 1) | ||
| 73 | + 'insertButton' => '.add-item', | ||
| 74 | + // css class | ||
| 75 | + 'deleteButton' => '.remove-item', | ||
| 76 | + // css class | ||
| 77 | + 'model' => $videos[ 0 ], | ||
| 78 | + 'formId' => 'dynamic-form', | ||
| 79 | + 'formFields' => [ | ||
| 80 | + 'url', | ||
| 81 | + ], | ||
| 82 | + ] | ||
| 83 | + ); ?> | ||
| 84 | + | ||
| 85 | + <div class="panel panel-default"> | ||
| 86 | + <div class="panel-heading"> | ||
| 87 | + <h4> | ||
| 88 | + <i class="glyphicon glyphicon-envelope"></i> Склады | ||
| 89 | + <button type="button" class="add-item btn btn-success btn-sm pull-right"> | ||
| 90 | + <i class="glyphicon glyphicon-plus"></i> Add | ||
| 91 | + </button> | ||
| 92 | + </h4> | ||
| 93 | + </div> | ||
| 94 | + <div class="panel-body"> | ||
| 95 | + <div class="container-items"><!-- widgetBody --> | ||
| 96 | + <?php foreach ($videos as $i => $video) { ?> | ||
| 97 | + <div class="item panel panel-default"><!-- widgetItem --> | ||
| 98 | + <div class="panel-body"> | ||
| 99 | +<!-- --><?php | ||
| 100 | +// // necessary for update action. | ||
| 101 | +// if (!$stock->isNewRecord) { | ||
| 102 | +// echo Html::activeHiddenInput($stock, "[{$i}]stock_id"); | ||
| 103 | +// } | ||
| 104 | +// ?> | ||
| 105 | + <div class="row"> | ||
| 106 | + <div class="col-sm-5"> | ||
| 107 | + <?= $form->field($video, "[{$i}]url") | ||
| 108 | + ->textInput([ 'maxlength' => true ]) ?> | ||
| 109 | + </div> | ||
| 110 | + <div class="col-sm-2" style="margin-top: 30px"> | ||
| 111 | + <button type="button" class="remove-item btn btn-danger btn-xs"> | ||
| 112 | + <i class="glyphicon glyphicon-minus"></i></button> | ||
| 113 | + </div> | ||
| 114 | + </div><!-- .row --> | ||
| 115 | + </div> | ||
| 116 | + </div> | ||
| 117 | + <?php } ?> | ||
| 118 | + </div> | ||
| 119 | + </div> | ||
| 120 | + </div><!-- .panel --> | ||
| 121 | + <?php DynamicFormWidget::end(); ?> | ||
| 122 | + | ||
| 42 | <?= $form->field($model, 'brand_id') | 123 | <?= $form->field($model, 'brand_id') |
| 43 | ->dropDownList( | 124 | ->dropDownList( |
| 44 | ArrayHelper::map( | 125 | ArrayHelper::map( |
views/manage/update.php
| @@ -2,20 +2,26 @@ | @@ -2,20 +2,26 @@ | ||
| 2 | 2 | ||
| 3 | use artweb\artbox\ecommerce\models\Product; | 3 | use artweb\artbox\ecommerce\models\Product; |
| 4 | use artweb\artbox\ecommerce\models\ProductLang; | 4 | use artweb\artbox\ecommerce\models\ProductLang; |
| 5 | + use artweb\artbox\ecommerce\models\ProductVideo; | ||
| 5 | use yii\db\ActiveQuery; | 6 | use yii\db\ActiveQuery; |
| 6 | use yii\helpers\Html; | 7 | use yii\helpers\Html; |
| 7 | use yii\web\View; | 8 | use yii\web\View; |
| 8 | 9 | ||
| 9 | /** | 10 | /** |
| 10 | - * @var View $this | ||
| 11 | - * @var Product $model | ||
| 12 | - * @var ProductLang[] $modelLangs | ||
| 13 | - * @var ActiveQuery $groups | 11 | + * @var View $this |
| 12 | + * @var Product $model | ||
| 13 | + * @var ProductLang[] $modelLangs | ||
| 14 | + * @var ActiveQuery $groups | ||
| 15 | + * @var ProductVideo[] $videos | ||
| 14 | */ | 16 | */ |
| 15 | 17 | ||
| 16 | - $this->title = Yii::t('product', 'Update {modelClass}: ', [ | ||
| 17 | - 'modelClass' => 'Product', | ||
| 18 | - ]) . ' ' . $model->lang->title; | 18 | + $this->title = Yii::t( |
| 19 | + 'product', | ||
| 20 | + 'Update {modelClass}: ', | ||
| 21 | + [ | ||
| 22 | + 'modelClass' => 'Product', | ||
| 23 | + ] | ||
| 24 | + ) . ' ' . $model->lang->title; | ||
| 19 | $this->params[ 'breadcrumbs' ][] = [ | 25 | $this->params[ 'breadcrumbs' ][] = [ |
| 20 | 'label' => Yii::t('product', 'Products'), | 26 | 'label' => Yii::t('product', 'Products'), |
| 21 | 'url' => [ 'index' ], | 27 | 'url' => [ 'index' ], |
| @@ -33,10 +39,14 @@ | @@ -33,10 +39,14 @@ | ||
| 33 | 39 | ||
| 34 | <h1><?= Html::encode($this->title) ?></h1> | 40 | <h1><?= Html::encode($this->title) ?></h1> |
| 35 | 41 | ||
| 36 | - <?= $this->render('_form', [ | ||
| 37 | - 'model' => $model, | ||
| 38 | - 'modelLangs' => $modelLangs, | ||
| 39 | - 'groups' => $groups, | ||
| 40 | - ]) ?> | 42 | + <?= $this->render( |
| 43 | + '_form', | ||
| 44 | + [ | ||
| 45 | + 'model' => $model, | ||
| 46 | + 'modelLangs' => $modelLangs, | ||
| 47 | + 'groups' => $groups, | ||
| 48 | + 'videos' => $videos, | ||
| 49 | + ] | ||
| 50 | + ) ?> | ||
| 41 | 51 | ||
| 42 | </div> | 52 | </div> |
views/tax-group/_form.php
| @@ -3,6 +3,7 @@ | @@ -3,6 +3,7 @@ | ||
| 3 | use artweb\artbox\language\widgets\LanguageForm; | 3 | use artweb\artbox\language\widgets\LanguageForm; |
| 4 | use artweb\artbox\ecommerce\models\TaxGroup; | 4 | use artweb\artbox\ecommerce\models\TaxGroup; |
| 5 | use artweb\artbox\ecommerce\models\TaxGroupLang; | 5 | use artweb\artbox\ecommerce\models\TaxGroupLang; |
| 6 | + use kartik\select2\Select2; | ||
| 6 | use yii\helpers\Html; | 7 | use yii\helpers\Html; |
| 7 | use yii\web\View; | 8 | use yii\web\View; |
| 8 | use yii\widgets\ActiveForm; | 9 | use yii\widgets\ActiveForm; |
| @@ -22,11 +23,30 @@ | @@ -22,11 +23,30 @@ | ||
| 22 | <?php $form = ActiveForm::begin([ 'options' => [ 'enctype' => 'multipart/form-data' ] ]); ?> | 23 | <?php $form = ActiveForm::begin([ 'options' => [ 'enctype' => 'multipart/form-data' ] ]); ?> |
| 23 | 24 | ||
| 24 | <?= $form->field($model, 'categories') | 25 | <?= $form->field($model, 'categories') |
| 25 | - ->dropDownList(ArtboxTreeHelper::treeMap(ProductHelper::getCategories(), 'id', 'lang.title'), [ | ||
| 26 | - 'multiple' => true, | ||
| 27 | - ]) | 26 | + ->dropDownList( |
| 27 | + ArtboxTreeHelper::treeMap(ProductHelper::getCategories(), 'id', 'lang.title'), | ||
| 28 | + [ | ||
| 29 | + 'multiple' => true, | ||
| 30 | + ] | ||
| 31 | + ) | ||
| 28 | ->label('Use in the following categories') ?> | 32 | ->label('Use in the following categories') ?> |
| 29 | 33 | ||
| 34 | + <?= $form->field($model, 'position') | ||
| 35 | + ->widget( | ||
| 36 | + Select2::className(), | ||
| 37 | + [ | ||
| 38 | + 'data' => [ | ||
| 39 | + 0 => 'Не отображать', | ||
| 40 | + 1 => 'Во вкладках', | ||
| 41 | + 2 => 'В списке', | ||
| 42 | + ], | ||
| 43 | + 'options' => [ 'placeholder' => 'Положение в карточке товара' ], | ||
| 44 | + 'pluginOptions' => [ | ||
| 45 | + 'allowClear' => true, | ||
| 46 | + ], | ||
| 47 | + ] | ||
| 48 | + ) ?> | ||
| 49 | + | ||
| 30 | <?= $form->field($model, 'is_filter') | 50 | <?= $form->field($model, 'is_filter') |
| 31 | ->checkbox() ?> | 51 | ->checkbox() ?> |
| 32 | 52 | ||
| @@ -40,15 +60,20 @@ | @@ -40,15 +60,20 @@ | ||
| 40 | ->textInput() ?> | 60 | ->textInput() ?> |
| 41 | 61 | ||
| 42 | <?php | 62 | <?php |
| 43 | - echo LanguageForm::widget([ | ||
| 44 | - 'modelLangs' => $modelLangs, | ||
| 45 | - 'formView' => '@artweb/artbox/ecommerce/views/tax-group/_form_language', | ||
| 46 | - 'form' => $form, | ||
| 47 | - ]); | 63 | + echo LanguageForm::widget( |
| 64 | + [ | ||
| 65 | + 'modelLangs' => $modelLangs, | ||
| 66 | + 'formView' => '@artweb/artbox/ecommerce/views/tax-group/_form_language', | ||
| 67 | + 'form' => $form, | ||
| 68 | + ] | ||
| 69 | + ); | ||
| 48 | ?> | 70 | ?> |
| 49 | 71 | ||
| 50 | <div class="form-group"> | 72 | <div class="form-group"> |
| 51 | - <?= Html::submitButton($model->isNewRecord ? Yii::t('rubrication', 'Create') : Yii::t('rubrication', 'Update'), [ 'class' => $model->isNewRecord ? 'btn btn-success' : 'btn btn-primary' ]) ?> | 73 | + <?= Html::submitButton( |
| 74 | + $model->isNewRecord ? Yii::t('rubrication', 'Create') : Yii::t('rubrication', 'Update'), | ||
| 75 | + [ 'class' => $model->isNewRecord ? 'btn btn-success' : 'btn btn-primary' ] | ||
| 76 | + ) ?> | ||
| 52 | </div> | 77 | </div> |
| 53 | 78 | ||
| 54 | <?php ActiveForm::end(); ?> | 79 | <?php ActiveForm::end(); ?> |