Commit 6651017672469b3f2a03d3ab19bf0c59d67ffd5b

Authored by Alexey Boroda
1 parent 5d972c58

-Sitemap excluded empty filters

common/modules/rubrication/models/TaxOption.php
1 <?php 1 <?php
2 -  
3 -namespace common\modules\rubrication\models;  
4 -  
5 -use Yii;  
6 -use common\components\artboxtree\ArtboxTreeBehavior;  
7 -use yii\db\ActiveRecord;  
8 -  
9 -/**  
10 - * This is the model class for table "{{%tax_option}}".  
11 - *  
12 - * @property string $tax_option_id  
13 - * @property integer $tax_group_id  
14 - * @property integer $parent_id  
15 - * @property integer $tree  
16 - * @property string $path_int  
17 - * @property integer $depth  
18 - * @property string $alias  
19 - * @property integer $sort  
20 - * @property integer $default_value  
21 - * @property integer $name  
22 - * @property array $image  
23 - * @property string $synonym  
24 - *  
25 - * @property TaxEntityRelation[] $taxEntityRelations  
26 - * @property TaxGroup $taxGroup  
27 - * @property TaxOption $parent  
28 - * @property TaxOption[] $taxOptions  
29 - * @property TaxOptionToGroup[] $taxOptionToGroups  
30 - * @property TaxOptionToOption[] $taxOptionToOptions  
31 - * @property TaxOptionToOption[] $taxOptionToOptions0  
32 - * @property TaxValueFloat[] $taxValueFloats  
33 - * @property TaxValueInt[] $taxValueInts  
34 - * @property TaxValueString[] $taxValueStrings  
35 - * @property TaxValueText[] $taxValueTexts  
36 - */  
37 -class TaxOption extends \yii\db\ActiveRecord  
38 -{  
39 - public $_items_count;  
40 -  
41 - 2 +
  3 + namespace common\modules\rubrication\models;
  4 +
  5 + use common\modules\product\models\Product;
  6 + use Yii;
  7 + use common\components\artboxtree\ArtboxTreeBehavior;
  8 + use yii\db\ActiveQuery;
  9 + use yii\db\ActiveRecord;
  10 +
42 /** 11 /**
43 - * @inheritdoc 12 + * This is the model class for table "{{%tax_option}}".
  13 + *
  14 + * @property string $tax_option_id
  15 + * @property integer $tax_group_id
  16 + * @property integer $parent_id
  17 + * @property integer $tree
  18 + * @property string $path_int
  19 + * @property integer $depth
  20 + * @property string $alias
  21 + * @property integer $sort
  22 + * @property integer $default_value
  23 + * @property integer $name
  24 + * @property array $image
  25 + * @property string $synonym
  26 + * @property TaxEntityRelation[] $taxEntityRelations
  27 + * @property TaxGroup $taxGroup
  28 + * @property TaxOption $parent
  29 + * @property TaxOption[] $taxOptions
  30 + * @property TaxOptionToGroup[] $taxOptionToGroups
  31 + * @property TaxOptionToOption[] $taxOptionToOptions
  32 + * @property TaxOptionToOption[] $taxOptionToOptions0
  33 + * @property TaxValueFloat[] $taxValueFloats
  34 + * @property TaxValueInt[] $taxValueInts
  35 + * @property TaxValueString[] $taxValueStrings
  36 + * @property TaxValueText[] $taxValueTexts
44 */ 37 */
45 - public function behaviors() 38 + class TaxOption extends \yii\db\ActiveRecord
46 { 39 {
47 - return [  
48 - 'artboxtree' => [  
49 - 'class' => ArtboxTreeBehavior::className(),  
50 - 'keyNameGroup' => 'tax_group_id',  
51 - ],  
52 - 'slug' => [  
53 - 'class' => 'common\behaviors\Slug',  
54 - 'in_attribute' => 'name',  
55 - 'out_attribute' => 'alias',  
56 - 'translit' => true  
57 - ],  
58 -  
59 - ];  
60 - }  
61 - 40 + public $_items_count;
  41 +
62 /** 42 /**
63 - * @inheritdoc  
64 - */  
65 - public static function tableName()  
66 - {  
67 - return '{{%tax_option}}';  
68 - }  
69 -  
70 - /**  
71 - * @inheritdoc  
72 - */  
73 - public function rules()  
74 - {  
75 - return [  
76 - [['tax_group_id','name'], 'required'],  
77 - [['tax_group_id', 'parent_id', 'sort', 'default_value'], 'integer'],  
78 - [['image','alias', 'value', 'synonym'], 'string', 'max' => 255],  
79 - [['tax_group_id'], 'exist', 'skipOnError' => true, 'targetClass' => TaxGroup::className(), 'targetAttribute' => ['tax_group_id' => 'tax_group_id']],  
80 - ];  
81 - }  
82 -  
83 - /**  
84 - * @inheritdoc  
85 - */  
86 - public function attributeLabels()  
87 - {  
88 - return [  
89 - 'tax_option_id' => Yii::t('app', 'Tax Option ID'),  
90 - 'tax_group_id' => Yii::t('app', 'Tax Group ID'),  
91 - 'parent_id' => Yii::t('app', 'Parent ID'),  
92 - 'alias' => Yii::t('app', 'Alias'),  
93 - 'sort' => Yii::t('app', 'Sort'),  
94 - 'default_value' => Yii::t('app', 'Default Value'),  
95 - 'image' => Yii::t('product', 'Image'),  
96 - 'synonym' => Yii::t('product', 'ะกะธะฝะพะฝะธะผ'),  
97 - ];  
98 - }  
99 -  
100 - public static function find() {  
101 - return new TaxOptionQuery(get_called_class());  
102 - }  
103 -  
104 - /**  
105 - * @return \yii\db\ActiveQuery  
106 - */  
107 - public function getTaxEntityRelations()  
108 - {  
109 - return $this->hasMany(TaxEntityRelation::className(), ['tax_option_id' => 'tax_option_id'])->inverseOf('taxOption');  
110 - }  
111 -  
112 -  
113 - /**  
114 - * @return \yii\db\ActiveQuery  
115 - */  
116 - public function getGroup()  
117 - {  
118 - return $this->getTaxGroup();  
119 - }  
120 -  
121 - /**  
122 - * @return \yii\db\ActiveQuery  
123 - */  
124 - public function getTaxGroup()  
125 - {  
126 - return $this->hasOne(TaxGroup::className(), ['tax_group_id' => 'tax_group_id'])->inverseOf('taxOptions');  
127 - }  
128 -  
129 - /**  
130 - * @return \yii\db\ActiveQuery  
131 - */  
132 - public function getTaxOptions()  
133 - {  
134 - return $this->hasMany(TaxOption::className(), ['parent_id' => 'tax_option_id'])->inverseOf('parent');  
135 - }  
136 -  
137 - /**  
138 - * @return \yii\db\ActiveQuery  
139 - */  
140 - public function getTaxOptionToGroups()  
141 - {  
142 - return $this->hasMany(TaxOptionToGroup::className(), ['tax_option_id' => 'tax_option_id'])->inverseOf('taxOption');  
143 - }  
144 -  
145 - /**  
146 - * @return \yii\db\ActiveQuery  
147 - */  
148 - public function getTaxOptionToOptions()  
149 - {  
150 - return $this->hasMany(TaxOptionToOption::className(), ['tax_option1_id' => 'tax_option_id'])->inverseOf('taxOption1');  
151 - }  
152 -  
153 - /**  
154 - * @return \yii\db\ActiveQuery  
155 - */  
156 - public function getTaxOptionToOptions0()  
157 - {  
158 - return $this->hasMany(TaxOptionToOption::className(), ['tax_option2_id' => 'tax_option_id'])->inverseOf('taxOption2');  
159 - }  
160 -  
161 -  
162 - public function getTaxValueString(){  
163 - return $this->name;  
164 - }  
165 -  
166 -  
167 - /**  
168 - */  
169 - public function getValue()  
170 - {  
171 - return $this->name;  
172 - }  
173 - public function setValue($value){  
174 - return $this->name = $value;  
175 - }  
176 - /**  
177 - */  
178 - public function getValueRenderFlash()  
179 - {  
180 - return $this->name;  
181 - }  
182 -  
183 - /**  
184 - */  
185 - public function getValueRenderHTML()  
186 - {  
187 - return $this->name;  
188 - }  
189 -  
190 -  
191 -  
192 - /**  
193 - * @return \yii\db\ActiveQuery  
194 - */  
195 - public function getValues()  
196 - {  
197 - if ($valueClass = $this->getValueModelName())  
198 - return $this->hasMany($valueClass, ['tax_option_id' => 'tax_option_id'])->inverseOf('taxOption')->cascadeOnDelete();  
199 - }  
200 -  
201 - public function beforeSave($insert)  
202 - {  
203 - if (parent::beforeSave($insert)) {  
204 -  
205 - if (empty($this->parent_id))  
206 - $this->parent_id = 0;  
207 -  
208 -  
209 -  
210 - return true;  
211 - }  
212 - return false;  
213 - }  
214 -  
215 - public function getImageFile() {  
216 - return empty($this->image) ? null : Yii::getAlias('@imagesDir/tax_option/'. $this->image);  
217 - }  
218 -  
219 - public function getImageUrl()  
220 - {  
221 - return empty($this->image) ? null : Yii::getAlias('@imagesUrl/tax_option/' . $this->image); 43 + * @inheritdoc
  44 + */
  45 + public function behaviors()
  46 + {
  47 + return [
  48 + 'artboxtree' => [
  49 + 'class' => ArtboxTreeBehavior::className(),
  50 + 'keyNameGroup' => 'tax_group_id',
  51 + ],
  52 + 'slug' => [
  53 + 'class' => 'common\behaviors\Slug',
  54 + 'in_attribute' => 'name',
  55 + 'out_attribute' => 'alias',
  56 + 'translit' => true,
  57 + ],
  58 +
  59 + ];
  60 + }
  61 +
  62 + /**
  63 + * @inheritdoc
  64 + */
  65 + public static function tableName()
  66 + {
  67 + return '{{%tax_option}}';
  68 + }
  69 +
  70 + /**
  71 + * @inheritdoc
  72 + */
  73 + public function rules()
  74 + {
  75 + return [
  76 + [
  77 + [
  78 + 'tax_group_id',
  79 + 'name',
  80 + ],
  81 + 'required',
  82 + ],
  83 + [
  84 + [
  85 + 'tax_group_id',
  86 + 'parent_id',
  87 + 'sort',
  88 + 'default_value',
  89 + ],
  90 + 'integer',
  91 + ],
  92 + [
  93 + [
  94 + 'image',
  95 + 'alias',
  96 + 'value',
  97 + 'synonym',
  98 + ],
  99 + 'string',
  100 + 'max' => 255,
  101 + ],
  102 + [
  103 + [ 'tax_group_id' ],
  104 + 'exist',
  105 + 'skipOnError' => true,
  106 + 'targetClass' => TaxGroup::className(),
  107 + 'targetAttribute' => [ 'tax_group_id' => 'tax_group_id' ],
  108 + ],
  109 + ];
  110 + }
  111 +
  112 + /**
  113 + * @inheritdoc
  114 + */
  115 + public function attributeLabels()
  116 + {
  117 + return [
  118 + 'tax_option_id' => Yii::t('app', 'Tax Option ID'),
  119 + 'tax_group_id' => Yii::t('app', 'Tax Group ID'),
  120 + 'parent_id' => Yii::t('app', 'Parent ID'),
  121 + 'alias' => Yii::t('app', 'Alias'),
  122 + 'sort' => Yii::t('app', 'Sort'),
  123 + 'default_value' => Yii::t('app', 'Default Value'),
  124 + 'image' => Yii::t('product', 'Image'),
  125 + 'synonym' => Yii::t('product', 'ะกะธะฝะพะฝะธะผ'),
  126 + ];
  127 + }
  128 +
  129 + public static function find()
  130 + {
  131 + return new TaxOptionQuery(get_called_class());
  132 + }
  133 +
  134 + /**
  135 + * @return \yii\db\ActiveQuery
  136 + */
  137 + public function getTaxEntityRelations()
  138 + {
  139 + return $this->hasMany(TaxEntityRelation::className(), [ 'tax_option_id' => 'tax_option_id' ])
  140 + ->inverseOf('taxOption');
  141 + }
  142 +
  143 + /**
  144 + * @return \yii\db\ActiveQuery
  145 + */
  146 + public function getGroup()
  147 + {
  148 + return $this->getTaxGroup();
  149 + }
  150 +
  151 + /**
  152 + * @return \yii\db\ActiveQuery
  153 + */
  154 + public function getTaxGroup()
  155 + {
  156 + return $this->hasOne(TaxGroup::className(), [ 'tax_group_id' => 'tax_group_id' ])
  157 + ->inverseOf('taxOptions');
  158 + }
  159 +
  160 + /**
  161 + * @return \yii\db\ActiveQuery
  162 + */
  163 + public function getTaxOptions()
  164 + {
  165 + return $this->hasMany(TaxOption::className(), [ 'parent_id' => 'tax_option_id' ])
  166 + ->inverseOf('parent');
  167 + }
  168 +
  169 + /**
  170 + * @return \yii\db\ActiveQuery
  171 + */
  172 + public function getTaxOptionToGroups()
  173 + {
  174 + return $this->hasMany(TaxOptionToGroup::className(), [ 'tax_option_id' => 'tax_option_id' ])
  175 + ->inverseOf('taxOption');
  176 + }
  177 +
  178 + /**
  179 + * @return \yii\db\ActiveQuery
  180 + */
  181 + public function getTaxOptionToOptions()
  182 + {
  183 + return $this->hasMany(TaxOptionToOption::className(), [ 'tax_option1_id' => 'tax_option_id' ])
  184 + ->inverseOf('taxOption1');
  185 + }
  186 +
  187 + /**
  188 + * @return \yii\db\ActiveQuery
  189 + */
  190 + public function getTaxOptionToOptions0()
  191 + {
  192 + return $this->hasMany(TaxOptionToOption::className(), [ 'tax_option2_id' => 'tax_option_id' ])
  193 + ->inverseOf('taxOption2');
  194 + }
  195 +
  196 + public function getTaxValueString()
  197 + {
  198 + return $this->name;
  199 + }
  200 +
  201 + /**
  202 + */
  203 + public function getValue()
  204 + {
  205 + return $this->name;
  206 + }
  207 + public function setValue($value)
  208 + {
  209 + return $this->name = $value;
  210 + }
  211 + /**
  212 + */
  213 + public function getValueRenderFlash()
  214 + {
  215 + return $this->name;
  216 + }
  217 +
  218 + /**
  219 + */
  220 + public function getValueRenderHTML()
  221 + {
  222 + return $this->name;
  223 + }
  224 +
  225 + /**
  226 + * @return \yii\db\ActiveQuery
  227 + */
  228 + public function getValues()
  229 + {
  230 + if ($valueClass = $this->getValueModelName()) {
  231 + return $this->hasMany($valueClass, [ 'tax_option_id' => 'tax_option_id' ])
  232 + ->inverseOf('taxOption')
  233 + ->cascadeOnDelete();
  234 + }
  235 + }
  236 +
  237 + public function beforeSave($insert)
  238 + {
  239 + if (parent::beforeSave($insert)) {
  240 +
  241 + if (empty($this->parent_id)) {
  242 + $this->parent_id = 0;
  243 + }
  244 +
  245 + return true;
  246 + }
  247 + return false;
  248 + }
  249 +
  250 + public function getImageFile()
  251 + {
  252 + return empty($this->image) ? null : Yii::getAlias('@imagesDir/tax_option/' . $this->image);
  253 + }
  254 +
  255 + public function getImageUrl()
  256 + {
  257 + return empty($this->image) ? null : Yii::getAlias('@imagesUrl/tax_option/' . $this->image);
  258 + }
  259 +
  260 + /**
  261 + * @return ActiveQuery
  262 + */
  263 + public function getProducts()
  264 + {
  265 + return $this->hasMany(Product::className(), [ 'product_id' => 'product_id' ])
  266 + ->viaTable('product_option', [ 'option_id' => 'tax_option_id' ]);
  267 + }
222 } 268 }
223 -}  
console/controllers/SiteMapController.php
@@ -10,6 +10,7 @@ @@ -10,6 +10,7 @@
10 use frontend\models\ProductFrontendSearch; 10 use frontend\models\ProductFrontendSearch;
11 use Yii; 11 use Yii;
12 use common\models\Page; 12 use common\models\Page;
  13 + use yii\db\Query;
