/** * Creates data provider instance with search query applied * * @param array $params * @return ActiveDataProvider */ public function search($params) { $query = Page::find(); $query->with(['tags', 'translations', 'parent']); $dataProvider = new ActiveDataProvider(['query' => $query, 'sort' => ['defaultOrder' => ['lft' => SORT_ASC]]]); if (!($this->load($params) && $this->validate())) { if ($this->excludeRoots) { $query->excludeRoots(); } return $dataProvider; } $query->andFilterWhere(['{{%grom_page}}.id' => $this->id, '{{%grom_page}}.parent_id' => $this->parent_id, '{{%grom_page}}.created_at' => $this->created_at, '{{%grom_page}}.updated_at' => $this->updated_at, '{{%grom_page}}.status' => $this->status, '{{%grom_page}}.created_by' => $this->created_by, '{{%grom_page}}.updated_by' => $this->updated_by, '{{%grom_page}}.lft' => $this->lft, '{{%grom_page}}.rgt' => $this->rgt, '{{%grom_page}}.level' => $this->level, '{{%grom_page}}.ordering' => $this->ordering, '{{%grom_page}}.hits' => $this->hits, '{{%grom_page}}.lock' => $this->lock]); $query->andFilterWhere(['like', '{{%grom_page}}.language', $this->language])->andFilterWhere(['like', '{{%grom_page}}.title', $this->title])->andFilterWhere(['like', '{{%grom_page}}.path', $this->path])->andFilterWhere(['like', '{{%grom_page}}.alias', $this->alias])->andFilterWhere(['like', '{{%grom_page}}.preview_text', $this->preview_text])->andFilterWhere(['like', '{{%grom_page}}.detail_text', $this->detail_text])->andFilterWhere(['like', '{{%grom_page}}.metakey', $this->metakey])->andFilterWhere(['like', '{{%grom_page}}.metadesc', $this->metadesc]); if ($this->excludeRoots) { $query->excludeRoots(); } if ($this->excludePage && ($page = Page::findOne($this->excludePage))) { /** @var $page Page */ $query->excludePage($page); } if ($this->tags) { $query->innerJoinWith('tags')->andFilterWhere(['{{%grom_tag}}.id' => $this->tags]); } return $dataProvider; }
public function loadModel($id) { if (!($model = Page::find()->where(['id' => $id])->published()->one())) { throw new NotFoundHttpException(Yii::t('gromver.platform', 'The requested page does not exist.')); } return $model; }
public function init() { if ($this->page && !$this->page instanceof Page) { $this->page = Page::findOne(intval($this->page)); } if (empty($this->page)) { throw new InvalidConfigException(Yii::t('gromver.platform', 'Page not found.')); } }
protected function getViewData() { /** items list */ if ($this->page->level - $this->rootPage->level > 1) { $listRoot = $this->page->parents($this->page->isLeaf() ? 2 : 1)->one(); } else { $listRoot = $this->rootPage; } /** @var $items \gromver\platform\basic\modules\page\models\Page[] */ $items = $listRoot->children(2)->published()->all(); if (count($items)) { $items = $this->prepareItems($items, $items[0]->level, $hasActiveChild); } /** nav */ $model = $this->page; $prevModel = $nextModel = null; // предыдущая страница if (!$this->rootPage->equals($this->page)) { if ($prevModel = $model->prev()->published()->one()) { //пытаемся найти лист(правый) if ($rgtLeaf = $prevModel->leaves()->published()->orderBy(['lft' => SORT_DESC])->one()) { $prevModel = $rgtLeaf; } } else { $prevModel = $model->parent; } } // следущая страница if ($this->rootPage->equals($this->page)) { $nextModel = $model->children(1)->published()->one(); } else { if (!($nextModel = $model->children(1)->published()->one() or $nextModel = $model->next()->published()->one())) { //пытаемся выйти наверх while (($parentModel = $model->parent) && !$parentModel->equals($this->rootPage)) { if ($nextModel = $parentModel->next()->one()) { break; } $model = $parentModel; } } } return [$items, $prevModel, $nextModel]; }
*/ $this->title = Yii::t('gromver.platform', 'Select Page'); $this->params['breadcrumbs'][] = $this->title; ?> <div class="page-index"> <?php /*<h1><?= Html::encode($this->title) ?></h1>*/ ?> <?php // echo $this->render('_search', ['model' => $searchModel]); ?> <?php echo GridView::widget(['dataProvider' => $dataProvider, 'filterModel' => $searchModel, 'id' => 'grid', 'pjax' => true, 'pjaxSettings' => ['neverTimeout' => true], 'columns' => [['attribute' => 'id', 'hAlign' => GridView::ALIGN_CENTER, 'vAlign' => GridView::ALIGN_MIDDLE, 'width' => '60px'], ['attribute' => 'language', 'hAlign' => GridView::ALIGN_CENTER, 'vAlign' => GridView::ALIGN_MIDDLE, 'width' => '60px', 'filter' => Yii::$app->getAcceptedLanguagesList()], ['attribute' => 'title', 'vAlign' => GridView::ALIGN_MIDDLE, 'value' => function ($model) { /** @var \gromver\platform\basic\modules\page\models\Page $model */ return str_repeat(" • ", max($model->level - 2, 0)) . $model->title . '<br/>' . Html::tag('small', ' — ' . $model->path, ['class' => 'text-muted']); }, 'format' => 'html'], ['attribute' => 'status', 'vAlign' => GridView::ALIGN_MIDDLE, 'value' => function ($model) { /** @var $model \gromver\platform\basic\modules\page\models\Page */ return $model->getStatusLabel(); }, 'width' => '100px', 'filter' => \gromver\platform\basic\modules\page\models\Page::statusLabels()], ['attribute' => 'tags', 'width' => '120px', 'vAlign' => GridView::ALIGN_MIDDLE, 'value' => function ($model) { /** @var $model \gromver\platform\basic\modules\page\models\Page */ return implode(', ', \yii\helpers\ArrayHelper::map($model->tags, 'id', 'title')); }, 'filterType' => GridView::FILTER_SELECT2, 'filterWidgetOptions' => ['data' => \yii\helpers\ArrayHelper::map(\gromver\platform\basic\modules\tag\models\Tag::find()->where(['id' => $searchModel->tags])->all(), 'id', 'title'), 'theme' => \kartik\select2\Select2::THEME_BOOTSTRAP, 'pluginOptions' => ['allowClear' => true, 'placeholder' => Yii::t('gromver.platform', 'Select ...'), 'ajax' => ['url' => \yii\helpers\Url::to(['/grom/tag/backend/default/tag-list'])]]]], ['header' => Yii::t('gromver.platform', 'Action'), 'hAlign' => GridView::ALIGN_CENTER, 'vAlign' => GridView::ALIGN_MIDDLE, 'value' => function ($model) use($route) { /** @var $model \gromver\platform\basic\modules\page\models\Page */ return Html::a(Yii::t('gromver.platform', 'Select'), '#', ['class' => 'btn btn-primary btn-xs', 'onclick' => \gromver\widgets\ModalIFrame::postDataJs(['id' => $model->id, 'title' => $model->title, 'description' => Yii::t('gromver.platform', 'Page: {title}', ['title' => $model->title]), 'route' => \gromver\platform\basic\modules\menu\models\MenuItem::toRoute($route, ['id' => $model->id]), 'link' => Yii::$app->urlManager->createUrl($model->getFrontendViewLink()), 'value' => $model->id . ':' . $model->alias])]); }, 'width' => '80px', 'mergeHeader' => true, 'format' => 'raw']], 'responsive' => true, 'hover' => true, 'condensed' => true, 'floatHeader' => true, 'floatHeaderOptions' => ['scrollingTop' => 0], 'bordered' => false, 'panel' => ['heading' => '<h3 class="panel-title"><i class="glyphicon glyphicon-th-list"></i> ' . Html::encode($this->title) . '</h3>', 'type' => 'info', 'after' => Html::a('<i class="glyphicon glyphicon-repeat"></i> ' . Yii::t('gromver.platform', 'Reset List'), [null], ['class' => 'btn btn-info']), 'showFooter' => false]]); ?> </div>
/** * @param $event \gromver\platform\basic\modules\search\modules\sql\widgets\events\SqlBeforeSearchEvent */ public static function sqlBeforeFrontendSearch($event) { $event->query->leftJoin('{{%grom_page}}', ['AND', ['=', 'model_class', self::className()], 'model_id={{%grom_page}}.id', ['NOT IN', '{{%grom_page}}.parent_id', Page::find()->unpublished()->select('{{%grom_page}}.id')->column()]])->addSelect('{{%grom_page}}.id')->andWhere('model_class=:pageClassName XOR {{%grom_page}}.id IS NULL', [':pageClassName' => self::className()]); }
<p> <?= Html::a(Yii::t('gromver.platform', 'Create {modelClass}', [ 'modelClass' => 'Page', ]), ['create'], ['class' => 'btn btn-success']) ?> </p>*/ ?> <?php echo GridView::widget(['id' => 'table-grid', 'dataProvider' => $dataProvider, 'filterModel' => $searchModel, 'pjax' => true, 'pjaxSettings' => ['neverTimeout' => true], 'columns' => [['class' => '\\kartik\\grid\\CheckboxColumn'], ['attribute' => 'id', 'hAlign' => GridView::ALIGN_CENTER, 'vAlign' => GridView::ALIGN_MIDDLE, 'width' => '60px'], ['attribute' => 'language', 'hAlign' => GridView::ALIGN_CENTER, 'vAlign' => GridView::ALIGN_MIDDLE, 'width' => '80px', 'value' => function ($model) { /** @var $model \gromver\platform\basic\modules\page\models\Page */ return \gromver\platform\basic\modules\main\widgets\TranslationsBackend::widget(['model' => $model]); }, 'format' => 'raw', 'filter' => Yii::$app->getAcceptedLanguagesList()], ['attribute' => 'parent_id', 'width' => '150px', 'vAlign' => GridView::ALIGN_MIDDLE, 'value' => function ($model) { /** @var \gromver\platform\basic\modules\page\models\Page $model */ return $model->parent ? $model->parent->title : ''; }, 'filterType' => GridView::FILTER_SELECT2, 'filterWidgetOptions' => ['data' => \yii\helpers\ArrayHelper::map(\gromver\platform\basic\modules\page\models\Page::find()->where(['id' => $searchModel->parent_id])->all(), 'id', 'title'), 'theme' => \kartik\select2\Select2::THEME_BOOTSTRAP, 'pluginOptions' => ['allowClear' => true, 'placeholder' => Yii::t('gromver.platform', 'Select ...'), 'ajax' => ['url' => \yii\helpers\Url::to(['page-list'])]]]], ['attribute' => 'title', 'vAlign' => GridView::ALIGN_MIDDLE, 'value' => function ($model) { /** @var \gromver\platform\basic\modules\page\models\Page $model */ return str_repeat(" • ", max($model->level - 2, 0)) . $model->title . '<br/>' . Html::tag('small', ' — ' . $model->path, ['class' => 'text-muted']); }, 'format' => 'html'], ['attribute' => 'status', 'hAlign' => GridView::ALIGN_CENTER, 'vAlign' => GridView::ALIGN_MIDDLE, 'value' => function ($model) { /** @var $model \gromver\platform\basic\modules\page\models\Page */ return $model->status === \gromver\platform\basic\modules\page\models\Page::STATUS_PUBLISHED ? Html::a('<i class="glyphicon glyphicon-ok-circle"></i>', \yii\helpers\Url::to(['unpublish', 'id' => $model->id]), ['class' => 'btn btn-default btn-xs', 'data-pjax' => '0', 'data-method' => 'post']) : Html::a('<i class="glyphicon glyphicon-remove-circle"></i>', \yii\helpers\Url::to(['publish', 'id' => $model->id]), ['class' => 'btn btn-danger btn-xs', 'data-pjax' => '0', 'data-method' => 'post']); }, 'filter' => \gromver\platform\basic\modules\news\models\Post::statusLabels(), 'format' => 'raw', 'width' => '100px'], ['attribute' => 'tags', 'width' => '120px', 'vAlign' => GridView::ALIGN_MIDDLE, 'value' => function ($model) { /** @var $model \gromver\platform\basic\modules\page\models\Page */ return implode(', ', \yii\helpers\ArrayHelper::map($model->tags, 'id', 'title')); }, 'filterType' => GridView::FILTER_SELECT2, 'filterWidgetOptions' => ['data' => \yii\helpers\ArrayHelper::map(\gromver\platform\basic\modules\tag\models\Tag::find()->where(['id' => $searchModel->tags])->all(), 'id', 'title'), 'theme' => \kartik\select2\Select2::THEME_BOOTSTRAP, 'pluginOptions' => ['allowClear' => true, 'placeholder' => Yii::t('gromver.platform', 'Select ...'), 'ajax' => ['url' => \yii\helpers\Url::to(['/grom/tag/backend/default/tag-list'])]]]], ['attribute' => 'ordering', 'hAlign' => GridView::ALIGN_CENTER, 'vAlign' => GridView::ALIGN_MIDDLE, 'value' => function ($model, $index) { /** @var \gromver\platform\basic\modules\page\models\Page $model */ return Html::input('text', 'order', $model->ordering, ['class' => 'form-control']); }, 'format' => 'raw', 'width' => '100px'], ['class' => 'kartik\\grid\\ActionColumn', 'deleteOptions' => ['data-method' => 'delete']]], 'responsive' => true, 'hover' => true, 'condensed' => true, 'floatHeader' => true, 'bordered' => false, 'panel' => ['heading' => '<h3 class="panel-title"><i class="glyphicon glyphicon-th-list"></i> ' . Html::encode($this->title) . '</h3>', 'type' => 'info', 'before' => Html::a('<i class="glyphicon glyphicon-plus"></i> ' . Yii::t('gromver.platform', 'Add'), $searchModel->parent_id ? ['create', 'parentId' => $searchModel->parent_id] : ['create'], ['class' => 'btn btn-success', 'data-pjax' => '0']), 'after' => Html::a('<i class="glyphicon glyphicon-sort-by-attributes"></i> ' . Yii::t('gromver.platform', 'Ordering'), ['ordering'], ['class' => 'btn btn-default', 'data-pjax' => '0', 'onclick' => 'processOrdering(this); return false']) . ' ' . Html::a('<i class="glyphicon glyphicon-trash"></i> ' . Yii::t('gromver.platform', 'Delete'), ['bulk-delete'], ['class' => 'btn btn-danger', 'data-pjax' => '0', 'onclick' => 'processAction(this); return false']) . ' ' . Html::a('<i class="glyphicon glyphicon-repeat"></i> ' . Yii::t('gromver.platform', 'Reset List'), ['index'], ['class' => 'btn btn-info']), 'showFooter' => false]]); ?> </div>
/** * @inheritdoc */ public function events() { return [Desktop::EVENT_FETCH_ITEMS => 'addDesktopItem', MenuItemRoutes::EVENT_FETCH_ITEMS => 'addMenuItemRoutes', MenuUrlRule::EVENT_FETCH_MODULE_ROUTERS => 'addMenuRouter', SqlSearchResults::EVENT_BEFORE_SEARCH . Page::className() => [Page::className(), 'sqlBeforeFrontendSearch'], ElasticSearchResults::EVENT_BEFORE_SEARCH . Page::className() => [Page::className(), 'elasticBeforeFrontendSearch']]; }
/** * Находит путь к пункту меню ссылающемуся на категорию $categoryId, либо ее предка * Если путь ведет к предку, то достраиваем путь категории $categoryId * @param $pageId * @param $menuMap \gromver\platform\basic\components\MenuMap * @return null|string */ private function findPageMenuPath($pageId, $menuMap) { /** @var Page $page */ if (!isset($this->_pagePaths[$menuMap->language][$pageId])) { if ($path = $menuMap->getMenuPathByRoute(MenuItem::toRoute('grom/page/frontend/default/guide', ['id' => $pageId]))) { $this->_pagePaths[$menuMap->language][$pageId] = $path; } elseif (($page = Page::findOne($pageId)) && !$page->isRoot() && ($path = $this->findPageMenuPath($page->parent_id, $menuMap))) { $this->_pagePaths[$menuMap->language][$pageId] = $path . '/' . $page->alias; } else { $this->_pagePaths[$menuMap->language][$pageId] = false; } } return $this->_pagePaths[$menuMap->language][$pageId]; }
/** * Finds the Page model based on its primary key value. * If the model is not found, a 404 HTTP exception will be thrown. * @param integer $id * @return Page the loaded model * @throws NotFoundHttpException if the model cannot be found */ protected function findModel($id) { if (($model = Page::findOne($id)) !== null) { return $model; } else { throw new NotFoundHttpException(Yii::t('gromver.platform', 'The requested page does not exist.')); } }