Commit 865853392105a844d92d0be5601da92037b29749

Authored by Administrator
2 parents b7f0b4d5 2583aa9d

Merge remote-tracking branch 'origin/master'

common/modules/product/models/BrandQuery.php
... ... @@ -31,4 +31,15 @@ class BrandQuery extends \yii\db\ActiveQuery
31 31 {
32 32 return parent::one($db);
33 33 }
  34 +
  35 + /**
  36 + * Select brand by alias
  37 + * @param $slug
  38 + * @return $this
  39 + */
  40 + public function byAlias($alias)
  41 + {
  42 + $this->andFilterWhere(['alias' => $alias]);
  43 + return $this;
  44 + }
34 45 }
... ...
common/modules/product/models/Category.php
... ... @@ -82,11 +82,12 @@ class Category extends \yii\db\ActiveRecord
82 82 [['name'], 'required'],
83 83 [['parent_id', 'depth', 'category_name_id', 'product_unit_id'], 'integer'],
84 84 [['path', 'meta_desc', 'seo_text'], 'string'],
85   - [['image', 'meta_title'], 'string', 'max' => 255],
  85 + [['meta_title'], 'string', 'max' => 255],
86 86 [['meta_robots'], 'string', 'max' => 50],
87 87 [['alias', 'name'], 'string', 'max' => 250],
88 88 [['populary'], 'boolean'],
89 89 [['group_to_category'], 'safe'],
  90 + // [['image'], 'file', 'skipOnEmpty' => false, 'extensions' => 'png, jpg, gif'],
90 91 // [['product_unit_id'], 'exist', 'skipOnError' => true, 'targetClass' => ProductUnit::className(), 'targetAttribute' => ['product_unit_id' => 'product_unit_id']],
91 92 ];
92 93 }
... ...
common/modules/product/widgets/views/submenu.php
... ... @@ -8,7 +8,13 @@
8 8 <div class="content_items">
9 9 <?php foreach($populary as $_item) :?>
10 10 <div class="content_item"><a href="<?= \yii\helpers\Url::to(['catalog/category', 'alias' => $_item->alias])?>">
11   - <div valign="top" class="picture"><img valign="top" src="<?= $_item->image?>"></div>
  11 + <div valign="top" class="picture">
  12 + <?php if (empty($_item->image)) :?>
  13 + <img valign="top" src="/images/no_photo.png">
  14 + <?php else :?>
  15 + <img valign="top" src="<?= $_item->image?>">
  16 + <?php endif?>
  17 + </div>
12 18 <div class="title"><?= $_item->name?></div>
13 19 </a></div>
14 20 <?php endforeach?>
... ... @@ -24,7 +30,13 @@
24 30 <div class="content_items">
25 31 <?php foreach($item['children'] as $_item) :?>
26 32 <div class="content_item"><a href="<?= \yii\helpers\Url::to(['/catalog/category', 'alias' => $_item['item']->alias])?>">
27   - <div valign="top" class="picture"><img valign="top" src="<?= $_item['item']->image?>"></div>
  33 + <div valign="top" class="picture">
  34 + <?php if (empty($_item['item']->image)) :?>
  35 + <img valign="top" src="/images/no_photo.png">
  36 + <?php else :?>
  37 + <img valign="top" src="<?= $_item['item']->image?>" alt="<?= $_item['item']->name?>">
  38 + <?php endif?>
  39 + </div>
