dft / silverstripe-custommenus
一个 Silverstripe 模块,允许您在网站前端创建可生成的自定义菜单。
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 %>
链接到自定义 DataObjects
默认情况下,此模块查找并使用 CMS 模块(允许链接到页面)。但是,添加到其他 DataObjects 的链接也很容易。
DataObject 要求
首先,确保您的自定义 DataObject
有以下方法可用
- 链接
- AbsoluteLink
- RelativeLink
此外,确保以下属性可用
- 标题
- 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