heyday / silverstripe-menumanager
允许通过CMS处理复杂的菜单管理,当简单的树结构不足以满足需求时。
Requires
Requires (Dev)
- squizlabs/php_codesniffer: ^3.7.2
This package is auto-updated.
Last update: 2024-09-08 21:18:04 UTC
README
该菜单管理模块用于在网站树层次结构不足以满足需求时创建自定义菜单结构。
最新版本仅支持SilverStripe 4,请查看2.0分支以获取与SilverStripe 3.x兼容的版本。
许可证
Menu Manager遵循MIT许可证
安装
composer require heyday/silverstripe-menumanager "^3.0"
完成此步骤后,在终端或类似环境中导航到SilverStripe根目录,并运行composer install
或composer update
,具体取决于您是否已经使用了Composer。
用法
创建菜单使用菜单管理主要有两个步骤。
- 创建新的MenuSet
- 将MenuItems添加到该MenuSet中
创建MenuSet
这很简单。您只需给MenuSet一个名称(在模板中控制菜单时使用此名称引用)。
由于在模板中通常通过名称引用MenuSets,您可以在/dev/build任务期间自动创建集合。这些集合不能通过CMS删除。
Heyday\MenuManager\MenuSet: default_sets: - Main - Footer
创建MenuItems
保存您的MenuSet后,您可以添加MenuItems。
MenuItems有4个重要字段
- 页面
- 菜单标题
- 链接
- 新窗口
页面
将MenuItem关联到的页面。
菜单标题
如果您想通过页面链接菜单项,则此字段可以留空。如果不留空,则填写模板中要显示的标题。
链接
除非您想链接到外部网站,否则此字段可以留空。留空时,在模板中使用$Link将自动从关联的页面MenuItems中获取链接。如果在此字段中输入链接并选择页面,则链接将被您选择的页面覆盖。
新窗口
可以用作检查是否应向链接添加'target="_blank"'。
禁用CMS中的创建Menu Sets
有时定义的default_sets
已经包含项目中所需的所有菜单。您可以禁用CMS中创建新Menu Sets的功能
Heyday\MenuManager\MenuAdmin: enable_cms_create: false
注意:非默认Menu Sets仍然可以删除,以帮助整理不想要的CMS内容。
在模板中的使用
<% loop $MenuSet('YourMenuName').MenuItems %> <a href="{$Link}" class="{$LinkingMode}">{$MenuTitle}</a> <% end_loop %>
遍历所有 MenuSets及其项目
<% loop $MenuSets %>
<% loop $MenuItems %>
<a href="$Link" class="$LinkingMode">$MenuTitle</a>
<% end_loop %>
<% end_loop %>
可选地,您还可以限制遍历的MenuSets和MenuItems数量。
下面的示例将获取前4个MenuSets(如菜单管理中所见),以及每个的前5个MenuItems
<% loop $MenuSets.Limit(4) %>
<% loop $MenuItems.Limit(5) %>
<a href="$Link" class="$LinkingMode">$MenuTitle</a>
<% end_loop %>
<% end_loop %>
启用部分缓存
通过您的菜单启用部分缓存可以加快模板的渲染速度。
<% with $MenuSet('YourMenuName') %> <% cached 'YourMenuNameCacheKey', $LastEdited, $MenuItems.max('LastEdited'), $MenuItems.count %> <% if $MenuItems %> <nav> <% loop $MenuItems %> <a href="{$Link}" class="{$LinkingMode}"> $MenuTitle.XML </a> <% end_loop %> </nav> <% end_if %> <% end_cached %> <% end_with %>
允许对MenuSets进行排序
默认情况下,菜单集不能排序,但是,您可以将配置设置为允许它。
Heyday\MenuManager\MenuSet: allow_sorting: true
子站点支持
如果您使用SilverStripe Subsites,您可以通过将扩展应用于MenuSet使MenuManager子站点感知。
app/_config/menus.yml
Heyday\MenuManager\MenuSet:
create_menu_sets_per_subsite: true
extensions:
- Heyday\MenuManager\Extensions\MenuSubsiteExtension
Heyday\MenuManager\MenuItem:
extensions:
- Heyday\MenuManager\Extensions\MenuSubsiteExtension
代码规范
此项目遵循以下标准定义: