横向/银翼自定义菜单

此包已被弃用,不再维护。作者建议使用 dft/silverstripe-custommenus 包。

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

安装次数: 6,793

依赖项: 4

建议者: 0

安全: 0

星标: 18

关注者: 7

分支: 13

类型:silverstripe-vendormodule

2.1.6 2022-07-26 20:24 UTC

This package is auto-updated.

Last update: 2024-07-08 18:25:23 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 %>

链接到自定义数据对象

默认情况下,此模块查找并使用 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