13 use yii\helpers\ArrayHelper; 14 use yii\helpers\ArrayHelper;
14 use yii\helpers\Console; 15 use yii\helpers\Console;
15 use yii\helpers\Url; 16 use yii\helpers\Url;
@@ -24,6 +25,8 @@ @@ -24,6 +25,8 @@
24 private $urlList = [ 'http://www.linija-svitla.ua/' ]; 25 private $urlList = [ 'http://www.linija-svitla.ua/' ];
25 private $count = 1; 26 private $count = 1;
26 27
  28 + private $addedFilters = [];
  29 +
27 public function checkFilter($category, $filter) 30 public function checkFilter($category, $filter)
28 { 31 {
29 $productModel = new ProductFrontendSearch(); 32 $productModel = new ProductFrontendSearch();
@@ -65,7 +68,14 @@ @@ -65,7 +68,14 @@
65 [ 68 [
66 'not like', 69 'not like',
67 'meta', 70 'meta',
68 - '%noindex%', 71 + 'noindex',
  72 + ]
  73 + )
  74 + ->andWhere(
  75 + [
  76 + '!=',
  77 + 'url',
  78 + '/',
69 ] 79 ]
70 ) 80 )
71 ->all(); 81 ->all();
@@ -87,6 +97,7 @@ @@ -87,6 +97,7 @@
87 public function getCategories() 97 public function getCategories()
88 { 98 {
89 return Category::find() 99 return Category::find()
  100 + ->with('brands')
90 ->all(); 101 ->all();
91 } 102 }
92 103
@@ -127,6 +138,16 @@ @@ -127,6 +138,16 @@
127 'tax_group.is_filter' => true, 138 'tax_group.is_filter' => true,
128 ] 139 ]
129 ) 140 )
  141 + ->joinWith('products')
  142 + ->andWhere(
  143 + [
  144 +
  145 + 'product.product_id' => ( new Query() )->select(['pid' => 'product.product_id'])
  146 + ->from('product')->join('INNER JOIN', 'product_variant', 'product.product_id = product_variant.product_id')
  147 + ->where(['!=','product_variant.stock',0])
  148 +
  149 + ]
  150 + )
