/**
  * Creates data provider instance with search query applied
  *
  * @param array $params
  *
  * @return ActiveDataProvider
  */
 public function search($params)
 {
     $pageClass = Module::getInstance()->pageModelClass;
     /**
      * @var \yii\db\ActiveQuery $query
      */
     $query = $pageClass::find();
     $query->joinWith('translations');
     $query->distinct();
     $dataProvider = new ActiveDataProvider(['query' => $query]);
     $dataProvider->sort->defaultOrder = ['slug' => SORT_ASC];
     $dataProvider->sort->attributes['title'] = ['asc' => [PageI18n::tableName() . '.[[title]]' => SORT_ASC], 'desc' => [PageI18n::tableName() . '.[[title]]' => SORT_DESC], 'default' => SORT_ASC];
     if (!($this->load($params) && $this->validate())) {
         return $dataProvider;
     }
     if ($this->title) {
         $query->andWhere(['or', ['like', PageI18n::tableName() . '.[[title]]', $this->title], ['like', PageI18n::tableName() . '.[[language]]', $this->title]]);
     }
     $query->andFilterWhere(['id' => $this->id, 'status' => $this->status, 'created_at' => $this->created_at, 'created_by' => $this->created_by, 'updated_at' => $this->updated_at, 'updated_by' => $this->updated_by]);
     $query->andFilterWhere(['like', 'slug', $this->slug])->andFilterWhere(['like', 'layout', $this->layout])->andFilterWhere(['like', 'default_language', $this->default_language]);
     return $dataProvider;
 }
Exemple #2
0
 /**
  * @return \yii\db\ActiveQuery
  */
 public function getTranslations()
 {
     return $this->hasMany(PageI18n::className(), ['page_id' => 'id']);
 }
Exemple #3
0
 /**
  * @return array
  */
 public function getSearchSources()
 {
     return [['class' => '\\maddoger\\core\\search\\ArraySearchSource', 'data' => [['label' => Yii::t('maddoger/website', 'Pages'), 'url' => ['/' . $this->id . '/page/index']], ['label' => Yii::t('maddoger/website', 'Create new page'), 'url' => ['/' . $this->id . '/page/create']], ['label' => Yii::t('maddoger/website', 'Menus'), 'url' => ['/' . $this->id . '/menu/index']], ['label' => Yii::t('maddoger/website', 'SEO Configuration'), 'url' => ['/' . $this->id . '/config']]], 'roles' => ['website.page.view', 'website.config.manage', 'website.menu.manage']], ['class' => '\\maddoger\\core\\search\\ActiveSearchSource', 'modelClass' => '\\maddoger\\website\\common\\models\\Menu', 'searchAttributes' => ['label'], 'url' => ['/' . $this->id . '/menu/index'], 'labelPrefix' => Yii::t('maddoger/website', 'Menu - '), 'roles' => ['website.menu.manage']], ['class' => '\\maddoger\\core\\search\\ActiveSearchSource', 'query' => PageI18n::find(), 'searchAttributes' => ['title'], 'url' => function ($model) {
         return Url::to(['/' . $this->id . '/page/view', 'id' => $model['page_id']]);
     }, 'label' => 'title', 'labelPrefix' => Yii::t('maddoger/website', 'Page - '), 'roles' => ['website.page.view']]];
 }
 public function actionPages($q, $sort = 'label')
 {
     Yii::$app->response->format = Response::FORMAT_JSON;
     $sortAttributes = ['title' => SORT_ASC, 'updated_at' => SORT_DESC];
     if (!$sort || !isset($sortAttributes[$sort])) {
         throw new InvalidParamException('Unknown sort field.');
     }
     $query = PageI18n::find()->where(['like', 'title', $q])->orderBy([$sort => $sortAttributes[$sort]])->with('page');
     $query->limit(20);
     $res = [];
     foreach ($query->all() as $model) {
         /**
          * @var PageI18n $model
          */
         $res[] = ['id' => $model->page_id, 'text' => $model->title, 'title' => $model->title, 'url' => $model->page->getUrl($model->language)];
     }
     return $res;
 }