mrstroz / yii2-wavecms-page
Page module for WaveCMS
Installs: 205
Dependents: 1
Suggesters: 0
Security: 0
Stars: 0
Watchers: 2
Forks: 0
Open Issues: 0
Type:yii2-extension
Requires
- php: >=5.6.0
- 2amigos/yii2-switch-widget: ~1.0
- himiklab/yii2-sitemap-module: *
- kartik-v/yii2-widget-datepicker: @dev
- kartik-v/yii2-widget-select2: @dev
- mrstroz/yii2-wavecms: *
- mrstroz/yii2-wavecms-metatags: ~0.2.0
- powerkernel/yii2-slugify: *
- yiisoft/yii2: ~2.0.6
Requires (Dev)
- php: >=5.4.0
- yiisoft/yii2: ~2.0.6
README
Page module for Yii 2 WaveCMS.
Please do all install steps first from Yii 2 WaveCMS.
Installation
The preferred way to install this extension is through composer.
Run
composer require --prefer-source "mrstroz/yii2-wavecms-page" "~0.4.0"
or add
"mrstroz/yii2-wavecms-page": "~0.4.0"
to the require section of your composer.json
file.
Required
- Update
backend/config/main.php
(Yii2 advanced template)
'modules' => [ // ... 'wavecms-page' => [ 'class' => 'mrstroz\wavecms\page\Module', /* * Override classes 'classMap' => [ 'Page' => 'common\models\Page', ] */ ], ],
Form views can be overwritten by backend themes;
- Update
frontend/config/main.php
(Yii2 advanced template)
'bootstrap' => [ // ... 'mrstroz\wavecms\page\FrontendBootstrap' ], 'modules' => [ 'sitemap' => [ 'class' => 'himiklab\sitemap\Sitemap', 'models' => [ 'mrstroz\wavecms\page\models\Page', ], 'urls' => [ [ 'loc' => ['/'], 'changefreq' => \himiklab\sitemap\behaviors\SitemapBehavior::CHANGEFREQ_DAILY, 'priority' => 1, ] ], 'cacheExpire' => 1 ] ], // ... 'components' => [ 'urlManager' => [ 'rules' => [ // Add rule for sitemap.xml ['pattern' => 'sitemap', 'route' => 'sitemap/default/index', 'suffix' => '.xml'], ], ], ]
- Run migration
Add the migrationPath
in console/config/main.php
and run yii migrate
:
// Add migrationPaths to console config: 'controllerMap' => [ 'migrate' => [ 'class' => 'yii\console\controllers\MigrateController', 'migrationPath' => [ '@vendor/mrstroz/yii2-wavecms-page/migrations', '@vendor/mrstroz/yii2-wavecms-metatags/migrations' ], ], ],
Or run migrates directly
yii migrate/up --migrationPath=@vendor/mrstroz/yii2-wavecms-page/migrations
yii migrate/up --migrationPath=@vendor/mrstroz/yii2-wavecms-metatags/migrations
Overriding classes
Classes can be overridden by:
classMap
attribute for WaveCMS module
'modules' => [ // ... 'wavecms-page' => [ 'class' => 'mrstroz\wavecms\page\Module', 'classMap' => [ 'Page' => \common\models\Page::class ] ], ],
- Yii2 Dependency Injection configuration in
backend/config/main.php
'container' => [ 'definitions' => [ mrstroz\wavecms\page\models\Page::class => common\models\Page::class ], ],
Overriding controllers
Use controllerMap
attribute for WaveCMS module to override controllers
'modules' => [ // ... 'wavecms' => [ 'class' => 'mrstroz\wavecms\page\Module', 'controllerMap' => [ 'text' => 'backend\controllers\TextController' ] ], ],
Overriding views
Use themes for override views
'components' => [ // ... 'view' => [ 'theme' => [ 'basePath' => '@app/themes/basic', 'baseUrl' => '@web/themes/basic', 'pathMap' => [ '@wavecms_page/views' => '@app/themes/basic/wavecms-page', ], ], ], // ... ],
Usage in frontend
Pages
- Add new rules to your urlManager. You can do it in one of your
Bootstrap
classes
<?php use mrstroz\wavecms\page\models\Page; use Yii; // ... //Parse request to set language before run ActiveRecord::find() Yii::$app->urlManager->parseRequest(Yii::$app->request); $modelPage = Yii::createObject(Page::class); $pages = $modelPage::find()->select(['link'])->byAllCriteria()->byType(['text'])->column(); if ($pages) { Yii::$app->getUrlManager()->addRules([ '<link:(' . implode('|', $pages) . ')>' => 'site/page' ]); }
- Get requested page by link in
page
action
<?php use mrstroz\wavecms\page\models\Page; // ... public function actionPage($link) { $page = Page::find()->getByLink($link)->one(); return $this->render($page->template ?: 'page', [ 'page' => $page ]); }
- If you need extra templates, you can add them to
Page
model incommon\config\bootstrap.php
<?php use mrstroz\wavecms\page\models\Page; // ... Page::$templates['contact'] = Yii::t('app', 'Contact');
Menu
- Get menu by type
<?php use mrstroz\wavecms\page\models\Menu; // ... $menu = Menu::find()->getMenu('top')->all(); // ... ?>
- Display menu in view.
<?php use mrstroz\wavecms\page\components\helpers\Front; // ... /** @var \mrstroz\wavecms\page\models\Menu $menu */ foreach ($menu as $item) { $class = (Front::isLinkActive($item) ? 'active' : ''); echo Front::link($item, $item->title, ['class' => $class]); } // ...
OR
<?php use mrstroz\wavecms\page\components\helpers\Front; // ... /** @var \mrstroz\wavecms\page\models\Menu $menu */ foreach ($menu as $item) { $class = (Front::isLinkActive($item) ? 'active' : ''); echo '<a href="'.Front::linkUrl($item->page_id, $one->page_url).'" class="'.$class.'">'.$item->title.'</a>'; } // ...
Meta tags
Add pages to sitemap
According to Sitemap module, we need to add behaviour to our AR model and then add model to sitemap module configuration (see frontend/config/main.php)
use himiklab\sitemap\behaviors\SitemapBehavior; public function behaviors() { return [ 'sitemap' => [ 'class' => SitemapBehavior::className(), 'scope' => function ($model) { /** @var \yii\db\ActiveQuery $model */ $model->select(['url', 'lastmod']); $model->andWhere(['is_deleted' => 0]); }, 'dataClosure' => function ($model) { /** @var self $model */ return [ 'loc' => Url::to($model->url, true), 'lastmod' => strtotime($model->lastmod), 'changefreq' => SitemapBehavior::CHANGEFREQ_DAILY, 'priority' => 0.8 ]; } ], ]; }
Used packages
- CKEditor https://github.com/MihailDev/yii2-ckeditor
- ElFinder https://github.com/MihailDev/yii2-elfinder
- Slugify https://github.com/powerkernel/yii2-slugify
- Select2 https://github.com/kartik-v/yii2-widget-select2
- Datepicker https://github.com/kartik-v/yii2-widget-datepicker
- Switch widget https://github.com/2amigos/yii2-switch-widget
- Sitemap - https://github.com/himiklab/yii2-sitemap-module
INWAVE - Internet Software House
inwave.eu