/** * 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; }
/** * @return \yii\db\ActiveQuery */ public function getTranslations() { return $this->hasMany(PageI18n::className(), ['page_id' => 'id']); }
/** * @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; }