dft/silverstripe-custommenus

一个 Silverstripe 模块,允许您在网站前端创建可生成的自定义菜单。

安装: 11

依赖项: 0

建议者: 0

安全: 0

星标: 18

关注者: 7

分支: 13

类型:silverstripe-vendormodule

2.1.6 2022-07-26 20:24 UTC

This package is auto-updated.

Last update: 2024-09-08 18:52:22 UTC


README

Scrutinizer Code Quality Code Intelligence Status Build Status

一个模块,允许您通过 SiteConfig 在 SilverStripe 网站或应用程序中创建自定义菜单。

要求

SilverStripe 4 或 5

安装说明

安装此模块的首选方式是通过 composer

composer require dft/silverstripe-custommenus

另外,您可以下载该模块

  1. 下载并将模块添加到 SilverStripe 根目录下的 "custommenus" 文件夹中
  2. 运行 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