/** * Списочный вывод новостей * @param null|string $section символьный код категории новости * @return string * @throws \yii\base\InvalidConfigException * @throws \yii\web\NotFoundHttpException */ public function actionIndex($section = null) { $cacheId = $this->getActionCacheId(static::LIST_CACHE_ID); $res = Yii::$app->cache->get($cacheId); if (empty($res)) { $dependency = Yii::createObject(TagDependency::className()); $model = Yii::createObject(['class' => News::className(), 'scenario' => ActiveRecord::SCENARIO_SEARCH]); $res["sectionModel"] = null; $ids = null; if ($section) { $res["sectionModel"] = NewsSection::find()->published()->andWhere(["code" => $section])->one(); if (!$res["sectionModel"]) { throw new NotFoundHttpException(); } $ids = $res["sectionModel"]->getFilterIds(); } $dataProvider = $model->searchBySection($ids); $dataProvider->getSort()->defaultOrder = $this->orderBy; $dataProvider->getPagination()->pageSize = $this->pageSize; $dependency->addTag($model->setClassTagSafe()); $dependency->setTagsFromModels($dataProvider->getModels()); $res["html"] = $this->renderPartial('index', ["dataProvider" => $dataProvider, "sectionModel" => $res["sectionModel"], "previewImageWidth" => $this->previewImageWidth]); Yii::$app->cache->set($cacheId, $res, Yii::$app->params["cacheDuration"], $dependency); } if ($res["sectionModel"]) { $this->view->registerMetaTags($res["sectionModel"]); $crumbs = $res["sectionModel"]->getBreadCrumbsItems($res["sectionModel"]->id, function ($model) { return ['/news/news/index', 'section' => $model->code]; }); $this->view->addBreadCrumbs($crumbs); } else { $this->view->title = Yii::t('news/app', 'News'); $this->view->addBreadCrumb(["label" => $this->view->title, "url" => Url::toRoute(["/news/news/index"])]); } return $this->renderHtml($res["html"]); }
<?php use app\modules\news\models; return ['controllerMap' => ['migrate' => ['migrationLookup' => ['@webapp/modules/news/migrations']]], 'modules' => ['news' => ['class' => app\modules\news\News::className(), 'controllerNamespace' => 'app\\modules\\news\\controllers', 'modules' => ['admin' => ['class' => app\modules\news\modules\admin\Admin::className(), 'controllerNamespace' => 'app\\modules\\news\\modules\\admin\\controllers', 'menuItems' => function () { return [['label' => Yii::t('news/app', 'News module'), 'icon' => 'glyphicon glyphicon-align-justify', 'items' => [['label' => Yii::t('news/app', 'News'), 'url' => ['/admin/news/news'], "permission" => ["listModels", ["model" => Yii::createObject(models\News::className())]]], ['label' => Yii::t('news/app', 'News sections'), 'url' => ['/admin/news/news-section'], "permission" => ["listModels", ["model" => Yii::createObject(models\NewsSection::className())]]]]]]; }]]]], 'components' => ['i18n' => ['translations' => ['news/*' => ['class' => 'yii\\i18n\\PhpMessageSource', 'basePath' => '@webapp/modules/news/messages', 'fileMap' => ['news/app' => 'app.php']]]], 'urlManager' => ['rules' => ['news/<section:[A-z0-9_-]+>/<code:[A-z0-9_-]+>' => 'news/news/detail', 'news/<section:[A-z0-9_-]+>' => 'news/news/index', 'news' => 'news/news/index']]]];
/** * Действия * @return array */ public function actions() { $class = News::className(); return ['index' => ['class' => crud\Admin::className(), 'modelClass' => $class], 'create' => ['class' => crud\Create::className(), 'modelClass' => $class], 'update' => ['class' => crud\Update::className(), 'modelClass' => $class], 'view' => ['class' => crud\View::className(), 'modelClass' => $class], 'delete' => ['class' => crud\Delete::className(), 'modelClass' => $class], 'groupdelete' => ['class' => crud\GroupDelete::className(), 'modelClass' => $class], 'editable' => ['class' => crud\XEditable::className(), 'modelClass' => $class]]; }