SearchController.php 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. <?php
  2. /**
  3. * Author: lf
  4. * Blog: https://blog.feehi.com
  5. * Email: job@feehi.com
  6. * Created at: 2016-04-05 13:08
  7. */
  8. namespace frontend\controllers;
  9. use Yii;
  10. use frontend\controllers\helpers\Helper;
  11. use common\models\meta\ArticleMetaTag;
  12. use common\models\Article;
  13. use yii\helpers\Html;
  14. use yii\web\Controller;
  15. use yii\data\ActiveDataProvider;
  16. class SearchController extends Controller
  17. {
  18. /**
  19. * search
  20. *
  21. * @return string
  22. */
  23. public function actionIndex()
  24. {
  25. $where = ['type' => Article::ARTICLE];
  26. $query = Article::find()->select([])->where($where);
  27. $keyword = Yii::$app->getRequest()->get('q');
  28. $query->andFilterWhere(['like', 'title', $keyword]);
  29. $dataProvider = new ActiveDataProvider([
  30. 'query' => $query,
  31. 'sort' => [
  32. 'defaultOrder' => [
  33. 'sort' => SORT_ASC,
  34. 'id' => SORT_DESC,
  35. ]
  36. ]
  37. ]);
  38. $data = array_merge([
  39. 'dataProvider' => $dataProvider,
  40. 'type' => Yii::t('frontend', 'Search keyword {keyword} results', ['keyword'=>Html::encode($keyword)]),
  41. ], Helper::getCommonInfos());
  42. return $this->render('/article/index', $data);
  43. }
  44. public function actionTag($tag='')
  45. {
  46. $metaTagModel = new ArticleMetaTag();
  47. $aids = $metaTagModel->getAidsByTag($tag);
  48. $where = ['type' => Article::ARTICLE];
  49. $query = Article::find()->select([])->where($where)->where(['in', 'id', $aids]);
  50. $dataProvider = new ActiveDataProvider([
  51. 'query' => $query,
  52. 'sort' => [
  53. 'defaultOrder' => [
  54. 'sort' => SORT_ASC,
  55. 'id' => SORT_DESC,
  56. ]
  57. ]
  58. ]);
  59. $data = array_merge([
  60. 'dataProvider' => $dataProvider,
  61. 'type' => Yii::t('frontend', 'Tag {tag} related articles', ['tag'=>Html::encode($tag)]),
  62. ], Helper::getCommonInfos());
  63. return $this->render('/article/index', $data);
  64. }
  65. }