Commit 38828295b07deef496f4d4c74e74a890d4fcb6ca
1 parent
1bdd1646
-
Showing
23 changed files
with
214 additions
and
25 deletions
Show diff stats
backend/views/brand/index.php
| @@ -26,6 +26,13 @@ $this->params['breadcrumbs'][] = $this->title; | @@ -26,6 +26,13 @@ $this->params['breadcrumbs'][] = $this->title; | ||
| 26 | 26 | ||
| 27 | 'name', | 27 | 'name', |
| 28 | 'alias', | 28 | 'alias', |
| 29 | + [ | ||
| 30 | + 'attribute' => 'title', | ||
| 31 | + 'format' => 'html', | ||
| 32 | + 'value' => function($data) { | ||
| 33 | + return Html::img($data->imageUrl, ['width'=>'100']); | ||
| 34 | + }, | ||
| 35 | + ], | ||
| 29 | 36 | ||
| 30 | ['class' => 'yii\grid\ActionColumn'], | 37 | ['class' => 'yii\grid\ActionColumn'], |
| 31 | ], | 38 | ], |
common/config/main.php
| @@ -90,6 +90,20 @@ return [ | @@ -90,6 +90,20 @@ return [ | ||
| 90 | 'master' => null | 90 | 'master' => null |
| 91 | ], | 91 | ], |
| 92 | ], | 92 | ], |
| 93 | + 'product_basket' => [ | ||
| 94 | + 'resize' => [ | ||
| 95 | + 'width' => 100, | ||
| 96 | + 'height' => 200, | ||
| 97 | + 'master' => null | ||
| 98 | + ], | ||
| 99 | + ], | ||
| 100 | + 'iam' => [ | ||
| 101 | + 'resize' => [ | ||
| 102 | + 'width' => 120, | ||
| 103 | + 'height' => 240, | ||
| 104 | + 'master' => null | ||
| 105 | + ], | ||
| 106 | + ], | ||
| 93 | 'slider' => [ | 107 | 'slider' => [ |
| 94 | 'resize' => [ | 108 | 'resize' => [ |
| 95 | 'width' => 720, | 109 | 'width' => 720, |
| @@ -104,6 +118,18 @@ return [ | @@ -104,6 +118,18 @@ return [ | ||
| 104 | 'master' => null | 118 | 'master' => null |
| 105 | ], | 119 | ], |
| 106 | ], | 120 | ], |
| 121 | + 'brand_item' => [ | ||
| 122 | + 'resize' => [ | ||
| 123 | + 'width' => 150, | ||
| 124 | + 'height' => 150, | ||
| 125 | + 'master' => null | ||
| 126 | + ], | ||
| 127 | + 'crop' => [ | ||
| 128 | + 'width' => 150, | ||
| 129 | + 'height' => 150, | ||
| 130 | + 'master' => null | ||
| 131 | + ], | ||
| 132 | + ], | ||
| 107 | 'mainmenu' => [ | 133 | 'mainmenu' => [ |
| 108 | 'resize' => [ | 134 | 'resize' => [ |
| 109 | 'width' => 160, | 135 | 'width' => 160, |
common/modules/product/CatalogUrlManager.php
| @@ -3,6 +3,7 @@ | @@ -3,6 +3,7 @@ | ||
| 3 | namespace common\modules\product; | 3 | namespace common\modules\product; |
| 4 | 4 | ||
| 5 | use common\modules\product\models\Brand; | 5 | use common\modules\product\models\Brand; |
| 6 | +use common\modules\product\models\BrandSearch; | ||
| 6 | use common\modules\product\models\CategorySearch; | 7 | use common\modules\product\models\CategorySearch; |
| 7 | use common\modules\product\models\ProductSearch; | 8 | use common\modules\product\models\ProductSearch; |
| 8 | use common\modules\rubrication\models\TaxOption; | 9 | use common\modules\rubrication\models\TaxOption; |
| @@ -78,8 +79,15 @@ class CatalogUrlManager implements UrlRuleInterface { | @@ -78,8 +79,15 @@ class CatalogUrlManager implements UrlRuleInterface { | ||
| 78 | $params = [ | 79 | $params = [ |
| 79 | 'product' => $product, | 80 | 'product' => $product, |
| 80 | ]; | 81 | ]; |
| 81 | - } elseif ($paths[0] == 'brand') { | ||
| 82 | - | 82 | + } elseif ($paths[0] == 'brands') { |
| 83 | + if (empty($paths[1]) || $paths[1] == 'index') { | ||
| 84 | + $route = 'catalog/brands'; | ||
| 85 | + } elseif (($brand = BrandSearch::findByAlias($paths[1]))) { | ||
| 86 | + $route = 'catalog/brands'; | ||
| 87 | + $params['brand'] = $brand; | ||
| 88 | + } else { | ||
| 89 | + // @todo redirect or return FALSE | ||
| 90 | + } | ||
| 83 | } | 91 | } |
| 84 | 92 | ||
| 85 | return [$route, $params]; | 93 | return [$route, $params]; |
| @@ -169,6 +177,21 @@ class CatalogUrlManager implements UrlRuleInterface { | @@ -169,6 +177,21 @@ class CatalogUrlManager implements UrlRuleInterface { | ||
| 169 | 177 | ||
| 170 | return $url; | 178 | return $url; |
| 171 | break; | 179 | break; |
| 180 | + | ||
| 181 | + case 'catalog/brands': | ||
| 182 | + if (empty($params['brand'])) { | ||
| 183 | + return 'brands'; | ||
| 184 | + } else { | ||
| 185 | + $brand_alias = is_object($params['brand']) ? $params['brand']->alias : strtolower($params['brand']); | ||
| 186 | + } | ||
| 187 | + $url = 'brands/'. $brand_alias; | ||
| 188 | + | ||
| 189 | + if (!empty($params) && ($query = http_build_query($params)) !== '') { | ||
| 190 | + $url .= '?' . $query; | ||
| 191 | + } | ||
| 192 | + | ||
| 193 | + return $url; | ||
| 194 | + break; | ||
| 172 | } | 195 | } |
| 173 | } | 196 | } |
| 174 | 197 |
common/modules/product/models/BrandSearch.php
| @@ -81,6 +81,8 @@ class BrandSearch extends Brand | @@ -81,6 +81,8 @@ class BrandSearch extends Brand | ||
| 81 | ->andFilterWhere(['ilike', 'seo_text', $this->seo_text]) | 81 | ->andFilterWhere(['ilike', 'seo_text', $this->seo_text]) |
| 82 | ->andFilterWhere(['ilike', 'brand_name.value', $this->brand_name]); | 82 | ->andFilterWhere(['ilike', 'brand_name.value', $this->brand_name]); |
| 83 | 83 | ||
| 84 | + $query->orderBy('brand_id', 'asc'); | ||
| 85 | + | ||
| 84 | return $dataProvider; | 86 | return $dataProvider; |
| 85 | } | 87 | } |
| 86 | 88 | ||
| @@ -121,4 +123,16 @@ class BrandSearch extends Brand | @@ -121,4 +123,16 @@ class BrandSearch extends Brand | ||
| 121 | 123 | ||
| 122 | return $dataProvider; | 124 | return $dataProvider; |
| 123 | } | 125 | } |
| 126 | + | ||
| 127 | + public static function findByAlias($alias) { | ||
| 128 | + /** @var CategoryQuery $query */ | ||
| 129 | + $query = Brand::find() | ||
| 130 | + ->with('brandName') | ||
| 131 | + ->andFilterWhere(['alias' => $alias]); | ||
| 132 | + if (($model = $query->one()) !== null) { | ||
| 133 | + return $model; | ||
| 134 | + } else { | ||
| 135 | + throw new NotFoundHttpException('The requested page does not exist.'); | ||
| 136 | + } | ||
| 137 | + } | ||
| 124 | } | 138 | } |
common/modules/product/models/Category.php
| @@ -176,12 +176,12 @@ class Category extends \yii\db\ActiveRecord | @@ -176,12 +176,12 @@ class Category extends \yii\db\ActiveRecord | ||
| 176 | } | 176 | } |
| 177 | 177 | ||
| 178 | public function getImageFile() { | 178 | public function getImageFile() { |
| 179 | - return empty($this->image) ? null : Yii::getAlias('@imagesDir/categories/'. $this->image); | 179 | + return empty($this->image) ? '/images/no_photo.png' : Yii::getAlias('@imagesDir/categories/'. $this->image); |
| 180 | } | 180 | } |
| 181 | 181 | ||
| 182 | public function getImageUrl() | 182 | public function getImageUrl() |
| 183 | { | 183 | { |
| 184 | - return empty($this->image) ? null : Yii::getAlias('@imagesUrl/categories/' . $this->image); | 184 | + return empty($this->image) ? '/images/no_photo.png' : Yii::getAlias('@imagesUrl/categories/' . $this->image); |
| 185 | } | 185 | } |
| 186 | 186 | ||
| 187 | public function beforeSave($insert) | 187 | public function beforeSave($insert) |
common/modules/product/models/CategorySearch.php
| @@ -82,7 +82,7 @@ class CategorySearch extends Category | @@ -82,7 +82,7 @@ class CategorySearch extends Category | ||
| 82 | 82 | ||
| 83 | $query->andFilterWhere(['like', 'alias', $this->alias]); | 83 | $query->andFilterWhere(['like', 'alias', $this->alias]); |
| 84 | 84 | ||
| 85 | - $query->orderBy(['path' => SORT_ASC, 'depth' => SORT_ASC]); | 85 | + $query->orderBy(['path' => SORT_ASC, 'depth' => SORT_ASC, 'category_id' => SORT_ASC]); |
| 86 | 86 | ||
| 87 | return $dataProvider; | 87 | return $dataProvider; |
| 88 | } | 88 | } |
common/modules/product/models/Product.php
| @@ -221,7 +221,7 @@ class Product extends \yii\db\ActiveRecord | @@ -221,7 +221,7 @@ class Product extends \yii\db\ActiveRecord | ||
| 221 | if (!is_array($_variant)) { | 221 | if (!is_array($_variant)) { |
| 222 | return; | 222 | return; |
| 223 | } | 223 | } |
| 224 | - if (!empty($_variant['product_variant_id'])) { | 224 | + if (!empty($_variant['product_variant_id'])) { |
| 225 | unset($todel[$_variant['product_variant_id']]); | 225 | unset($todel[$_variant['product_variant_id']]); |
| 226 | $model = ProductVariant::findOne($_variant['product_variant_id']); | 226 | $model = ProductVariant::findOne($_variant['product_variant_id']); |
| 227 | } else { | 227 | } else { |
common/modules/product/models/ProductSearch.php
| @@ -15,6 +15,7 @@ class ProductSearch extends Product | @@ -15,6 +15,7 @@ class ProductSearch extends Product | ||
| 15 | { | 15 | { |
| 16 | public $brand_name; | 16 | public $brand_name; |
| 17 | public $category_name; | 17 | public $category_name; |
| 18 | + public $variant_sku; | ||
| 18 | 19 | ||
| 19 | /** | 20 | /** |
| 20 | * @inheritdoc | 21 | * @inheritdoc |
| @@ -22,9 +23,9 @@ class ProductSearch extends Product | @@ -22,9 +23,9 @@ class ProductSearch extends Product | ||
| 22 | public function rules() | 23 | public function rules() |
| 23 | { | 24 | { |
| 24 | return [ | 25 | return [ |
| 25 | - [['name', 'brand_name', 'category_name'], 'safe'], | 26 | + [['name', 'brand_name', 'category_name', 'variant_sku'], 'safe'], |
| 26 | [['tax_brand_id', 'product_id'], 'integer'], | 27 | [['tax_brand_id', 'product_id'], 'integer'], |
| 27 | - [['is_top', 'is_new'], 'boolean'], | 28 | + [['is_top', 'is_new', 'akciya'], 'boolean'], |
| 28 | ]; | 29 | ]; |
| 29 | } | 30 | } |
| 30 | 31 | ||
| @@ -65,12 +66,18 @@ class ProductSearch extends Product | @@ -65,12 +66,18 @@ class ProductSearch extends Product | ||
| 65 | $dataProvider->setSort([ | 66 | $dataProvider->setSort([ |
| 66 | 'attributes' => [ | 67 | 'attributes' => [ |
| 67 | 'name', | 68 | 'name', |
| 68 | - 'brand_name', | ||
| 69 | - 'category_name' | 69 | + 'brand_name' => [ |
| 70 | + 'asc' => ['brand_name.value' => SORT_ASC], | ||
| 71 | + 'desc' => ['brand_name.value' => SORT_DESC], | ||
| 72 | + 'default' => SORT_DESC, | ||
| 73 | + 'label' => 'Brand name', | ||
| 74 | + ], | ||
| 75 | + 'category_name', | ||
| 76 | + 'variant_sku', | ||
| 70 | ] | 77 | ] |
| 71 | ]); | 78 | ]); |
| 72 | 79 | ||
| 73 | - $query->joinWith(['brand', 'brand.brandNames', 'categories', 'categories.categoryNames']); | 80 | + $query->joinWith(['brand', 'brand.brandNames', 'categories', 'categories.categoryNames', 'variant']); |
| 74 | 81 | ||
| 75 | if (isset($this->is_top)) { | 82 | if (isset($this->is_top)) { |
| 76 | $query->andFilterWhere([ | 83 | $query->andFilterWhere([ |
| @@ -95,7 +102,9 @@ class ProductSearch extends Product | @@ -95,7 +102,9 @@ class ProductSearch extends Product | ||
| 95 | $query->andFilterWhere(['ilike', 'name', $this->name]); | 102 | $query->andFilterWhere(['ilike', 'name', $this->name]); |
| 96 | $query->andFilterWhere(['ilike', 'brand_name.value', $this->brand_name]); | 103 | $query->andFilterWhere(['ilike', 'brand_name.value', $this->brand_name]); |
| 97 | $query->andFilterWhere(['ilike', 'category_name.value', $this->category_name]); | 104 | $query->andFilterWhere(['ilike', 'category_name.value', $this->category_name]); |
| 105 | + $query->andFilterWhere(['ilike', 'product_variant.sku', $this->variant_sku]); | ||
| 98 | 106 | ||
| 107 | + $query->groupBy(['product.product_id']); | ||
| 99 | $query->orderBy('product.product_id', 'DESC'); | 108 | $query->orderBy('product.product_id', 'DESC'); |
| 100 | 109 | ||
| 101 | return $dataProvider; | 110 | return $dataProvider; |
common/modules/product/models/ProductVariant.php
| @@ -132,6 +132,10 @@ class ProductVariant extends \yii\db\ActiveRecord | @@ -132,6 +132,10 @@ class ProductVariant extends \yii\db\ActiveRecord | ||
| 132 | return !empty($this->image) ? $this->image->imageUrl : '/images/no_photo.png'; | 132 | return !empty($this->image) ? $this->image->imageUrl : '/images/no_photo.png'; |
| 133 | } | 133 | } |
| 134 | 134 | ||
| 135 | + public function getFullname() { | ||
| 136 | + return empty($this->product) ? null : ($this->product->name . (empty($this->name) ? '' : ' '. $this->name)); | ||
| 137 | + } | ||
| 138 | + | ||
| 135 | /** | 139 | /** |
| 136 | * @return \yii\db\ActiveQuery | 140 | * @return \yii\db\ActiveQuery |
| 137 | */ | 141 | */ |
common/modules/product/models/ProductVariantSearch.php
| @@ -12,14 +12,21 @@ use yii\web\NotFoundHttpException; | @@ -12,14 +12,21 @@ use yii\web\NotFoundHttpException; | ||
| 12 | */ | 12 | */ |
| 13 | class ProductVariantSearch extends ProductVariant | 13 | class ProductVariantSearch extends ProductVariant |
| 14 | { | 14 | { |
| 15 | + public $brand_name; | ||
| 16 | + public $category_name; | ||
| 17 | + public $tax_group_id; | ||
| 18 | + public $is_top; | ||
| 19 | + public $is_new; | ||
| 20 | + public $akciya; | ||
| 15 | /** | 21 | /** |
| 16 | * @inheritdoc | 22 | * @inheritdoc |
| 17 | */ | 23 | */ |
| 18 | public function rules() | 24 | public function rules() |
| 19 | { | 25 | { |
| 20 | return [ | 26 | return [ |
| 21 | - [['name', 'sku', 'price', 'price_old', 'stock'], 'safe'], | 27 | + [['name', 'fullname', 'sku', 'price', 'price_old', 'stock', 'fullname', 'brand_name', 'category_name'], 'safe'], |
| 22 | [['product_variant_id', 'product_id'], 'integer'], | 28 | [['product_variant_id', 'product_id'], 'integer'], |
| 29 | + [['is_top', 'is_new', 'akciya'], 'boolean'], | ||
| 23 | ]; | 30 | ]; |
| 24 | } | 31 | } |
| 25 | 32 | ||
| @@ -57,14 +64,54 @@ class ProductVariantSearch extends ProductVariant | @@ -57,14 +64,54 @@ class ProductVariantSearch extends ProductVariant | ||
| 57 | return $dataProvider; | 64 | return $dataProvider; |
| 58 | } | 65 | } |
| 59 | 66 | ||
| 67 | + $dataProvider->setSort([ | ||
| 68 | + 'attributes' => [ | ||
| 69 | + 'name', | ||
| 70 | + 'brand_name' => [ | ||
| 71 | + 'asc' => ['brand_name.value' => SORT_ASC], | ||
| 72 | + 'desc' => ['brand_name.value' => SORT_DESC], | ||
| 73 | + 'default' => SORT_DESC, | ||
| 74 | + 'label' => 'Brand name', | ||
| 75 | + ], | ||
| 76 | + 'category_name', | ||
| 77 | + 'sku', | ||
| 78 | + ] | ||
| 79 | + ]); | ||
| 80 | + | ||
| 81 | + $query->joinWith(['product', 'product.brand.brandNames', 'product.categories', 'product.categories.categoryNames']); | ||
| 82 | + | ||
| 83 | + if (isset($this->is_top)) { | ||
| 84 | + $query->andFilterWhere([ | ||
| 85 | + 'product.is_top' => (bool)$this->is_top, | ||
| 86 | + ]); | ||
| 87 | + } | ||
| 88 | + if (isset($this->is_new)) { | ||
| 89 | + $query->andFilterWhere([ | ||
| 90 | + 'product.is_new' => (bool)$this->is_new, | ||
| 91 | + ]); | ||
| 92 | + } | ||
| 93 | + if (isset($this->akciya)) { | ||
| 94 | + $query->andFilterWhere([ | ||
| 95 | + 'product.akciya' => (bool)$this->akciya, | ||
| 96 | + ]); | ||
| 97 | + } | ||
| 98 | + | ||
| 60 | // grid filtering conditions | 99 | // grid filtering conditions |
| 61 | $query->andFilterWhere([ | 100 | $query->andFilterWhere([ |
| 101 | + 'product.product_id' => $this->product_id, | ||
| 62 | 'product_variant_id' => $this->product_variant_id, | 102 | 'product_variant_id' => $this->product_variant_id, |
| 63 | - 'product_id' => $this->product_id, | ||
| 64 | ]); | 103 | ]); |
| 65 | 104 | ||
| 66 | - $query->andFilterWhere(['like', 'name', $this->name]) | ||
| 67 | - ->andFilterWhere(['like', 'sku', $this->sku]); | 105 | + if (!empty($this->fullname)) { |
| 106 | + $query->orFilterWhere(['like', 'name', $this->fullname]); | ||
| 107 | + $query->orFilterWhere(['ilike', 'product.name', $this->fullname]); | ||
| 108 | + } | ||
| 109 | + $query->andFilterWhere(['ilike', 'product.brand_name.value', $this->brand_name]); | ||
| 110 | + $query->andFilterWhere(['ilike', 'product.category_name.value', $this->category_name]); | ||
| 111 | + $query->andFilterWhere(['ilike', 'sku', $this->sku]); | ||
| 112 | + | ||
| 113 | + $query->groupBy(['product_variant_id']); | ||
| 114 | + $query->orderBy('product.product_id', 'DESC'); | ||
| 68 | 115 | ||
| 69 | return $dataProvider; | 116 | return $dataProvider; |
| 70 | } | 117 | } |
common/modules/product/views/manage/index.php
| @@ -34,6 +34,11 @@ $this->params['breadcrumbs'][] = $this->title; | @@ -34,6 +34,11 @@ $this->params['breadcrumbs'][] = $this->title; | ||
| 34 | 'attribute' => 'category_name', | 34 | 'attribute' => 'category_name', |
| 35 | 'value' => 'category.name', | 35 | 'value' => 'category.name', |
| 36 | ], | 36 | ], |
| 37 | + [ | ||
| 38 | + 'label' => Yii::t('product', 'SKU'), | ||
| 39 | + 'attribute' => 'variant_sku', | ||
| 40 | + 'value' => 'variant.sku', | ||
| 41 | + ], | ||
| 37 | 'variant.price', | 42 | 'variant.price', |
| 38 | 'variant.stock_caption', | 43 | 'variant.stock_caption', |
| 39 | 44 |
common/modules/rubrication/models/TaxGroup.php
| @@ -15,7 +15,7 @@ use Yii; | @@ -15,7 +15,7 @@ use Yii; | ||
| 15 | * @property string $module | 15 | * @property string $module |
| 16 | * @property boolean $hierarchical | 16 | * @property boolean $hierarchical |
| 17 | * @property string $settings | 17 | * @property string $settings |
| 18 | - * @property boolean is_filter | 18 | + * @property boolean $is_filter |
| 19 | * | 19 | * |
| 20 | * @property TaxGroupToGroup[] $taxGroupToGroups | 20 | * @property TaxGroupToGroup[] $taxGroupToGroups |
| 21 | * @property TaxGroupToGroup[] $taxGroupToGroups0 | 21 | * @property TaxGroupToGroup[] $taxGroupToGroups0 |
| @@ -62,7 +62,7 @@ class TaxGroup extends \yii\db\ActiveRecord | @@ -62,7 +62,7 @@ class TaxGroup extends \yii\db\ActiveRecord | ||
| 62 | return [ | 62 | return [ |
| 63 | [['name', 'module'], 'required'], | 63 | [['name', 'module'], 'required'], |
| 64 | [['description', 'settings'], 'string'], | 64 | [['description', 'settings'], 'string'], |
| 65 | - [['hierarchical'], 'boolean'], | 65 | + [['hierarchical', 'is_filter'], 'boolean'], |
| 66 | [['alias', 'module'], 'string', 'max' => 50], | 66 | [['alias', 'module'], 'string', 'max' => 50], |
| 67 | [['name'], 'string', 'max' => 255], | 67 | [['name'], 'string', 'max' => 255], |
| 68 | [['group_to_category'], 'safe'] | 68 | [['group_to_category'], 'safe'] |
common/modules/rubrication/views/tax-group/index.php
| @@ -25,6 +25,7 @@ $this->params['breadcrumbs'][] = $this->title; | @@ -25,6 +25,7 @@ $this->params['breadcrumbs'][] = $this->title; | ||
| 25 | 'description:ntext', | 25 | 'description:ntext', |
| 26 | 'module', | 26 | 'module', |
| 27 | 'hierarchical:boolean', | 27 | 'hierarchical:boolean', |
| 28 | + 'is_filter:boolean', | ||
| 28 | // 'settings:ntext', | 29 | // 'settings:ntext', |
| 29 | 30 | ||
| 30 | [ | 31 | [ |
common/modules/rubrication/views/tax-group/view.php
| @@ -35,6 +35,7 @@ $this->params['breadcrumbs'][] = $this->title; | @@ -35,6 +35,7 @@ $this->params['breadcrumbs'][] = $this->title; | ||
| 35 | 'description:ntext', | 35 | 'description:ntext', |
| 36 | 'module', | 36 | 'module', |
| 37 | 'hierarchical:boolean', | 37 | 'hierarchical:boolean', |
| 38 | + 'is_filter:boolean', | ||
| 38 | 'settings:ntext', | 39 | 'settings:ntext', |
| 39 | ], | 40 | ], |
| 40 | ]) ?> | 41 | ]) ?> |
common/translation/ru/product.php
| @@ -11,5 +11,6 @@ return [ | @@ -11,5 +11,6 @@ return [ | ||
| 11 | 'Promo products' => 'Акционные товары', | 11 | 'Promo products' => 'Акционные товары', |
| 12 | 'New products' => 'Новинки', | 12 | 'New products' => 'Новинки', |
| 13 | 'Top products' => 'Популярные', | 13 | 'Top products' => 'Популярные', |
| 14 | - '' => '', | 14 | + 'Brands' => 'Бренды', |
| 15 | + 'Brand' => 'Бренд', | ||
| 15 | ]; | 16 | ]; |
| 16 | \ No newline at end of file | 17 | \ No newline at end of file |
frontend/config/main.php
| @@ -71,7 +71,7 @@ return [ | @@ -71,7 +71,7 @@ return [ | ||
| 71 | 'route_map' => [ | 71 | 'route_map' => [ |
| 72 | 'catalog' => 'catalog/category', | 72 | 'catalog' => 'catalog/category', |
| 73 | 'product' => 'catalog/product', | 73 | 'product' => 'catalog/product', |
| 74 | - 'brand' => 'catalog/brand', | 74 | + 'brands' => 'catalog/brands', |
| 75 | ] | 75 | ] |
| 76 | ], | 76 | ], |
| 77 | // 'catalog' => 'catalog/all', | 77 | // 'catalog' => 'catalog/all', |
frontend/controllers/CatalogController.php
| @@ -191,7 +191,16 @@ class CatalogController extends \yii\web\Controller | @@ -191,7 +191,16 @@ class CatalogController extends \yii\web\Controller | ||
| 191 | 191 | ||
| 192 | public function actionBrands() | 192 | public function actionBrands() |
| 193 | { | 193 | { |
| 194 | - return 'actionBrands'; | 194 | + $dataProvider = new ActiveDataProvider([ |
| 195 | + 'query' => Brand::find()->joinWith('brandName')->orderBy('brand_name.value'), | ||
| 196 | + 'pagination' => [ | ||
| 197 | + 'pageSize' => -1, | ||
| 198 | + ] | ||
| 199 | + ]); | ||
| 200 | + | ||
| 201 | + return $this->render('brands', [ | ||
| 202 | + 'dataProvider' => $dataProvider, | ||
| 203 | + ]); | ||
| 195 | } | 204 | } |
| 196 | 205 | ||
| 197 | public function actionBrand($alias) | 206 | public function actionBrand($alias) |
frontend/views/basket/ajax_items.php
| @@ -7,7 +7,9 @@ use yii\helpers\Html; | @@ -7,7 +7,9 @@ use yii\helpers\Html; | ||
| 7 | <div class="basket_item"> | 7 | <div class="basket_item"> |
| 8 | <?php echo $form->field($item,'['.$i.']id')->hiddenInput()->label(false); ?> | 8 | <?php echo $form->field($item,'['.$i.']id')->hiddenInput()->label(false); ?> |
| 9 | <div style="display: table-cell;vertical-align: middle;"><a href="#" data-id="<?=$item->id?>" class="delete_button" style="margin-right:20px;"></a></div> | 9 | <div style="display: table-cell;vertical-align: middle;"><a href="#" data-id="<?=$item->id?>" class="delete_button" style="margin-right:20px;"></a></div> |
| 10 | - <div style="width:100px;height:100px;display: table-cell;vertical-align: middle; border:1px solid #d2d2d2;text-align:center;margin-left:10px;margin-right:10px;"><img src="<?=Yii::$app->request->baseUrl.'/upload/products/ico/'.$item->image->image?>" style="margin:0;" width="100"></div> | 10 | + <div style="width:100px;height:100px;display: table-cell;vertical-align: middle; border:1px solid #d2d2d2;text-align:center;margin-left:10px;margin-right:10px;"> |
| 11 | + <?= \common\components\artboximage\ArtboxImageHelper::getImage($item->imageUrl, 'product_basket')?> | ||
| 12 | + </div> | ||
| 11 | <div style="display: table-cell;vertical-align: middle; font-size:15px;width:210px; font-weight:normal;padding-left:15px;"> | 13 | <div style="display: table-cell;vertical-align: middle; font-size:15px;width:210px; font-weight:normal;padding-left:15px;"> |
| 12 | <div><?=$item->product_name?></div> | 14 | <div><?=$item->product_name?></div> |
| 13 | <div style="text-transform:none; margin-top:20px; font-weight:bold;"> | 15 | <div style="text-transform:none; margin-top:20px; font-weight:bold;"> |
frontend/views/basket/index.php
| @@ -77,7 +77,9 @@ $('#order-delivery input[type=\"radio\"]').click(function(){ | @@ -77,7 +77,9 @@ $('#order-delivery input[type=\"radio\"]').click(function(){ | ||
| 77 | 77 | ||
| 78 | <?php foreach($basket_mods as $i=>$item):?> | 78 | <?php foreach($basket_mods as $i=>$item):?> |
| 79 | <div class="basket_item"> | 79 | <div class="basket_item"> |
| 80 | - <a href="<?=Url::to(['products/show','translit_rubric'=>$item->translit_rubric,'translit'=>$item->translit,'id'=>$item->product_id])?>"><img src="<?=Yii::$app->request->baseUrl.'/upload/products/ico/'.$item->image->image?>" border="0" width="90" height="120" align="left" /></a> | 80 | + <a href="<?=Url::to(['products/show','translit_rubric'=>$item->translit_rubric,'translit'=>$item->translit,'id'=>$item->product_id])?>"> |
| 81 | + <?= \common\components\artboximage\ArtboxImageHelper::getImage($item->imageUrl, 'product_basket')?> | ||
| 82 | + </a> | ||
| 81 | <div class="info"> | 83 | <div class="info"> |
| 82 | <a href="<?=Url::to(['products/show','translit_rubric'=>$item->translit_rubric,'translit'=>$item->translit,'id'=>$item->product_id])?>" class="link2"><?=$item->product_name?></a> | 84 | <a href="<?=Url::to(['products/show','translit_rubric'=>$item->translit_rubric,'translit'=>$item->translit,'id'=>$item->product_id])?>" class="link2"><?=$item->product_name?></a> |
| 83 | <p>Код: <?=$item->sku?>, цвет: <?=$item->name?></p> | 85 | <p>Код: <?=$item->sku?>, цвет: <?=$item->name?></p> |
| 1 | +<?php | ||
| 2 | +use yii\widgets\Breadcrumbs; | ||
| 3 | +use yii\grid\GridView; | ||
| 4 | + | ||
| 5 | +$this->params['breadcrumbs'][] = Yii::t('product', 'Brands'); | ||
| 6 | + | ||
| 7 | +$this->params['seo']['seo_text'] = 'Brands SEO-text'; | ||
| 8 | +$this->params['seo']['h1'] = Yii::t('product', 'Brands'); | ||
| 9 | +$this->params['seo']['description'] = 'Brands DESCRIPTION'; | ||
| 10 | +$this->params['seo']['fields']['name'] = 'Brands NAME FROM FIELD'; | ||
| 11 | +$this->params['seo']['key']= 'brands'; | ||
| 12 | +?> | ||
| 13 | + | ||
| 14 | +<nav class="bread-crumbs"> | ||
| 15 | + <?= Breadcrumbs::widget ([ | ||
| 16 | + 'links' => $this->params['breadcrumbs'], | ||
| 17 | +]) | ||
| 18 | + ?> | ||
| 19 | +<div class="both"></div> | ||
| 20 | +</nav> | ||
| 21 | + | ||
| 22 | +<div class="loyout"> | ||
| 23 | + <h1><?= $this->params['seo']['h1']?></h1> | ||
| 24 | + <ul class="brends_list"> | ||
| 25 | + <?php foreach($dataProvider->models as $brand) :?> | ||
| 26 | + <li> | ||
| 27 | + <a href="<?= \yii\helpers\Url::to(['catalog/brands', 'brand' => $brand])?>"><?= \common\components\artboximage\ArtboxImageHelper::getImage($brand->imageUrl, 'brand_item')?></a> | ||
| 28 | + <br> | ||
| 29 | + <a href="<?= \yii\helpers\Url::to(['catalog/brands', 'brand' => $brand])?>" class="name"><?= $brand->name?></a> | ||
| 30 | + </li> | ||
| 31 | + <?php endforeach?> | ||
| 32 | + </ul> | ||
| 33 | + <div class="both"></div> | ||
| 34 | +</div> | ||
| 0 | \ No newline at end of file | 35 | \ No newline at end of file |
frontend/views/iam/share.php
| @@ -55,7 +55,9 @@ $this->registerJs(" | @@ -55,7 +55,9 @@ $this->registerJs(" | ||
| 55 | <?foreach($item->shareList as $item_p):if(!empty($item_p->product)):?> | 55 | <?foreach($item->shareList as $item_p):if(!empty($item_p->product)):?> |
| 56 | <div class="order"> | 56 | <div class="order"> |
| 57 | <div><a href="<?=Url::to(['iam/share','deleteID'=>$item_p->id])?>" class="delete_button"></a></div> | 57 | <div><a href="<?=Url::to(['iam/share','deleteID'=>$item_p->id])?>" class="delete_button"></a></div> |
| 58 | - <div class="pixbox"><a href="<?=Url::to(['products/show','translit_rubric'=>$item_p->product->catalog->translit,'translit'=>$item_p->product->translit,'id'=>$item_p->product->id])?>"><img width="120" src="<?=Yii::$app->request->baseUrl.'/upload/products/ico/'.$item_p->product->imageAvator?>"></a></div> | 58 | + <div class="pixbox"><a href="<?=Url::to(['products/show','translit_rubric'=>$item_p->product->catalog->translit,'translit'=>$item_p->product->translit,'id'=>$item_p->product->id])?>"> |
| 59 | + <?= \common\components\artboximage\ArtboxImageHelper::getImage($item_p->product->imageUrl, 'iam')?> | ||
| 60 | + </div> | ||
| 59 | <div class="order_title"><a href="<?=Url::to(['products/show','translit_rubric'=>$item_p->product->catalog->translit,'translit'=>$item_p->product->translit,'id'=>$item_p->product->id])?>" class="name"><?=$item_p->product->name?></a></div> | 61 | <div class="order_title"><a href="<?=Url::to(['products/show','translit_rubric'=>$item_p->product->catalog->translit,'translit'=>$item_p->product->translit,'id'=>$item_p->product->id])?>" class="name"><?=$item_p->product->name?></a></div> |
| 60 | <?if(!empty($item_p->product->cost->cost)):?><div class="order_price"><span><?=$item_p->product->cost->cost?></span> грн.</div><?endif;?> | 62 | <?if(!empty($item_p->product->cost->cost)):?><div class="order_price"><span><?=$item_p->product->cost->cost?></span> грн.</div><?endif;?> |
| 61 | <p class="note"></p> | 63 | <p class="note"></p> |
frontend/views/layouts/main-menu.php
| @@ -7,6 +7,6 @@ use yii\helpers\Url; | @@ -7,6 +7,6 @@ use yii\helpers\Url; | ||
| 7 | <div class="fr"> | 7 | <div class="fr"> |
| 8 | <ul> | 8 | <ul> |
| 9 | <li class="akciya"><a href="<?= Url::to (['event/index',]) ?>">Акции</a></li> | 9 | <li class="akciya"><a href="<?= Url::to (['event/index',]) ?>">Акции</a></li> |
| 10 | - <li class="brands"><a href="<?= Url::to (['brand/index']) ?>">Бренды</a></li> | 10 | + <li class="brands"><a href="<?= Url::to (['catalog/brands']) ?>">Бренды</a></li> |
| 11 | </ul> | 11 | </ul> |
| 12 | </div> | 12 | </div> |
frontend/web/css/style.css
| @@ -244,11 +244,13 @@ ul.product_colors li img{border:1px solid #d2d2d2;} | @@ -244,11 +244,13 @@ ul.product_colors li img{border:1px solid #d2d2d2;} | ||
| 244 | } | 244 | } |
| 245 | .help-block{color:red;font-size:12px;margin-bottom:5px;} | 245 | .help-block{color:red;font-size:12px;margin-bottom:5px;} |
| 246 | 246 | ||
| 247 | -.basket_item{padding:10px 0px;border-bottom:1px solid #b7b7b7;} | 247 | +.basket_item{padding:10px 0px;border-bottom:1px solid #b7b7b7;clear: both} |
| 248 | .basket_item img{margin-right:20px;} | 248 | .basket_item img{margin-right:20px;} |
| 249 | .basket_item .count{margin:20px 0px;} | 249 | .basket_item .count{margin:20px 0px;} |
| 250 | .basket_item .fr{margin-top:5px;} | 250 | .basket_item .fr{margin-top:5px;} |
| 251 | .basket_item .info{overflow:hidden;} | 251 | .basket_item .info{overflow:hidden;} |
| 252 | +.basket_item > a{display: block; | ||
| 253 | + float: left;} | ||
| 252 | a.del:visited,a.del:link{background:url('../img/del.png') left center no-repeat;padding:2px 25px;font-size:12px;font-weight:normal;color:#787878;text-decoration: underline;} | 254 | a.del:visited,a.del:link{background:url('../img/del.png') left center no-repeat;padding:2px 25px;font-size:12px;font-weight:normal;color:#787878;text-decoration: underline;} |
| 253 | a.del:hover{color:#a52828;text-decoration: underline;} | 255 | a.del:hover{color:#a52828;text-decoration: underline;} |
| 254 | 256 |