28 40 <div class="title"><?= $_item['item']->name?></div>
29 41 </a></div>
30 42 <?php endforeach?>
... ...
frontend/config/main.php
... ... @@ -47,6 +47,7 @@ return [
47 47 'enablePrettyUrl' => true,
48 48 'showScriptName' => false,
49 49 'rules' => [
  50 +// 'catalog' => 'catalog/category',
50 51 'catalog/<alias:[A-Za-z0-9_-]+>' => 'catalog/category',
51 52 'product/<alias:[A-Za-z0-9_-]+>' => 'catalog/product',
52 53 'brand' => 'catalog/brands',
... ...
frontend/controllers/CatalogController.php
... ... @@ -20,6 +20,10 @@ use yii\web\HttpException;
20 20  
21 21 class CatalogController extends \yii\web\Controller
22 22 {
  23 + public function actionSearch() {
  24 +
  25 + }
  26 +
23 27 public function actionCategory($alias)
24 28 {
25 29 $category = CategorySearch::findByAlias($alias);
... ... @@ -116,14 +120,31 @@ class CatalogController extends \yii\web\Controller
116 120  
117 121 // Options
118 122 if (($options = \Yii::$app->request->get('option')) != false) {
119   - $query->innerJoin(ProductOption::tableName(), ProductOption::tableName() .'.product_id='. Product::tableName() .'.product_id');
120   - $query->innerJoin(TaxOption::tableName(), TaxOption::tableName() .'.tax_option_id='. ProductOption::tableName() .'.option_id');
121   - foreach($options as $group_alias => $option_alias) {
  123 +// $query->innerJoin(ProductOption::tableName(), ProductOption::tableName() .'.product_id='. Product::tableName() .'.product_id');
  124 +// $query->innerJoin(TaxOption::tableName(), TaxOption::tableName() .'.tax_option_id='. ProductOption::tableName() .'.option_id');
  125 + foreach($options as $group_alias => $options_alias) {
  126 + if (!is_array($options_alias)) {
  127 + $options_alias = [$options_alias];
  128 + }
  129 + foreach($options_alias as &$option_alias) {
  130 + $option_alias = "'". $option_alias ."'";
  131 + }
122 132 $group = TaxGroup::find()->where(['like', 'alias', $group_alias])->one();
123 133 if (!$group) {
124 134 continue;
125 135 }
126   - $query->andWhere([TaxOption::tableName() .'.tax_group_id' => $group->tax_group_id, TaxOption::tableName() .'.alias' => $option_alias]);
  136 + $query->andWhere(Product::tableName() .'.product_id IN (SELECT product_id FROM product_option INNER JOIN tax_option ON tax_option.tax_option_id = product_option.option_id WHERE tax_option.alias IN ('. implode(',', $options_alias) .'))');
  137 + }
  138 + }
  139 +
  140 + if (($_brands = \Yii::$app->request->get('brand')) != false && is_array($_brands) && count($_brands) > 0) {
  141 + $_brands = Brand::find()->where(['in', 'alias', $_brands])->all();
  142 + $bids = [];
  143 + foreach ($_brands as $brand) {
  144 + $bids[] = $brand->brand_id;
  145 + }
  146 + if (count($bids)) {
  147 + $query->andWhere([Product::tableName() .'.brand_id' => $bids]);
127 148 }
128 149 }
129 150  
... ...
frontend/views/catalog/products.php
... ... @@ -55,8 +55,8 @@ $this-&gt;params[&#39;breadcrumbs&#39;][] = $category-&gt;name;
55 55 <div class="price_filter">
56 56 <?php foreach($brands as $brand) :?>
57 57 <div class="checkbox">
58   - <label><input type="checkbox" name="think" value="ruuki" /></label>
59   - <a href="<?= \yii\helpers\Url::to(['catalog/brand', 'alias' => $brand->alias])?>"><?= $brand->name?> (<?= $brand->getProducts()->count()?>)</a>
  58 + <label><input type="checkbox" name="brand[]" value="<?= $brand->alias?>"<?= isset($_GET['brand']) && in_array($brand->alias, $_GET['brand']) ? ' checked' : ''?> /></label>
  59 + <a href="#<?php /*= \yii\helpers\Url::to(['brand', 'alias' => $brand->alias])*/?>"><?= $brand->name?><!-- (<?php /*= $brand->getProducts()->count()*/?>)--></a>
60 60 </div>
61 61 <?php endforeach?>
62 62 <!--<div class="checkbox see_all">
... ... @@ -186,6 +186,10 @@ $this-&gt;params[&#39;breadcrumbs&#39;][] = $category-&gt;name;
186 186 <div class="cat_p_catalog_list">
187 187 <div class="title"><?= $category->name?> <span>(<?= $all_count?>)</span></div>
188 188  
  189 + <?php if (empty($products)) :?>
  190 + <h2>По данному запросу товары не найдены.</h2><br>
  191 + <p>Показать <a href="<?= \yii\helpers\Url::to(['catalog/category', 'alias' => $category->alias])?>">все товары из категории "<?= $category->name?>"</a></p>
  192 + <?php else :?>
189 193 <!-- sort menu -->
190 194 <div class="sort_menu">
191 195  
... ... @@ -243,7 +247,7 @@ $this-&gt;params[&#39;breadcrumbs&#39;][] = $category-&gt;name;
243 247  
244 248 <?php if ($pages->totalCount > $pages->pageSize) :?>
245 249 <!-- LOAD MORE BUTTON -->
246   - <button class="load_more_btn">Загрузить еще <?= $per_page?> товара</button>
  250 + <!--button class="load_more_btn">Загрузить еще <?= $per_page?> товара</button-->
247 251  
248 252 <div class="show_pages">
249 253 Страница:
... ... @@ -257,27 +261,18 @@ $this-&gt;params[&#39;breadcrumbs&#39;][] = $category-&gt;name;
257 261 <?php endif?>
258 262 <hr>
259 263  
  264 + <?php if(!empty($category->description)) :?>
260 265 <div class="description">
261   - <h2>Преимущества металлочерепицы:</h2>
262   - <p>
263   - На рынке стройматериалов представлено множество кровельных покрытий, от привычного всем рубероида до современной гибкой черепицы на основе стекловолоконных композитов. Все они имеют свои преимущества и сферы применения. Но металлочерепица на протяжении многих лет удерживает лидерские позиции по уровню продаж, и этzо объясняется несколькими причинами:
264   - </p>
265   - <h4>Кровля из металлочерепицы</h4>
266   - <p class="margin_bottom_20">
267   - <span class="bold">1. Малый вес.</span> Эта характеристика дает ощутимую финансовую выгоду. Вам не придется усиливать стропильные конструкции, значит, удастся сэкономить на пиломатериалах. Легкость металлочерепицы для кровли упрощает транспортировку и монтаж, позволяет отказаться от дорогостоящих услуг подъемной и грузовой спецтехники.
268   - </p>
269   - <p class="margin_bottom_20">
270   - <span class="bold">2. Прочность.</span> В отличие от рулонных и гибких материалов, металлочерепица устойчива к механическим повреждениям. Ее крайне сложно поцарапать и практически невозможно сломать. Высокие технические характеристики говорят и о хорошей несущей способности материала.
271   - </p>
272   - <p class="margin_bottom_20">
273   - <span class="bold">3. Эстетичность.</span> Металлочерепица придает крыше законченный, аккуратный вид. Дом выглядит просто роскошно. Подбирая оригинальные цветовые сочетания, дизайнерам удается с помощью
274   - </p>
  266 + <?= $category->description?>
275 267  
276 268 <div class="empty_padding_400"></div>
277 269 </div>
  270 + <?php endif?>
278 271 </div>
279 272 </div>
280 273 </div>
  274 +
  275 + <?php endif?>
281 276 </div>
282 277 </div>
283 278  
... ...
frontend/views/layouts/main.php
... ... @@ -54,9 +54,11 @@ AppAsset::register($this);
54 54 <?= Html::a(Html::img('/images/bau_logo.png',['border'=>'0']), ['/'],['class'=>'head_up_cell bau_logo'])?>
55 55 <div class="head_up_cell srch">
56 56 <div class="search_head">
57   - <div class="srch_head_desc">Введите запрос <a href="#">Шифер</a> <a href="#">Рубероид</a></div>
58   - <input type="text" name="search_head">
59   - <button><div class="search_img"></div></button>
  57 + <form action="<?= Url::to('catalog')?>">
  58 + <div class="srch_head_desc">Введите запрос <a href="#" onclick="$('#search-head').val('Шифер');return false;">Шифер</a> <a href="#" onclick="$('#search-head').val('Рубероид');return false;">Рубероид</a></div>
  59 + <input type="text" name="word" id="search-head">
  60 + <button><div class="search_img"></div></button>
  61 + </form>
60 62 </div>
61 63 </div>
62 64 <div class="head_up_cell phn">
... ...
frontend/web/css/concat_all.css
... ... @@ -43,6 +43,11 @@
43 43 display: inline-block;
44 44 float: left;
45 45 }
  46 +.cat_p_filter_bar:before {
  47 + display: block;
  48 + content: '';
  49 + clear: both;
  50 +}
46 51  
47 52 .cat_p_filter_bar .filter_list ul {
48 53 list-style: none;
... ... @@ -190,6 +195,7 @@
190 195 width: 700px;
191 196 padding-right: 10px;
192 197 display: inline-block;
  198 + min-height: 20em;
193 199 }
194 200  
195 201 .cat_p_catalog_list ul {
... ...