mrstroz/yii2-wavecms-page

WaveCMS 的页面模块

0.4.6 2020-05-04 10:09 UTC

This package is auto-updated.

Last update: 2024-09-04 19:23:15 UTC


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"

所需

  1. 更新 backend/config/main.php (Yii2 高级模板)
'modules' => [
    // ...
    'wavecms-page' => [
        'class' => 'mrstroz\wavecms\page\Module',
        /*
         * Override classes
        'classMap' => [
            'Page' => 'common\models\Page',
        ]
        */
    ],
],

表单视图可以被后端 主题 覆盖;

  1. 更新 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'],
        ],
    ],
]
  1. 运行迁移

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

覆盖类

可以通过以下方式覆盖类

  1. WaveCMS 模块的 classMap 属性
'modules' => [
    // ...   
    'wavecms-page' => [
        'class' => 'mrstroz\wavecms\page\Module',
        'classMap' => [
            'Page' => \common\models\Page::class
        ]
    ],
],
  1. 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',
            ],
        ],
    ],
    // ...
],

前端使用

页面

  1. 在您的 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'
    ]);
}
  1. 通过 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
    ]);
}
  1. 如果您需要额外的模板,您可以将它们添加到 common\config\bootstrap.php 中的 Page 模型中
<?php 
use mrstroz\wavecms\page\models\Page;
// ... 
Page::$templates['contact'] = Yii::t('app', 'Contact');

菜单

  1. 按类型获取菜单
<?php 
use mrstroz\wavecms\page\models\Menu;
// ...
$menu = Menu::find()->getMenu('top')->all();
// ...
?>
  1. 在视图中显示菜单。
<?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>';
}
// ...

元标签

yii2-wavecms-metatags

将页面添加到网站地图

根据 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
                ];
            }
        ],
    ];
}

使用的包

  1. CKEditor https://github.com/MihailDev/yii2-ckeditor
  2. ElFinder https://github.com/MihailDev/yii2-elfinder
  3. Slugify https://github.com/powerkernel/yii2-slugify
  4. Select2 https://github.com/kartik-v/yii2-widget-select2
  5. Datepicker https://github.com/kartik-v/yii2-widget-datepicker
  6. 切换小部件 https://github.com/2amigos/yii2-switch-widget
  7. Sitemap - https://github.com/himiklab/yii2-sitemap-module

INWAVE LOGO
INWAVE - 互联网软件公司
inwave.eu