Commit d08b44b4b1e038a4b84e9c1c6834eee6e6a9b5fc
1 parent
b2a90d20
-Find by sku
Showing
2 changed files
with
40 additions
and
3 deletions
Show diff stats
frontend/controllers/SiteController.php
@@ -6,6 +6,8 @@ use common\models\Blog; | @@ -6,6 +6,8 @@ use common\models\Blog; | ||
6 | use common\models\Slider; | 6 | use common\models\Slider; |
7 | use common\modules\product\models\Category; | 7 | use common\modules\product\models\Category; |
8 | use common\models\Page; | 8 | use common\models\Page; |
9 | +use common\modules\product\models\Product; | ||
10 | +use common\modules\product\models\ProductVariant; | ||
9 | use Yii; | 11 | use Yii; |
10 | use yii\base\InvalidParamException; | 12 | use yii\base\InvalidParamException; |
11 | use yii\web\BadRequestHttpException; | 13 | use yii\web\BadRequestHttpException; |
@@ -71,7 +73,18 @@ class SiteController extends Controller | @@ -71,7 +73,18 @@ class SiteController extends Controller | ||
71 | ], | 73 | ], |
72 | ]; | 74 | ]; |
73 | } | 75 | } |
74 | - | 76 | + |
77 | + public function beforeAction($action) | ||
78 | + { | ||
79 | + if ($this->action->id == 'sku') | ||
80 | + { | ||
81 | + $this->enableCsrfValidation = false; | ||
82 | + } | ||
83 | + | ||
84 | + return parent::beforeAction($action); | ||
85 | + | ||
86 | + } | ||
87 | + | ||
75 | /** | 88 | /** |
76 | * Displays homepage. | 89 | * Displays homepage. |
77 | * | 90 | * |
@@ -251,4 +264,27 @@ class SiteController extends Controller | @@ -251,4 +264,27 @@ class SiteController extends Controller | ||
251 | 'model' => $model, | 264 | 'model' => $model, |
252 | ]); | 265 | ]); |
253 | } | 266 | } |
267 | + | ||
268 | + public function actionSku() | ||
269 | + { | ||
270 | + $sku = Yii::$app->request->post('sku'); | ||
271 | + if(empty($sku)) throw new NotFoundHttpException('Не задан артикул'); | ||
272 | + | ||
273 | + $variant = ProductVariant::find() | ||
274 | + ->where([ | ||
275 | + 'sku' => $sku, | ||
276 | + ]) | ||
277 | + ->with('product')->one(); | ||
278 | + if(empty($variant)) | ||
279 | + { | ||
280 | + throw new NotFoundHttpException('Артикул не найден'); | ||
281 | + } else | ||
282 | + { | ||
283 | + return $this->redirect([ | ||
284 | + 'catalog/product', | ||
285 | + 'product' => $variant->product->alias, | ||
286 | + 'variant' => $variant->sku, | ||
287 | + ]); | ||
288 | + } | ||
289 | + } | ||
254 | } | 290 | } |
frontend/views/catalog/products.php
@@ -57,8 +57,9 @@ $this->params['breadcrumbs'][] = $this->title; | @@ -57,8 +57,9 @@ $this->params['breadcrumbs'][] = $this->title; | ||
57 | </div> | 57 | </div> |
58 | </div> | 58 | </div> |
59 | <div class="title">Фильтры</div> | 59 | <div class="title">Фильтры</div> |
60 | - <div><input type="text" placeholder="Артикул"></div> | ||
61 | - | 60 | + <form method="post" action="/site/sku"> |
61 | + <div><input name="sku" type="text" placeholder="Артикул"></div> | ||
62 | + </form> | ||
62 | <?= FilterWidget::widget([ | 63 | <?= FilterWidget::widget([ |
63 | 'category'=>$category, | 64 | 'category'=>$category, |
64 | 'groups'=> $groups, | 65 | 'groups'=> $groups, |