mrstroz / yii2-wavecms-page
WaveCMS 的页面模块
0.4.6
2020-05-04 10:09 UTC
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
为Yii 2 WaveCMS提供的页面模块。
请首先从Yii 2 WaveCMS执行所有安装步骤。
安装
通过 composer 安装此扩展是首选方式。
运行
composer require --prefer-source "mrstroz/yii2-wavecms-page" "~0.4.0"
或者在您的 composer.json
文件的 require 部分添加
"mrstroz/yii2-wavecms-page": "~0.4.0"
到
所需
- 更新
backend/config/main.php
(Yii2 高级模板)
'modules' => [ // ... 'wavecms-page' => [ 'class' => 'mrstroz\wavecms\page\Module', /* * Override classes 'classMap' => [ 'Page' => 'common\models\Page', ] */ ], ],
表单视图可以被后端 主题 覆盖;
- 更新
frontend/config/main.php
(Yii2 高级模板)
'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'], ], ], ]
- 运行迁移
在 console/config/main.php
中添加 migrationPath
并运行 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' ], ], ],
或者直接运行迁移
yii migrate/up --migrationPath=@vendor/mrstroz/yii2-wavecms-page/migrations
yii migrate/up --migrationPath=@vendor/mrstroz/yii2-wavecms-metatags/migrations
覆盖类
可以通过以下方式覆盖类
- WaveCMS 模块的
classMap
属性
'modules' => [ // ... 'wavecms-page' => [ 'class' => 'mrstroz\wavecms\page\Module', 'classMap' => [ 'Page' => \common\models\Page::class ] ], ],
backend/config/main.php
中的 Yii2 依赖注入配置
'container' => [ 'definitions' => [ mrstroz\wavecms\page\models\Page::class => common\models\Page::class ], ],
覆盖控制器
使用 WaveCMS 模块的 controllerMap
属性来覆盖控制器
'modules' => [ // ... 'wavecms' => [ 'class' => 'mrstroz\wavecms\page\Module', 'controllerMap' => [ 'text' => 'backend\controllers\TextController' ] ], ],
覆盖视图
使用 主题 来覆盖视图
'components' => [ // ... 'view' => [ 'theme' => [ 'basePath' => '@app/themes/basic', 'baseUrl' => '@web/themes/basic', 'pathMap' => [ '@wavecms_page/views' => '@app/themes/basic/wavecms-page', ], ], ], // ... ],
前端使用
页面
- 在您的 urlManager 中添加新的规则。您可以在您的
Bootstrap
类中做到这一点
<?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' ]); }
- 通过
page
动作获取请求的页面
<?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 ]); }
- 如果您需要额外的模板,您可以将它们添加到
common\config\bootstrap.php
中的Page
模型中
<?php use mrstroz\wavecms\page\models\Page; // ... Page::$templates['contact'] = Yii::t('app', 'Contact');
菜单
- 按类型获取菜单
<?php use mrstroz\wavecms\page\models\Menu; // ... $menu = Menu::find()->getMenu('top')->all(); // ... ?>
- 在视图中显示菜单。
<?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]); } // ...
或者
<?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>'; } // ...
元标签
将页面添加到网站地图
根据 Sitemap 模块,我们需要向我们的 AR 模型添加行为,然后将模型添加到网站地图模块配置(请参阅 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 ]; } ], ]; }
使用的包
- 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
- 切换小部件 https://github.com/2amigos/yii2-switch-widget
- Sitemap - https://github.com/himiklab/yii2-sitemap-module
INWAVE - 互联网软件公司
inwave.eu