Commit 14eadb86e48260b0638ba6bc9cad2e473cdf3173
1 parent
290fae5b
Eager loading for catalog-models and autocomplete for relation create/update
Showing
22 changed files
with
164 additions
and
97 deletions
Show diff stats
backend/controllers/CategoryController.php
| @@ -90,7 +90,7 @@ class CategoryController extends Controller | @@ -90,7 +90,7 @@ class CategoryController extends Controller | ||
| 90 | } | 90 | } |
| 91 | return $this->render('create', [ | 91 | return $this->render('create', [ |
| 92 | 'model' => $model, | 92 | 'model' => $model, |
| 93 | - 'categories' => ArtboxTreeHelper::treeMap(Category::find()->getTree(), 'category_id', 'name', '.') | 93 | + 'categories' => ArtboxTreeHelper::treeMap(Category::find()->with('categoryName')->getTree(), 'category_id', 'categoryName.value', '.') |
| 94 | ]); | 94 | ]); |
| 95 | } | 95 | } |
| 96 | } | 96 | } |
| @@ -110,7 +110,7 @@ class CategoryController extends Controller | @@ -110,7 +110,7 @@ class CategoryController extends Controller | ||
| 110 | } else { | 110 | } else { |
| 111 | return $this->render('update', [ | 111 | return $this->render('update', [ |
| 112 | 'model' => $model, | 112 | 'model' => $model, |
| 113 | - 'categories' => ArtboxTreeHelper::treeMap(Category::find()->getTree(), 'category_id', 'name', '.') | 113 | + 'categories' => ArtboxTreeHelper::treeMap(Category::find()->with('categoryName')->getTree(), 'category_id', 'categoryName.value', '.') |
| 114 | ]); | 114 | ]); |
| 115 | } | 115 | } |
| 116 | } | 116 | } |
common/components/artboxtree/ArtboxTreeBehavior.php
| @@ -89,19 +89,20 @@ class ArtboxTreeBehavior extends Behavior { | @@ -89,19 +89,20 @@ class ArtboxTreeBehavior extends Behavior { | ||
| 89 | * get all-level children items | 89 | * get all-level children items |
| 90 | * use MP-method | 90 | * use MP-method |
| 91 | */ | 91 | */ |
| 92 | - public function getAllChildren($depth = null, $where = []) { | ||
| 93 | - return $this->getAllChildrenMP($depth)->where($where); | 92 | + public function getAllChildren($depth = null, $where = [], $with = null) { |
| 93 | + return $this->getAllChildrenMP($depth, $where, $with); | ||
| 94 | } | 94 | } |
| 95 | 95 | ||
| 96 | /* | 96 | /* |
| 97 | * get all-level children items | 97 | * get all-level children items |
| 98 | * use MP-method | 98 | * use MP-method |
| 99 | */ | 99 | */ |
| 100 | - public function getAllChildrenTree($depth = null, $where = []) { | ||
| 101 | - return $this->buildTree($this->getAllChildrenMP($depth, $where)->all(), $this->owner->getAttribute($this->keyNameId)); | 100 | + public function getAllChildrenTree($depth = null, $where = [], $with = null) { |
| 101 | + $query = $this->getAllChildrenMP($depth, $where, $with); | ||
| 102 | + return $this->buildTree($query->all(), $this->owner->getAttribute($this->keyNameId)); | ||
| 102 | } | 103 | } |
| 103 | 104 | ||
| 104 | - protected function buildTree(array $data, $parentId = 0) { | 105 | + public function buildTree(array $data, $parentId = 0) { |
| 105 | $result = []; | 106 | $result = []; |
| 106 | foreach ($data as $key => $element) { | 107 | foreach ($data as $key => $element) { |
| 107 | if ($element->getAttribute($this->keyNameParentId) == $parentId) { | 108 | if ($element->getAttribute($this->keyNameParentId) == $parentId) { |
| @@ -205,7 +206,7 @@ class ArtboxTreeBehavior extends Behavior { | @@ -205,7 +206,7 @@ class ArtboxTreeBehavior extends Behavior { | ||
| 205 | } | 206 | } |
| 206 | 207 | ||
| 207 | 208 | ||
| 208 | - public function getAllChildrenMP($depth = null) | 209 | + public function getAllChildrenMP($depth = null, $where = [], $with = null) |
| 209 | { | 210 | { |
| 210 | $tableName = $this->owner->tableName(); | 211 | $tableName = $this->owner->tableName(); |
| 211 | $path = $this->owner->getAttribute($this->keyNamePath); | 212 | $path = $this->owner->getAttribute($this->keyNamePath); |
| @@ -220,6 +221,13 @@ class ArtboxTreeBehavior extends Behavior { | @@ -220,6 +221,13 @@ class ArtboxTreeBehavior extends Behavior { | ||
| 220 | $orderBy["{$tableName}.[[{$this->keyNameDepth}]]"] = SORT_ASC; | 221 | $orderBy["{$tableName}.[[{$this->keyNameDepth}]]"] = SORT_ASC; |
| 221 | $orderBy["{$tableName}.[[{$this->keyNameId}]]"] = SORT_ASC; | 222 | $orderBy["{$tableName}.[[{$this->keyNameId}]]"] = SORT_ASC; |
| 222 | 223 | ||
| 224 | + if ($where) { | ||
| 225 | + $query->andWhere($where); | ||
| 226 | + } | ||
| 227 | + if ($with) { | ||
| 228 | + $query->with($with); | ||
| 229 | + } | ||
| 230 | + | ||
| 223 | $query | 231 | $query |
| 224 | ->andWhere($this->groupWhere()) | 232 | ->andWhere($this->groupWhere()) |
| 225 | ->addOrderBy($orderBy); | 233 | ->addOrderBy($orderBy); |
common/components/artboxtree/ArtboxTreeQueryTrait.php
| @@ -23,13 +23,15 @@ trait ArtboxTreeQueryTrait { | @@ -23,13 +23,15 @@ trait ArtboxTreeQueryTrait { | ||
| 23 | return self::$model; | 23 | return self::$model; |
| 24 | } | 24 | } |
| 25 | 25 | ||
| 26 | - public function getTree($group = null) { | 26 | + public function getTree($group = null, $with = null) { |
| 27 | $model = $this->getModel(); | 27 | $model = $this->getModel(); |
| 28 | if ($group !== null) { | 28 | if ($group !== null) { |
| 29 | - $data = $this->andWhere([$model->keyNameGroup => $group])->all(); | ||
| 30 | - } else { | ||
| 31 | - $data = $this->all(); | 29 | + $this->andWhere([$model->keyNameGroup => $group]); |
| 32 | } | 30 | } |
| 31 | + if ($with) { | ||
| 32 | + $this->with($with); | ||
| 33 | + } | ||
| 34 | + $data = $this->all(); | ||
| 33 | if (empty($data)) | 35 | if (empty($data)) |
| 34 | return []; | 36 | return []; |
| 35 | 37 | ||
| @@ -53,8 +55,8 @@ trait ArtboxTreeQueryTrait { | @@ -53,8 +55,8 @@ trait ArtboxTreeQueryTrait { | ||
| 53 | /** | 55 | /** |
| 54 | * @param int $group | 56 | * @param int $group |
| 55 | */ | 57 | */ |
| 56 | - public function rebuildMP($group) { | ||
| 57 | - $tree = $this->getTree($group); | 58 | + public function rebuildMP($group, $with = null) { |
| 59 | + $tree = $this->getTree($group, $with); | ||
| 58 | 60 | ||
| 59 | $this->_recursiveRebuild($tree); | 61 | $this->_recursiveRebuild($tree); |
| 60 | } | 62 | } |
common/config/main.php
| @@ -81,14 +81,17 @@ return [ | @@ -81,14 +81,17 @@ return [ | ||
| 81 | 'entity1' => [ | 81 | 'entity1' => [ |
| 82 | 'model' => '\common\modules\product\models\Product', | 82 | 'model' => '\common\modules\product\models\Product', |
| 83 | 'label' => 'Product', | 83 | 'label' => 'Product', |
| 84 | - 'listField' => 'fullname', | 84 | + 'listField' => 'name', |
| 85 | + 'searchField' => 'name', | ||
| 85 | 'key' => 'product_id', | 86 | 'key' => 'product_id', |
| 86 | 'linked_key' => 'product_id', | 87 | 'linked_key' => 'product_id', |
| 87 | ], | 88 | ], |
| 88 | 'entity2' => [ | 89 | 'entity2' => [ |
| 89 | 'model' => '\common\modules\product\models\Category', | 90 | 'model' => '\common\modules\product\models\Category', |
| 90 | 'label' => 'Category', | 91 | 'label' => 'Category', |
| 91 | - 'listField' => 'name', | 92 | + 'listField' => 'categoryName.value', |
| 93 | + 'searchField' => 'category_name.value', | ||
| 94 | + 'searchJoin' => 'categoryName', | ||
| 92 | 'key' => 'category_id', | 95 | 'key' => 'category_id', |
| 93 | 'linked_key' => 'category_id', | 96 | 'linked_key' => 'category_id', |
| 94 | 'hierarchy' => [ | 97 | 'hierarchy' => [ |
common/modules/product/helpers/ProductHelper.php
| @@ -8,10 +8,10 @@ use yii\base\Object; | @@ -8,10 +8,10 @@ use yii\base\Object; | ||
| 8 | 8 | ||
| 9 | class ProductHelper extends Object { | 9 | class ProductHelper extends Object { |
| 10 | public static function getCategories() { | 10 | public static function getCategories() { |
| 11 | - return Category::find()->getTree(); | 11 | + return Category::find()->with('categoryName')->getTree(); |
| 12 | } | 12 | } |
| 13 | 13 | ||
| 14 | public static function getBrands() { | 14 | public static function getBrands() { |
| 15 | - return Brand::find(); | 15 | + return Brand::find()->with('brandName'); |
| 16 | } | 16 | } |
| 17 | } | 17 | } |
| 18 | \ No newline at end of file | 18 | \ No newline at end of file |
common/modules/product/models/Brand.php
| @@ -111,6 +111,7 @@ class Brand extends \yii\db\ActiveRecord | @@ -111,6 +111,7 @@ class Brand extends \yii\db\ActiveRecord | ||
| 111 | } | 111 | } |
| 112 | 112 | ||
| 113 | public function getName() { | 113 | public function getName() { |
| 114 | + return $this->brandName->value; | ||
| 114 | $value = $this->getBrandName()->one(); | 115 | $value = $this->getBrandName()->one(); |
| 115 | return empty($value) ? $this->_getValue('name') : $value->value; | 116 | return empty($value) ? $this->_getValue('name') : $value->value; |
| 116 | } | 117 | } |
common/modules/product/models/BrandSearch.php
| @@ -41,7 +41,7 @@ class BrandSearch extends Brand | @@ -41,7 +41,7 @@ class BrandSearch extends Brand | ||
| 41 | */ | 41 | */ |
| 42 | public function search($params) | 42 | public function search($params) |
| 43 | { | 43 | { |
| 44 | - $query = Brand::find(); | 44 | + $query = Brand::find()->with('brandName'); |
| 45 | 45 | ||
| 46 | // add conditions that should always apply here | 46 | // add conditions that should always apply here |
| 47 | 47 |
common/modules/product/models/Category.php
| @@ -87,6 +87,7 @@ class Category extends \yii\db\ActiveRecord | @@ -87,6 +87,7 @@ class Category extends \yii\db\ActiveRecord | ||
| 87 | [['alias', 'name'], 'string', 'max' => 250], | 87 | [['alias', 'name'], 'string', 'max' => 250], |
| 88 | [['populary'], 'boolean'], | 88 | [['populary'], 'boolean'], |
| 89 | [['group_to_category'], 'safe'], | 89 | [['group_to_category'], 'safe'], |
| 90 | + [['category_name_id'], 'exist', 'skipOnError' => true, 'targetClass' => CategoryName::className(), 'targetAttribute' => ['category_name_id' => 'category_name_id']], | ||
| 90 | // [['image'], 'file', 'skipOnEmpty' => false, 'extensions' => 'png, jpg, gif'], | 91 | // [['image'], 'file', 'skipOnEmpty' => false, 'extensions' => 'png, jpg, gif'], |
| 91 | // [['product_unit_id'], 'exist', 'skipOnError' => true, 'targetClass' => ProductUnit::className(), 'targetAttribute' => ['product_unit_id' => 'product_unit_id']], | 92 | // [['product_unit_id'], 'exist', 'skipOnError' => true, 'targetClass' => ProductUnit::className(), 'targetAttribute' => ['product_unit_id' => 'product_unit_id']], |
| 92 | ]; | 93 | ]; |
| @@ -160,8 +161,9 @@ class Category extends \yii\db\ActiveRecord | @@ -160,8 +161,9 @@ class Category extends \yii\db\ActiveRecord | ||
| 160 | return $this->hasOne(CategoryName::className(), ['category_name_id' => 'category_name_id']); | 161 | return $this->hasOne(CategoryName::className(), ['category_name_id' => 'category_name_id']); |
| 161 | } | 162 | } |
| 162 | 163 | ||
| 163 | - public function getName() { | ||
| 164 | - $value = $this->getCategoryName()->one(); | ||
| 165 | - return empty($value) ? $this->_getValue('name') : $value->value; | ||
| 166 | - } | 164 | +// public function getName() { |
| 165 | +//// return $this->getCategoryName(); | ||
| 166 | +// $value = $this->getCategoryName()->one(); | ||
| 167 | +// return empty($value) ? $this->_getValue('name') : $value->value; | ||
| 168 | +// } | ||
| 167 | } | 169 | } |
common/modules/product/models/CategoryQuery.php
| @@ -34,15 +34,4 @@ class CategoryQuery extends \yii\db\ActiveQuery | @@ -34,15 +34,4 @@ class CategoryQuery extends \yii\db\ActiveQuery | ||
| 34 | { | 34 | { |
| 35 | return parent::one($db); | 35 | return parent::one($db); |
| 36 | } | 36 | } |
| 37 | - | ||
| 38 | - /** | ||
| 39 | - * Select category by alias | ||
| 40 | - * @param $slug | ||
| 41 | - * @return $this | ||
| 42 | - */ | ||
| 43 | - public function byAlias($alias) | ||
| 44 | - { | ||
| 45 | - $this->andFilterWhere(['alias' => $alias]); | ||
| 46 | - return $this; | ||
| 47 | - } | ||
| 48 | } | 37 | } |
common/modules/product/models/CategorySearch.php
| @@ -55,7 +55,7 @@ class CategorySearch extends Category | @@ -55,7 +55,7 @@ class CategorySearch extends Category | ||
| 55 | */ | 55 | */ |
| 56 | public function search($params) | 56 | public function search($params) |
| 57 | { | 57 | { |
| 58 | - $query = Category::find(); | 58 | + $query = Category::find()->with('categoryName'); |
| 59 | 59 | ||
| 60 | // add conditions that should always apply here | 60 | // add conditions that should always apply here |
| 61 | 61 | ||
| @@ -88,8 +88,9 @@ class CategorySearch extends Category | @@ -88,8 +88,9 @@ class CategorySearch extends Category | ||
| 88 | 88 | ||
| 89 | public static function findByAlias($alias) { | 89 | public static function findByAlias($alias) { |
| 90 | /** @var CategoryQuery $query */ | 90 | /** @var CategoryQuery $query */ |
| 91 | - $query = Category::find(); | ||
| 92 | - $query->byAlias($alias); | 91 | + $query = Category::find() |
| 92 | + ->with('categoryName') | ||
| 93 | + ->andFilterWhere(['alias' => $alias]); | ||
| 93 | if (($model = $query->one()) !== null) { | 94 | if (($model = $query->one()) !== null) { |
| 94 | return $model; | 95 | return $model; |
| 95 | } else { | 96 | } else { |
common/modules/product/models/Product.php
| @@ -22,7 +22,7 @@ use yii\db\ActiveQuery; | @@ -22,7 +22,7 @@ use yii\db\ActiveQuery; | ||
| 22 | */ | 22 | */ |
| 23 | class Product extends \yii\db\ActiveRecord | 23 | class Product extends \yii\db\ActiveRecord |
| 24 | { | 24 | { |
| 25 | - /** @var array $variants */ | 25 | + /** @var array $_variants */ |
| 26 | public $_variants = []; | 26 | public $_variants = []; |
| 27 | 27 | ||
| 28 | /** @var array $_images */ | 28 | /** @var array $_images */ |
common/modules/product/widgets/brandsCarouselWidget.php
| @@ -13,7 +13,7 @@ class brandsCarouselWidget extends Widget { | @@ -13,7 +13,7 @@ class brandsCarouselWidget extends Widget { | ||
| 13 | } | 13 | } |
| 14 | 14 | ||
| 15 | public function run() { | 15 | public function run() { |
| 16 | - $brands = Brand::find()->all(); | 16 | + $brands = Brand::find()->with('brandName')->all(); |
| 17 | return $this->render('brandsCarousel', [ | 17 | return $this->render('brandsCarousel', [ |
| 18 | 'brands' => $brands, | 18 | 'brands' => $brands, |
| 19 | ]); | 19 | ]); |
common/modules/product/widgets/catalogSubmenuWidget.php
| @@ -15,12 +15,22 @@ class catalogSubmenuWidget extends Widget { | @@ -15,12 +15,22 @@ class catalogSubmenuWidget extends Widget { | ||
| 15 | } | 15 | } |
| 16 | 16 | ||
| 17 | public function run() { | 17 | public function run() { |
| 18 | + /** @var Category $rootCategory */ | ||
| 18 | $rootCategory = Category::findOne($this->root_id); | 19 | $rootCategory = Category::findOne($this->root_id); |
| 20 | + | ||
| 21 | + $categories = $rootCategory->getAllChildren(2, [], 'categoryName')->all(); | ||
| 22 | + $populary = []; | ||
| 23 | + foreach($categories as $category) { | ||
| 24 | + if ($category->populary) { | ||
| 25 | + $populary[] = $category; | ||
| 26 | + } | ||
| 27 | + } | ||
| 28 | + | ||
| 19 | return $this->render('submenu', [ | 29 | return $this->render('submenu', [ |
| 20 | 'rootCategory' => $rootCategory, | 30 | 'rootCategory' => $rootCategory, |
| 21 | 'rootClass' => $this->rootClass, | 31 | 'rootClass' => $this->rootClass, |
| 22 | - 'populary' => $rootCategory->getAllChildren(2, ['populary' => true])->all(), | ||
| 23 | - 'items' => $rootCategory->getAllChildrenTree(2) | 32 | + 'populary' => $populary, |
| 33 | + 'items' => $rootCategory->buildTree($categories, $rootCategory->category_id) | ||
| 24 | ]); | 34 | ]); |
| 25 | } | 35 | } |
| 26 | } | 36 | } |
| 27 | \ No newline at end of file | 37 | \ No newline at end of file |
common/modules/product/widgets/views/submenu.php
| 1 | <div class="menu_item"> | 1 | <div class="menu_item"> |
| 2 | - <?= \yii\helpers\Html::a($rootCategory->name, ['catalog/category', 'alias' => $rootCategory->alias], ['class' => 'submenu_button '. $rootClass])?> | 2 | + <?= \yii\helpers\Html::a($rootCategory->categoryName->value, ['catalog/category', 'alias' => $rootCategory->alias], ['class' => 'submenu_button '. $rootClass])?> |
| 3 | <div class="submenu"> | 3 | <div class="submenu"> |
| 4 | <ul class="categories"> | 4 | <ul class="categories"> |
| 5 | <li class="sub_cat"><span>Популярные категории</span> | 5 | <li class="sub_cat"><span>Популярные категории</span> |
| @@ -15,7 +15,7 @@ | @@ -15,7 +15,7 @@ | ||
| 15 | <img valign="top" src="<?= $_item->image?>"> | 15 | <img valign="top" src="<?= $_item->image?>"> |
| 16 | <?php endif?> | 16 | <?php endif?> |
| 17 | </div> | 17 | </div> |
| 18 | - <div class="title"><?= $_item->name?></div> | 18 | + <div class="title"><?= $_item->categoryName->value?></div> |
| 19 | </a></div> | 19 | </a></div> |
| 20 | <?php endforeach?> | 20 | <?php endforeach?> |
| 21 | </div> | 21 | </div> |
| @@ -24,7 +24,7 @@ | @@ -24,7 +24,7 @@ | ||
| 24 | </li> | 24 | </li> |
| 25 | <?php foreach($items as $item) :?> | 25 | <?php foreach($items as $item) :?> |
| 26 | <li class="sub_cat"> | 26 | <li class="sub_cat"> |
| 27 | - <span><?= $item['item']->name?></span> | 27 | + <span><?= $item['item']->categoryName->value?></span> |
| 28 | <?php if(!empty($item['children'])) :?> | 28 | <?php if(!empty($item['children'])) :?> |
| 29 | <div class="sub_cat_content"> | 29 | <div class="sub_cat_content"> |
| 30 | <div class="content_items"> | 30 | <div class="content_items"> |
| @@ -34,17 +34,17 @@ | @@ -34,17 +34,17 @@ | ||
| 34 | <?php if (empty($_item['item']->image)) :?> | 34 | <?php if (empty($_item['item']->image)) :?> |
| 35 | <img valign="top" src="/images/no_photo.png"> | 35 | <img valign="top" src="/images/no_photo.png"> |
| 36 | <?php else :?> | 36 | <?php else :?> |
| 37 | - <img valign="top" src="<?= $_item['item']->image?>" alt="<?= $_item['item']->name?>"> | 37 | + <img valign="top" src="<?= $_item['item']->image?>" alt="<?= $_item['item']->categoryName->value?>"> |
| 38 | <?php endif?> | 38 | <?php endif?> |
| 39 | </div> | 39 | </div> |
| 40 | - <div class="title"><?= $_item['item']->name?></div> | 40 | + <div class="title"><?= $_item['item']->categoryName->value?></div> |
| 41 | </a></div> | 41 | </a></div> |
| 42 | <?php endforeach?> | 42 | <?php endforeach?> |
| 43 | </div> | 43 | </div> |
| 44 | </div> | 44 | </div> |
| 45 | <?php endif?> | 45 | <?php endif?> |
| 46 | </li> | 46 | </li> |
| 47 | - <?php endforeach?> | 47 | + <?php endforeach ?> |
| 48 | </ul> | 48 | </ul> |
| 49 | </div> | 49 | </div> |
| 50 | </div> | 50 | </div> |
common/modules/relation/controllers/ManageController.php
| @@ -4,8 +4,12 @@ namespace common\modules\relation\controllers; | @@ -4,8 +4,12 @@ namespace common\modules\relation\controllers; | ||
| 4 | 4 | ||
| 5 | use common\modules\rubrication\models\TaxOption; | 5 | use common\modules\rubrication\models\TaxOption; |
| 6 | use yii\base\Exception; | 6 | use yii\base\Exception; |
| 7 | +use yii\db\ActiveQuery; | ||
| 8 | +use yii\helpers\ArrayHelper; | ||
| 9 | +use yii\web\Response; | ||
| 7 | use yii\data\ActiveDataProvider; | 10 | use yii\data\ActiveDataProvider; |
| 8 | use yii\db\ActiveRecord; | 11 | use yii\db\ActiveRecord; |
| 12 | +use yii\filters\ContentNegotiator; | ||
| 9 | use yii\web\Controller; | 13 | use yii\web\Controller; |
| 10 | use Yii; | 14 | use Yii; |
| 11 | use common\modules\relation\relationHelper; | 15 | use common\modules\relation\relationHelper; |
| @@ -18,6 +22,20 @@ use yii\web\NotFoundHttpException; | @@ -18,6 +22,20 @@ use yii\web\NotFoundHttpException; | ||
| 18 | */ | 22 | */ |
| 19 | class ManageController extends Controller | 23 | class ManageController extends Controller |
| 20 | { | 24 | { |
| 25 | + public function behaviors() | ||
| 26 | + { | ||
| 27 | + return [ | ||
| 28 | + /*'bootstrap' => [ | ||
| 29 | + 'class' => ContentNegotiator::className(), | ||
| 30 | + 'only' => ['autocomplete'], | ||
| 31 | + 'formats' => [ 'application/json' => Response::FORMAT_JSON], | ||
| 32 | + 'languages' => [ | ||
| 33 | + 'ru', | ||
| 34 | + ], | ||
| 35 | + ],*/ | ||
| 36 | + ]; | ||
| 37 | + } | ||
| 38 | + | ||
| 21 | /** | 39 | /** |
| 22 | * Renders the relations view | 40 | * Renders the relations view |
| 23 | * @return string | 41 | * @return string |
| @@ -66,14 +84,6 @@ class ManageController extends Controller | @@ -66,14 +84,6 @@ class ManageController extends Controller | ||
| 66 | 84 | ||
| 67 | $model = new $relation['via']['model']; | 85 | $model = new $relation['via']['model']; |
| 68 | 86 | ||
| 69 | - $query1 = $relation['entity1']['model']::find(); | ||
| 70 | - if (!empty($relation['entity1']['where'])) | ||
| 71 | - $query1->where($relation['entity1']['where']); | ||
| 72 | - | ||
| 73 | - $query2 = $relation['entity2']['model']::find(); | ||
| 74 | - if (!empty($relation['entity2']['where'])) | ||
| 75 | - $query2->where($relation['entity2']['where']); | ||
| 76 | - | ||
| 77 | if ($model->load(Yii::$app->request->post())) { | 87 | if ($model->load(Yii::$app->request->post())) { |
| 78 | $model->save(); | 88 | $model->save(); |
| 79 | return $this->redirect(['pars', 'relation' => $relation_key]); | 89 | return $this->redirect(['pars', 'relation' => $relation_key]); |
| @@ -81,8 +91,8 @@ class ManageController extends Controller | @@ -81,8 +91,8 @@ class ManageController extends Controller | ||
| 81 | } else { | 91 | } else { |
| 82 | return $this->render('create', [ | 92 | return $this->render('create', [ |
| 83 | 'model' => $model, | 93 | 'model' => $model, |
| 84 | - 'items1' => $query1->all(), | ||
| 85 | - 'items2' => $query2->all(), | 94 | +// 'items1' => $query1->limit(100)->all(), |
| 95 | +// 'items2' => $query2->asArray()->all(), | ||
| 86 | 'relation_key' => $relation_key, | 96 | 'relation_key' => $relation_key, |
| 87 | 'relation' => $relation, | 97 | 'relation' => $relation, |
| 88 | ]); | 98 | ]); |
| @@ -103,14 +113,6 @@ class ManageController extends Controller | @@ -103,14 +113,6 @@ class ManageController extends Controller | ||
| 103 | 113 | ||
| 104 | $model = $this->findModel($relation_key, $id1, $id2); | 114 | $model = $this->findModel($relation_key, $id1, $id2); |
| 105 | 115 | ||
| 106 | - $query1 = $relation['entity1']['model']::find(); | ||
| 107 | - if (!empty($relation['entity1']['where'])) | ||
| 108 | - $query1->where($relation['entity1']['where']); | ||
| 109 | - | ||
| 110 | - $query2 = $relation['entity2']['model']::find(); | ||
| 111 | - if (!empty($relation['entity2']['where'])) | ||
| 112 | - $query2->where($relation['entity2']['where']); | ||
| 113 | - | ||
| 114 | if ($model->load(Yii::$app->request->post())) { | 116 | if ($model->load(Yii::$app->request->post())) { |
| 115 | $connection = Yii::$app->getDb(); | 117 | $connection = Yii::$app->getDb(); |
| 116 | $transaction = $connection->beginTransaction(); | 118 | $transaction = $connection->beginTransaction(); |
| @@ -137,8 +139,8 @@ class ManageController extends Controller | @@ -137,8 +139,8 @@ class ManageController extends Controller | ||
| 137 | } else { | 139 | } else { |
| 138 | return $this->render('update', [ | 140 | return $this->render('update', [ |
| 139 | 'model' => $model, | 141 | 'model' => $model, |
| 140 | - 'items1' => $query1->all(), | ||
| 141 | - 'items2' => $query2->all(), | 142 | + 'value1' => $model->entity1->getAttribute($relation['entity1']['listField']), |
| 143 | + 'value2' => $model->entity2->getAttribute($relation['entity2']['listField']), | ||
| 142 | 'relation_key' => $relation_key, | 144 | 'relation_key' => $relation_key, |
| 143 | 'relation' => $relation, | 145 | 'relation' => $relation, |
| 144 | ]); | 146 | ]); |
| @@ -178,6 +180,28 @@ class ManageController extends Controller | @@ -178,6 +180,28 @@ class ManageController extends Controller | ||
| 178 | return $this->redirect(['pars', 'relation' => $relation_key]); | 180 | return $this->redirect(['pars', 'relation' => $relation_key]); |
| 179 | } | 181 | } |
| 180 | 182 | ||
| 183 | + public function actionAutocomplete() { | ||
| 184 | + $relation_key = Yii::$app->request->get('relation_key'); | ||
| 185 | + $entity = Yii::$app->request->get('entity'); | ||
| 186 | + $term = Yii::$app->request->get('term'); | ||
| 187 | + $relation_key = strtolower($relation_key); | ||
| 188 | + $relation = relationHelper::getRelation($relation_key); | ||
| 189 | + | ||
| 190 | + /** @var ActiveQuery $query */ | ||
| 191 | + $query = $relation[$entity]['model']::find(); | ||
| 192 | + | ||
| 193 | + if (!empty($relation[$entity]['searchJoin'])) { | ||
| 194 | + $query->innerJoinWith($relation[$entity]['searchJoin']); | ||
| 195 | + } | ||
| 196 | + if (!empty($relation[$entity]['where'])) { | ||
| 197 | + $query->where($relation[$entity]['where']); | ||
| 198 | + } | ||
| 199 | + $query->where(['ilike', $relation[$entity]['searchField'], $term]); | ||
| 200 | + | ||
| 201 | + print json_encode(ArrayHelper::map($query->limit(50)->all(), $relation[$entity]['key'], $relation[$entity]['listField'])); | ||
| 202 | + exit; | ||
| 203 | + } | ||
| 204 | + | ||
| 181 | /** | 205 | /** |
| 182 | * Finds the based model for relation on its primaries keys value. | 206 | * Finds the based model for relation on its primaries keys value. |
| 183 | * If the model is not found, a 404 HTTP exception will be thrown. | 207 | * If the model is not found, a 404 HTTP exception will be thrown. |
common/modules/relation/views/manage/_form.php
| @@ -3,6 +3,7 @@ | @@ -3,6 +3,7 @@ | ||
| 3 | use yii\helpers\Html; | 3 | use yii\helpers\Html; |
| 4 | use yii\widgets\ActiveForm; | 4 | use yii\widgets\ActiveForm; |
| 5 | use yii\helpers\ArrayHelper; | 5 | use yii\helpers\ArrayHelper; |
| 6 | +use yii\jui\AutoComplete; | ||
| 6 | 7 | ||
| 7 | /* @var $this yii\web\View */ | 8 | /* @var $this yii\web\View */ |
| 8 | /* @var $model common\modules\rubrication\models\TaxGroup */ | 9 | /* @var $model common\modules\rubrication\models\TaxGroup */ |
| @@ -13,19 +14,40 @@ use yii\helpers\ArrayHelper; | @@ -13,19 +14,40 @@ use yii\helpers\ArrayHelper; | ||
| 13 | 14 | ||
| 14 | <?php $form = ActiveForm::begin(); ?> | 15 | <?php $form = ActiveForm::begin(); ?> |
| 15 | 16 | ||
| 16 | - <?= $form->field($model, $relation['entity1']['linked_key'])->dropDownList( | ||
| 17 | - ArrayHelper::map($items1, $relation['entity1']['key'], $relation['entity1']['listField']), | ||
| 18 | - [ | ||
| 19 | - 'prompt' => Yii::t('relation', 'Select value'), | 17 | + <?= $form->field($model, $relation['entity1']['linked_key'])->widget( |
| 18 | + AutoComplete::className(), [ | ||
| 19 | +// 'model' => \common\modules\relation\models\Relation::className(), | ||
| 20 | + 'clientOptions' => [ | ||
| 21 | + 'source' => \yii\helpers\Url::to(['manage/autocomplete/', 'relation_key' => $relation_key, 'entity' => 'entity1']), | ||
| 22 | + 'dataType' => 'json', | ||
| 23 | + 'autoFill' => true, | ||
| 24 | + 'minLength' => '2', | ||
| 25 | + ], | ||
| 26 | + 'options' => [ | ||
| 27 | + 'value' => empty($value1) ? '' : $value1, | ||
| 28 | + 'class'=>'form-control', | ||
| 29 | + 'placeholder' => $relation['entity1']['label'] | ||
| 20 | ] | 30 | ] |
| 21 | - ) ?> | ||
| 22 | - | ||
| 23 | - <?= $form->field($model, $relation['entity2']['linked_key'])->dropDownList( | ||
| 24 | - ArrayHelper::map($items2, $relation['entity2']['key'], $relation['entity2']['listField']), | ||
| 25 | - [ | ||
| 26 | - 'prompt' => Yii::t('relation', 'Select value'), | 31 | + ]); |
| 32 | + ?> | ||
| 33 | + | ||
| 34 | + <?= $form->field($model, $relation['entity2']['linked_key'])->widget( | ||
| 35 | + AutoComplete::className(), [ | ||
| 36 | +// 'model' => \common\modules\relation\models\Relation::className(), | ||
| 37 | + 'clientOptions' => [ | ||
| 38 | + 'source' => \yii\helpers\Url::to(['manage/autocomplete/', 'relation_key' => $relation_key, 'entity' => 'entity2']), | ||
| 39 | + 'dataType' => 'json', | ||
| 40 | + 'autoFill' => true, | ||
| 41 | + 'minLength' => '2', | ||
| 42 | + 'allowClear' => true, | ||
| 43 | + ], | ||
| 44 | + 'options' => [ | ||
| 45 | + 'value' => empty($value2) ? '' : $value2, | ||
| 46 | + 'class'=>'form-control', | ||
| 47 | + 'placeholder' => $relation['entity2']['label'] | ||
| 27 | ] | 48 | ] |
| 28 | - ) ?> | 49 | + ]); |
| 50 | + ?> | ||
| 29 | 51 | ||
| 30 | <div class="form-group"> | 52 | <div class="form-group"> |
| 31 | <?= Html::submitButton($model->isNewRecord ? Yii::t('relation', 'Create') : Yii::t('relation', 'Update'), ['class' => $model->isNewRecord ? 'btn btn-success' : 'btn btn-primary']) ?> | 53 | <?= Html::submitButton($model->isNewRecord ? Yii::t('relation', 'Create') : Yii::t('relation', 'Update'), ['class' => $model->isNewRecord ? 'btn btn-success' : 'btn btn-primary']) ?> |
common/modules/relation/views/manage/create.php
| @@ -2,7 +2,6 @@ | @@ -2,7 +2,6 @@ | ||
| 2 | 2 | ||
| 3 | use yii\helpers\Html; | 3 | use yii\helpers\Html; |
| 4 | 4 | ||
| 5 | - | ||
| 6 | /* @var $this yii\web\View */ | 5 | /* @var $this yii\web\View */ |
| 7 | 6 | ||
| 8 | $this->title = Yii::t('relation', $relation['name']); | 7 | $this->title = Yii::t('relation', $relation['name']); |
| @@ -16,8 +15,6 @@ $this->params['breadcrumbs'][] = $this->title; | @@ -16,8 +15,6 @@ $this->params['breadcrumbs'][] = $this->title; | ||
| 16 | 15 | ||
| 17 | <?= $this->render('_form', [ | 16 | <?= $this->render('_form', [ |
| 18 | 'model' => $model, | 17 | 'model' => $model, |
| 19 | - 'items1' => $items1, | ||
| 20 | - 'items2' => $items2, | ||
| 21 | 'relation_key' => $relation_key, | 18 | 'relation_key' => $relation_key, |
| 22 | 'relation' => $relation, | 19 | 'relation' => $relation, |
| 23 | ]) ?> | 20 | ]) ?> |
common/modules/relation/views/manage/update.php
| @@ -16,8 +16,8 @@ $this->params['breadcrumbs'][] = $this->title; | @@ -16,8 +16,8 @@ $this->params['breadcrumbs'][] = $this->title; | ||
| 16 | 16 | ||
| 17 | <?= $this->render('_form', [ | 17 | <?= $this->render('_form', [ |
| 18 | 'model' => $model, | 18 | 'model' => $model, |
| 19 | - 'items1' => $items1, | ||
| 20 | - 'items2' => $items2, | 19 | + 'value1' => $value1, |
| 20 | + 'value2' => $value2, | ||
| 21 | 'relation_key' => $relation_key, | 21 | 'relation_key' => $relation_key, |
| 22 | 'relation' => $relation, | 22 | 'relation' => $relation, |
| 23 | ]) ?> | 23 | ]) ?> |
common/modules/rubrication/models/TaxOption.php
| @@ -166,7 +166,7 @@ class TaxOption extends \yii\db\ActiveRecord | @@ -166,7 +166,7 @@ class TaxOption extends \yii\db\ActiveRecord | ||
| 166 | public function getValueRenderFlash() | 166 | public function getValueRenderFlash() |
| 167 | { | 167 | { |
| 168 | $valueClass = $this->getValueModelName(); | 168 | $valueClass = $this->getValueModelName(); |
| 169 | - $value = $this->getValue()->one(); | 169 | + $value = $this->value; |
| 170 | if ($valueClass && method_exists($valueClass, 'getValueRenderFlash')) { | 170 | if ($valueClass && method_exists($valueClass, 'getValueRenderFlash')) { |
| 171 | return $valueClass::getValueRenderFlash($value); | 171 | return $valueClass::getValueRenderFlash($value); |
| 172 | } elseif(!empty($value)) { | 172 | } elseif(!empty($value)) { |
| @@ -181,7 +181,7 @@ class TaxOption extends \yii\db\ActiveRecord | @@ -181,7 +181,7 @@ class TaxOption extends \yii\db\ActiveRecord | ||
| 181 | public function getValueRenderHTML() | 181 | public function getValueRenderHTML() |
| 182 | { | 182 | { |
| 183 | $valueClass = $this->getValueModelName(); | 183 | $valueClass = $this->getValueModelName(); |
| 184 | - $value = $this->getValue()->one(); | 184 | + $value = $this->value; |
| 185 | if ($valueClass && method_exists($valueClass, 'getValueRenderHTML')) { | 185 | if ($valueClass && method_exists($valueClass, 'getValueRenderHTML')) { |
| 186 | return $valueClass::getValueRenderHTML($value); | 186 | return $valueClass::getValueRenderHTML($value); |
| 187 | } else { | 187 | } else { |
| @@ -219,7 +219,7 @@ class TaxOption extends \yii\db\ActiveRecord | @@ -219,7 +219,7 @@ class TaxOption extends \yii\db\ActiveRecord | ||
| 219 | // } | 219 | // } |
| 220 | 220 | ||
| 221 | private function getValueModelName() { | 221 | private function getValueModelName() { |
| 222 | - $group = $this->getTaxGroup()->one(); | 222 | + $group = $this->taxGroup; |
| 223 | $valueClass = '\common\modules\rubrication\models\TaxValue'. ucfirst($group->module); | 223 | $valueClass = '\common\modules\rubrication\models\TaxValue'. ucfirst($group->module); |
| 224 | return class_exists($valueClass) ? $valueClass : FALSE; | 224 | return class_exists($valueClass) ? $valueClass : FALSE; |
| 225 | } | 225 | } |
frontend/controllers/CatalogController.php
| @@ -12,6 +12,7 @@ use common\modules\product\models\ProductSearch; | @@ -12,6 +12,7 @@ use common\modules\product\models\ProductSearch; | ||
| 12 | use common\modules\product\models\ProductVariant; | 12 | use common\modules\product\models\ProductVariant; |
| 13 | use common\modules\rubrication\models\TaxGroup; | 13 | use common\modules\rubrication\models\TaxGroup; |
| 14 | use common\modules\rubrication\models\TaxOption; | 14 | use common\modules\rubrication\models\TaxOption; |
| 15 | +use common\modules\rubrication\models\TaxValueString; | ||
| 15 | use yii\data\ActiveDataProvider; | 16 | use yii\data\ActiveDataProvider; |
| 16 | use yii\data\Pagination; | 17 | use yii\data\Pagination; |
| 17 | use yii\data\Sort; | 18 | use yii\data\Sort; |
| @@ -64,6 +65,7 @@ class CatalogController extends \yii\web\Controller | @@ -64,6 +65,7 @@ class CatalogController extends \yii\web\Controller | ||
| 64 | $all_count = $query->count(); | 65 | $all_count = $query->count(); |
| 65 | 66 | ||
| 66 | $brandsQuery = Brand::find() | 67 | $brandsQuery = Brand::find() |
| 68 | + ->innerJoinWith('brandName') | ||
| 67 | ->innerJoinWith('products') | 69 | ->innerJoinWith('products') |
| 68 | ->innerJoin(ProductCategory::tableName(), ProductCategory::tableName() .'.product_id='. Product::tableName() .'.product_id') | 70 | ->innerJoin(ProductCategory::tableName(), ProductCategory::tableName() .'.product_id='. Product::tableName() .'.product_id') |
| 69 | ->where([ | 71 | ->where([ |
| @@ -71,7 +73,7 @@ class CatalogController extends \yii\web\Controller | @@ -71,7 +73,7 @@ class CatalogController extends \yii\web\Controller | ||
| 71 | ]) | 73 | ]) |
| 72 | ->groupBy(Brand::tableName() .'.brand_id'); | 74 | ->groupBy(Brand::tableName() .'.brand_id'); |
| 73 | $brands = $brandsQuery->all(); | 75 | $brands = $brandsQuery->all(); |
| 74 | - $brands_count = $brandsQuery->count(); | 76 | + $brands_count = count($brands); // $brandsQuery->count(); |
| 75 | 77 | ||
| 76 | $optionsQuery = TaxOption::find() | 78 | $optionsQuery = TaxOption::find() |
| 77 | ->select([ | 79 | ->select([ |
| @@ -80,6 +82,7 @@ class CatalogController extends \yii\web\Controller | @@ -80,6 +82,7 @@ class CatalogController extends \yii\web\Controller | ||
| 80 | ]) | 82 | ]) |
| 81 | ->innerJoin(ProductOption::tableName(), ProductOption::tableName() .'.option_id='. TaxOption::tableName() .'.tax_option_id') | 83 | ->innerJoin(ProductOption::tableName(), ProductOption::tableName() .'.option_id='. TaxOption::tableName() .'.tax_option_id') |
| 82 | ->innerJoin(ProductCategory::tableName(), ProductCategory::tableName() .'.product_id='. ProductOption::tableName() .'.product_id') | 84 | ->innerJoin(ProductCategory::tableName(), ProductCategory::tableName() .'.product_id='. ProductOption::tableName() .'.product_id') |
| 85 | + ->innerJoinWith('group') | ||
| 83 | ->where([ | 86 | ->where([ |
| 84 | ProductCategory::tableName() .'.category_id' => $category->category_id | 87 | ProductCategory::tableName() .'.category_id' => $category->category_id |
| 85 | ]) | 88 | ]) |
| @@ -133,12 +136,12 @@ class CatalogController extends \yii\web\Controller | @@ -133,12 +136,12 @@ class CatalogController extends \yii\web\Controller | ||
| 133 | foreach($options_alias as &$option_alias) { | 136 | foreach($options_alias as &$option_alias) { |
| 134 | $option_alias = "'". $option_alias ."'"; | 137 | $option_alias = "'". $option_alias ."'"; |
| 135 | } | 138 | } |
| 136 | - $group = TaxGroup::find()->where(['like', 'alias', $group_alias])->one(); | 139 | + /*$group = TaxGroup::find()->where(['like', 'alias', $group_alias])->one(); |
| 137 | if (!$group) { | 140 | if (!$group) { |
| 138 | continue; | 141 | continue; |
| 139 | - } | ||
| 140 | - $query->andWhere(Product::tableName() .'.product_id IN (SELECT product_id AS products 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) .'))'); | 142 | + }*/ |
| 141 | } | 143 | } |
| 144 | + $query->andWhere(Product::tableName() .'.product_id IN (SELECT product_id AS products 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) .'))'); | ||
| 142 | } | 145 | } |
| 143 | 146 | ||
| 144 | if (($_brands = \Yii::$app->request->get('brand')) != false && is_array($_brands) && count($_brands) > 0) { | 147 | if (($_brands = \Yii::$app->request->get('brand')) != false && is_array($_brands) && count($_brands) > 0) { |
| @@ -152,12 +155,17 @@ class CatalogController extends \yii\web\Controller | @@ -152,12 +155,17 @@ class CatalogController extends \yii\web\Controller | ||
| 152 | } | 155 | } |
| 153 | } | 156 | } |
| 154 | 157 | ||
| 155 | - $count = $query->count(); | 158 | + $query->with('variant'); |
| 159 | + $query->with('brand'); | ||
| 160 | + $query->with('categories'); | ||
| 161 | + $query->with('image'); | ||
| 156 | 162 | ||
| 163 | + $count = $query->count(); | ||
| 157 | $pages = new Pagination(['totalCount' => $count, 'pageSize' => $per_page]); | 164 | $pages = new Pagination(['totalCount' => $count, 'pageSize' => $per_page]); |
| 158 | $query->offset($pages->offset) | 165 | $query->offset($pages->offset) |
| 159 | ->orderBy($sort->orders) | 166 | ->orderBy($sort->orders) |
| 160 | ->limit($pages->limit); | 167 | ->limit($pages->limit); |
| 168 | + | ||
| 161 | $products = $query->all(); | 169 | $products = $query->all(); |
| 162 | 170 | ||
| 163 | return $this->render( | 171 | return $this->render( |
frontend/views/catalog/categories.php
| @@ -14,7 +14,7 @@ $this->params['breadcrumbs'][] = $this->title; | @@ -14,7 +14,7 @@ $this->params['breadcrumbs'][] = $this->title; | ||
| 14 | 14 | ||
| 15 | <div class="category_wrap_3_colum"><!-- 3 colons for items ================================== 1rst colum --> | 15 | <div class="category_wrap_3_colum"><!-- 3 colons for items ================================== 1rst colum --> |
| 16 | 16 | ||
| 17 | - <?php foreach($category->getAllChildrenTree(2) as $category) :?> | 17 | + <?php foreach($category->getAllChildrenTree(2, [], 'categoryName') as $category) :?> |
| 18 | <div class="wrap"> | 18 | <div class="wrap"> |
| 19 | <div class="cat_li_cont"> | 19 | <div class="cat_li_cont"> |
| 20 | <?php if (!empty($category['item']->image)) :?> | 20 | <?php if (!empty($category['item']->image)) :?> |
frontend/views/catalog/products.php
| @@ -2,11 +2,11 @@ | @@ -2,11 +2,11 @@ | ||
| 2 | /** @var $this \yii\web\View */ | 2 | /** @var $this \yii\web\View */ |
| 3 | /** @var $dataProvider \yii\data\ActiveDataProvider */ | 3 | /** @var $dataProvider \yii\data\ActiveDataProvider */ |
| 4 | 4 | ||
| 5 | -$this->title = $category->name; | 5 | +$this->title = $category->categoryName->value; |
| 6 | foreach($category->getParents()->all() as $parent) { | 6 | foreach($category->getParents()->all() as $parent) { |
| 7 | - $this->params['breadcrumbs'][] = ['label' => $parent->name, 'url' => ['catalog/category', 'alias' => $parent->alias]]; | 7 | + $this->params['breadcrumbs'][] = ['label' => $parent->categoryName->value, 'url' => ['catalog/category', 'alias' => $parent->alias]]; |
| 8 | } | 8 | } |
| 9 | -$this->params['breadcrumbs'][] = $category->name; | 9 | +$this->params['breadcrumbs'][] = $category->categoryName->value; |
| 10 | ?> | 10 | ?> |
| 11 | <script type="text/javascript"> | 11 | <script type="text/javascript"> |
| 12 | $(document).ready(function() { | 12 | $(document).ready(function() { |
| @@ -184,11 +184,11 @@ $this->params['breadcrumbs'][] = $category->name; | @@ -184,11 +184,11 @@ $this->params['breadcrumbs'][] = $category->name; | ||
| 184 | 184 | ||
| 185 | <!-- catalog list with all item cards --> | 185 | <!-- catalog list with all item cards --> |
| 186 | <div class="cat_p_catalog_list"> | 186 | <div class="cat_p_catalog_list"> |
| 187 | - <div class="title"><?= $category->name?> <span>(<?= $all_count?>)</span></div> | 187 | + <div class="title"><?= $category->categoryName->value?> <span>(<?= $all_count?>)</span></div> |
| 188 | 188 | ||
| 189 | <?php if (empty($products)) :?> | 189 | <?php if (empty($products)) :?> |
| 190 | <h2>По данному запросу товары не найдены.</h2><br> | 190 | <h2>По данному запросу товары не найдены.</h2><br> |
| 191 | - <p>Показать <a href="<?= \yii\helpers\Url::to(['catalog/category', 'alias' => $category->alias])?>">все товары из категории "<?= $category->name?>"</a></p> | 191 | + <p>Показать <a href="<?= \yii\helpers\Url::to(['catalog/category', 'alias' => $category->alias])?>">все товары из категории "<?= $category->categoryName->value?>"</a></p> |
| 192 | <?php else :?> | 192 | <?php else :?> |
| 193 | <!-- sort menu --> | 193 | <!-- sort menu --> |
| 194 | <div class="sort_menu"> | 194 | <div class="sort_menu"> |