dmstr/yii2-pages-module

适用于 Yii 2.0 框架的应用程序网站地图和导航管理模块

安装次数: 65,122

依赖关系: 3

建议者: 1

安全性: 0

星标: 31

关注者: 11

分支: 12

开放问题: 4

类型:yii2-extension

2.5.8 2024-04-26 10:51 UTC

This package is auto-updated.

Last update: 2024-08-26 11:33:14 UTC


README

Latest Stable Version Total Downloads License

适用于 Yii 2.0 框架的应用程序网站地图和导航管理模块

  • ⚠️ 0.14.0 和 0.18.0 版本中存在破坏性更改
  • ⚠️ 版本 > 2.5.0 中删除了 copy pages

更新了 数据结构公共属性,现在通过 domain_id 查询菜单项

需求

  • 在应用程序中配置了来自 codemix/yii2-localeurls 的 URL 管理器
  • 基于角色的访问控制;为每个 module_controller_action 配置 auth_items

安装

安装此扩展的首选方式是通过 composer

运行以下命令之一

composer require dmstr/yii2-pages-module "*"

或将以下内容添加到您的 composer.json 文件的 require 部分。

"dmstr/yii2-pages-module": "*"

设置

运行迁移

./yii migrate \
    --disableLookup=1 \
    --migrationPath=@vendor/dmstr/yii2-pages-module/migrations

配置

在应用程序配置中启用模块

// module configuration
'pages' => [
	'class' => 'dmstr\modules\pages\Module',
	'layout' => '@admin-views/layouts/main',
	'roles' => ['Admin', 'Editor'],
	'defaultPageLayout' => '@app/modules/frontend/layouts/main',
	'availableRoutes' => [
		'site/index' => 'Index Route',
	],
	'availableViews' => [
		'@app/views/site/index.php' => 'Index View',
	],
],


// if used want a url suffix, e.g. '.html', add Url rules for that
'urlManager' => [
	...
	'rules' => [
		'<pagePath:[a-zA-Z0-9_\-\./\+]*>/<pageSlug:[a-zA-Z0-9_\-\.]*>-<pageId:[0-9]*>.html' => 'pages/default/page',
		'<pageSlug:[a-zA-Z0-9_\-\.]*>-<pageId:[0-9]*>.html' => 'pages/default/page',
	],
	...
],

// register frontend asset for hiding pages via CookieButton
'on '. \yii\web\Application::EVENT_BEFORE_ACTION => function () {
    \dmstr\modules\pages\assets\PagesFrontendAsset::register(Yii::$app->controller->view);
},

使用设置模块配置额外的控制器

  • 将每条控制器路由添加到 pages 部分,键为 availableRoutes

设置

  • pages.availableRoutes - 每个访问域的路由(对于非管理员用户)
  • pages.availableViews - 每个访问域的视图(对于非管理员用户)
  • pages.availableGlobalRoutes - 全局路由(对于管理员用户)
  • pages.availableGlobalViews - 全局视图(对于管理员用户)

用法

导航栏(例如 layouts/main

通过 domain_id 查找根节点 / 离开节点,即 root

例如,使用 bootstrap Navbar

$menuItems = \dmstr\modules\pages\models\Tree::getMenuItems('root');

后端

    echo yii\bootstrap\Nav::widget(
        [
            'options'         => ['class' => 'navbar-nav navbar-right'],
            'activateItems'   => false,
            'encodeLabels'    => false,
            'activateParents' => true,
            'items'           => Tree::getMenuItems('root'),
        ]
    );

访问 /pages 为您的当前应用程序语言创建根节点。

  • 点击 树形图 图标
  • 域 ID菜单名称 作为 name identifier (no spaces and special chars) 输入并保存
  • 创建子节点
  • 分配名称、标题、语言和路由/视图
  • 保存
  • 现在您应该能够在应用程序的前端 Nav 小部件中看到该页面。

特质

我们使用 \dmstr\activeRecordPermissions\ActiveRecordAccessTrait 在活动记录级别实现检查访问行为

  • 所有者访问
  • 读取访问
  • 更新访问
  • 删除访问

锚点

自 0.12.0-beta1 起可用

👷 创建锚点链接的解决方案是在设置模块中定义一个路由,如 /en/mysite-2。在节点中,您可以通过使用 高级 URL 设置,并通过 {'#':'myanchor'} 来附加锚点。

建议在 树形图 模式下创建新条目。

i18n - 兄弟页面

在目标语言中查找兄弟页面

/**
 * Find the sibling page in target language if exists
 *
 * @param string $targetLanguage
 * @param integer $sourceId
 * @param string $route
 *
 * @return Tree|null
 * @throws \yii\console\Exception
 */
public function sibling($targetLanguage, $sourceId = null, $route = self::DEFAULT_PAGE_ROUTE);


Example 1:
---

// page id 12 is a node in language 'en'
$sourcePage = Tree::findOne(12);

// returns corresponding page object in language 'de' or null if not exists
$targetPage = $sourcePage->sibling('de');


Example 2:
---

// find by params
$targetPage = (new Tree())->sibling('de', 12, '/pages/default/page')

测试

需求

  • docker >=1.9.1
  • docker-compose >= 1.6.2

通过 "Potemkin"-Phundament 运行 Codeception

cd tests

启动测试堆栈

make all

运行测试

make run-tests

资源

tbd

dmstr logodmstr 构建