横向 / 银翼自定义菜单
Requires
Requires (Dev)
README
一个模块,允许您通过 SiteConfig 在 SilverStripe 网站/应用程序中创建自定义菜单。
要求
SilverStripe 4 或 5
安装说明
安装此模块的首选方法是使用 composer
composer require dft/silverstripe-custommenus
另外,您可以下载模块
- 下载并将模块添加到 SilverStripe 根目录下的 "custommenus" 文件夹
- 运行 dev/build?flush=all
使用方法
下载并安装模块后,您可以通过访问
http://www.yourwebsite.com/admin/settings
然后点击“菜单”标签。
您需要创建一个 MenuHolder
(或使用已安装的默认项)。
现在编辑 MenuHolder
并设置 BaseClass(这通常默认为 SiteTree
)。完成此操作并保存后,您将能够通过 ObjectID 字段将此菜单项与页面/对象关联。
模板
CustomMenus
提供了两种将菜单渲染到模板的方法,您可以选择以下之一
使用捆绑的模板
在您的模板代码中添加 $RenderedCustomMenu(menu-slug)
以使用 CustomMenu.ss 包含文件渲染一个 UL(具有唯一的类名)。
您也可以在您的主题中覆盖此模板以生成自定义的导航 HTML。
您还可以通过调用启用模板中的菜单标题
$RenderedCustomMenu(menu-slug, true)
遍历菜单项列表
另外,您可以通过添加以下代码生成自己的模板
<% if $CustomMenu(main-menu) %><% with $CustomMenu(main-menu) >
<ul class="menu">
<% loop $Me %>
<li class="$LinkingMode $FirstLast">
<a href="$Link">$MenuTitle</a>
</li>
<% end_loop %>
</ul>
<% end_with %><% end_if %>
访问基础 CustomMenuHolder
当在模板中渲染菜单时,您可以通过 $Holder
变量访问基础持有者,从上面的示例中,您可以使用
<% if $CustomMenu(main-menu) %><% with $CustomMenu(main-menu) >
<h2>$Holder.Title</h2>
<ul class="menu">
<% loop $Me %>
<li class="$LinkingMode $FirstLast">
<a href="$Link">$MenuTitle</a>
</li>
<% end_loop %>
</ul>
<% end_with %><% end_if %>
链接到自定义数据对象
默认情况下,此模块查找并使用 CMS 模块(允许链接到页面)。不过,添加对其他数据对象的链接也很容易。
数据对象要求
首先,确保您的自定义 DataObject
有以下方法可用
- Link
- AbsoluteLink
- RelativeLink
此外,确保以下属性可用
- Title
- MenuTitle
添加 DataObject
类
现在,您需要让 CustomMenuLink
了解此类。您可以通过将其(及其描述)添加到您的 config.yml 中来实现。
CustomMenuLink:
base_classes:
"SiteTree": "Page on site"
"Product": "A Product"
注意 您必须确保要添加到菜单中的任何数据对象都定义了 searchable_fields
配置变量。
自定义关联
有时使用对象的默认字段可能会引起问题(例如,您可能只想搜索页面的 MenuTitle)。
您可以通过以下额外的配置自定义链接类的加载方式
CustomMenuLink:
base_classes:
'SilverStripe\CMS\Model\SiteTree':
Title: 'A Page' # Name for this object in the CMS
Label: 'Title' # The title field used when displaying t he assotiation in the CMS
SearchFields: # Fields used to search for an assotiated object
- Title
- URLSegment
- StockID