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
                  }
ba0ed8b7   Administrator   rm node nodule
53
  //                $categoriesQuery->andWhere(['!=', ProductVariant::tableName() .'.stock', 0]);
1b898c16   Administrator   20.07.16
54
                  $categories = $categoriesQuery->all();
0f852b51   Administrator   29.06.16
55
56
57
              }
  
              $productModel = new ProductFrontendSearch();
e4cea6a9   Administrator   rm node nodule
58
              $productProvider = $productModel->searchItem(null, $params);
0f852b51   Administrator   29.06.16
59
  
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, 'Данной странице не существует!');
          }
      }
  }