130 ->all(); 151 ->all();
131 152
132 } 153 }
@@ -237,18 +258,16 @@ @@ -237,18 +258,16 @@
237 $this->stdout('Add brands' . "\n", Console::FG_BLUE); 258 $this->stdout('Add brands' . "\n", Console::FG_BLUE);
238 259
239 foreach ($this->getCategories() as $category) { 260 foreach ($this->getCategories() as $category) {
240 - foreach ($this->getBrands($category) as $brand) {  
241 - if ($this->checkFilter($category, [ 'brands' => [ $brand->brand_id ] ])) {  
242 - $url = Url::to(  
243 - [  
244 - 'catalog/category',  
245 - 'category' => $category,  
246 - 'filters' => [ 'brands' => [ $brand->alias ] ],  
247 - ],  
248 - true  
249 - );  
250 - $this->createRow($url, 0.8, $content);  
251 - } 261 + foreach ($category->brands as $brand) {
  262 + $url = Url::to(
  263 + [
  264 + 'catalog/category',
  265 + 'category' => $category,
  266 + 'filters' => [ 'brands' => [ $brand->alias ] ],
  267 + ],
  268 + true
  269 + );
  270 + $this->createRow($url, 0.8, $content);
252 } 271 }
253 } 272 }
254 273
@@ -263,6 +282,7 @@ @@ -263,6 +282,7 @@
263 ], 282 ],
264 true 283 true
265 ); 284 );
  285 + $this->addedFilters[] = $url;
266 $this->createRow($url, 0.8, $content); 286 $this->createRow($url, 0.8, $content);
267 } 287 }
268 288
@@ -270,6 +290,9 @@ @@ -270,6 +290,9 @@
270 290
271 foreach ($this->getSeoLinks() as $link) { 291 foreach ($this->getSeoLinks() as $link) {
272 $url = Yii::$app->urlManager->baseUrl . $link->url; 292 $url = Yii::$app->urlManager->baseUrl . $link->url;
  293 + if (in_array($url, $this->addedFilters)) {
  294 + continue;
  295 + }
273 $this->createRow($url, 0.8, $content); 296 $this->createRow($url, 0.8, $content);
274 297
275 } 298 }