Blame view

frontend/controllers/SearchController.php 3.09 KB
0f852b51   Administrator   29.06.16
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
  <?php
  
  namespace frontend\controllers;
  use frontend\models\ProductFrontendSearch;
  use Yii;
  use common\modules\product\models\Category;
  use common\modules\product\models\Product;
  use common\modules\product\models\ProductCategory;
  use common\modules\product\models\ProductVariant;
  use yii\web\HttpException;
  
  class SearchController extends \yii\web\Controller
  {
      public function actionIndex()
      {
  
          $word = trim(Yii::$app->request->get('word', ''));
  
          if (!empty($word))
          {
0f852b51   Administrator   29.06.16
21
  
1b898c16   Administrator   20.07.16
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
  
              if( preg_match('/^\+?\d+$/', $word) && (iconv_strlen($word) > 4)){
  
                  $params['keywords'][] = $word;
  
                  $categoriesQuery = Category::find()
                      ->innerJoin(ProductCategory::tableName(), ProductCategory::tableName() .'.category_id = '. Category::tableName() .'.category_id')
                      ->innerJoin(Product::tableName(), Product::tableName() .'.product_id = '. ProductCategory::tableName() .'.product_id')
                      ->innerJoin(ProductVariant::tableName(), ProductVariant::tableName() .'.product_id = '. ProductCategory::tableName() .'.product_id');
                  $categoriesQuery->andWhere(['ilike', 'product.name', $params['keywords'][0]]);
                  $categories = $categoriesQuery->all();
  
              } else {
  
                  $params['keywords'] = explode(' ', preg_replace("|[\s,.!:&?~();-]|i", " ", $word));
  
                  foreach($params['keywords'] as $i => &$keyword) {
                      $keyword = trim($keyword);
                      if (empty($keyword)) {
                          unset($params['keywords'][$i]);
                      }
                  }
                  array_unshift($params['keywords'], $word);
  
                  $categoriesQuery = Category::find()
                      ->innerJoin(ProductCategory::tableName(), ProductCategory::tableName() .'.category_id = '. Category::tableName() .'.category_id')
                      ->innerJoin(Product::tableName(), Product::tableName() .'.product_id = '. ProductCategory::tableName() .'.product_id')
                      ->innerJoin(ProductVariant::tableName(), ProductVariant::tableName() .'.product_id = '. ProductCategory::tableName() .'.product_id');
                  foreach ($params['keywords'] as $keyword) {
                      $categoriesQuery->andWhere(['ilike', 'product.name', $keyword]);
0f852b51   Administrator   29.06.16
52
                  }
1b898c16   Administrator   20.07.16
53
54
                  $categoriesQuery->andWhere(['!=', ProductVariant::tableName() .'.stock', 0]);
                  $categories = $categoriesQuery->all();
0f852b51   Administrator   29.06.16
55
56
57
58
59
              }
  
              $productModel = new ProductFrontendSearch();
              $productProvider = $productModel->search(null, $params);
  
0f852b51   Administrator   29.06.16
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
  
              return $this->render(
                  'index',
                  [
                      'keywords'          => $params['keywords'],
                      'productModel'      => $productModel,
                      'productProvider'   => $productProvider,
                      'categories'        => $categories,
                  ]
              );
          }
          else
          {
              throw new HttpException(404, 'Данной странице не существует!');
          }
      }
  }