
Потрясающий модуль - https://github.com/bupy7/yii2-pages. Использует Imperavi Redactor для текстового поля. Устанавливаем через composer.
Настройка модуля yii2-pages
Приведу свою настройку модуля в конфиге config/web.php. Так как использую ещё расширение yii2-users, поэтому прописал ruleConfig.
'modules' => [ ... 'pages' => [ 'class' => 'bupy7\pages\Module', 'controllerMap' => [ 'manager' => [ 'class' => 'bupy7\pages\controllers\ManagerController', 'as access' => [ 'class' => yii\filters\AccessControl::className(), 'ruleConfig' => [ 'class' => yii\filters\AccessRule::className(), ], 'rules' => [ [ 'allow' => true, 'roles' => ['admin'], ], ], ], ], ], 'pathToImages' => '@webroot/images', 'urlToImages' => '@web/images', 'pathToFiles' => '@webroot/files', 'urlToFiles' => '@web/files', 'uploadImage' => true, 'uploadFile' => true, 'addImage' => true, 'addFile' => true, ], ],
По пути - /pages/manager/index открывается менеджер страниц
Сами страницы, например - /pages/about - где 'about' это значение поля Алиас для конкретной страницы.
Свой вид (или шаблон) для разных статических страниц в yii2-pages
Возникла необходимость сделать редактируемым текст на странице контакты. Но там уже есть своя структура страницы, в частности присутствует и работает форма отправки письма обратной связи. То есть нужно для этой страницы другой вид, не такой как для всех остальных статичных страниц. Хорошо бы подошло для таких вещей расширение yii2-block, но там нет визуального редактора для оформление текста (там aceeditor, который больше подходит программистам, кто только кодом работает, а менеджеру сайта, не понимающему теги html тот редактор не годится). В yii2-pages же - обычный Imperavi Redactor.
Соответственно в контроллере SiteController есть метод actionContact(). Сразу замечу, что для капчи я использую гугловскую рекапчу, которая подключаемся в виде, поэтому мне не понадобится стандартную капчу прописывать в actions() в новом DefaultController перекрывающем оригинальный DefaultController в расширении yii2-pages.
Итак, через controllerMap перекрываю контроллер своим
В конфиге
'modules' => [ ... 'pages' => [ 'class' => 'bupy7\pages\Module', 'controllerMap' => [ 'manager' => [ 'class' => 'app\controllers\ManagerController', 'as access' => [ 'class' => yii\filters\AccessControl::className(), /*'ruleConfig' => [ 'class' => yii\filters\AccessRule::className(), ],*/ 'rules' => [ // allow authenticated users [ 'allow' => true, 'roles' => ['@'] ], ], ], ], 'default' => [ 'class' => 'app\controllers\DefaultController', /*'on beforeAction' => function($event) { // see content of $event $event->action->controller->layout = '/contacts'; }*/ ], ], 'pathToImages' => '@webroot/images/static-pages', 'urlToImages' => '@web/images/static-pages', 'pathToFiles' => '@webroot/files/static-pages', 'urlToFiles' => '@web/files/static-pages', 'uploadImage' => true, 'uploadFile' => true, 'addImage' => true, 'addFile' => true, ], 'block' => [ 'class' => 'wolfguard\block\Module', ], ],
Сам мой перекрывающий контроллер (изменил только actionIndex и унаследовал его от базового) app/controllers/DefaultController.php
<?php namespace app\controllers; use Yii; use yii\web\Controller; use bupy7\pages\models\Page; use yii\web\NotFoundHttpException; use bupy7\pages\Module; use bupy7\pages\controllers\DefaultController as BaseDefaultController; use app\models\ContactForm; /** * View pages of module. * * @author Belosludcev Vasilij <a href="http://mihaly4.ru">http://mihaly4.ru</a> * @since 1.0.0 */ class DefaultController extends BaseDefaultController { /** * View of page by alias. * @param string $page Alias of page. * @see Page::$alias */ public function actionIndex($page, $view = 'index') { $model = $this->findModel($page); if($page=='contacts') { $view='contacts'; $model2 = new ContactForm(); $model2->subject = Yii::$app->getRequest()->getQueryParam('subject'); if ($model2->load(Yii::$app->request->post()) && $model2->contact(Yii::$app->params['adminEmail'])) { Yii::$app->session->setFlash('contactFormSubmitted'); return $this->refresh(); } else { return $this->render('contacts', [ 'model' => $model, 'model2' => $model2, ]); } }else{ return $this->render($view, [ 'model' => $model, ]); } } }
И добавил вид для страницы Контакты views/default/contacts.php
<?php use yii\helpers\Html; use yii\bootstrap\ActiveForm; //use yii\captcha\Captcha; /* @var $this yii\web\View */ /* @var $model bupy7\pages\models\Page */ if (empty($model->title_browser)) { $this->title = $model->title; } else { $this->title = $model->title_browser; } if (!empty($model->meta_description)) { $this->registerMetaTag(['content' => Html::encode($model->meta_description), 'name' => 'description']); } if (!empty($model->meta_keywords)) { $this->registerMetaTag(['content' => Html::encode($model->meta_keywords), 'name' => 'keywords']); } ?> <div class="row"> <div class="col-md-12"> <h1><?= Html::encode($model->title); ?></h1> </div> </div> <?php if (Yii::$app->session->hasFlash('contactFormSubmitted')): ?> <div class="alert alert-success"> Спасибо за сообщение! Мы скоро ответим. </div> <?php else: ?> <div class="row"> <div class="col-md-7"> <?= $model->content; ?> </div> <div class="col-md-5"> <div class="panel panel-default"> <div class="panel-body"> <?php $form = ActiveForm::begin([ 'id' => 'contact-form' ]); ?> <?= $form->field($model2, 'name') ?> <?= $form->field($model2, 'email') ?> <?= $form->field($model2, 'subject') ?> <?= $form->field($model2, 'body')->textArea(['rows' => 6]) ?> <?= $form->field($model2, 'reCaptcha', ['template' => '{input}'])->widget( \himiklab\yii2\recaptcha\ReCaptcha::className() //['widgetOptions'=>['class'=>'text-right']] ) ?> <?/*= $form->field($model, 'verifyCode')->widget(Captcha::className(), [ 'template' => '<div class="row"><div class="col-lg-6">{image}</div><div class="col-lg-6">{input}</div></div>', ]) */?> <div class="form-group"> <?= Html::submitButton('Отправить', ['class' => 'btn btn-primary btn-lg', 'name' => 'contact-button']) ?> </div> <?php ActiveForm::end(); ?> </div> </div> </div> </div> <?php endif; ?>
10 марта 2016, Программирование, веб-кодинг, Расширения, виджеты / Метки: статичные страницы yii2-pages
По мотивам – http://mihaly4.ru/blog/yii2/post/modul-statichnyh-stranic-dlya-yii2

