Silverstripe中的自定义导航菜单

时间:2015-11-08 20:15:59

标签: navigation silverstripe

我今天正在学习Silverstripe CMS并遇到了一个我无法找到答案的问题。

我有一个CSS驱动的下拉菜单,有三个主要标题。标题本身不是孩子们的链接。

我遇到的问题是我读取菜单的方式是从页面层次结构生成的。我的主菜单标题不是页面,那么我该如何开始,然后在每个标题下放置正确的页面链接?

我正在使用此代码动态生成菜单

<nav class="seven columns u-right-align main-nav">
      <ul style="position: relative; z-index: 10000">
                <% loop $Menu(1) %>
                    <li>$MenuTitle
                     <% if $LinkOrSection == section %>
                        <% if $Children %>
                              <ul>
                                 <% loop $Children %>
                                     <li><a href="$Link">$MenuTitle</a></li>
                                 <% end_loop %>
                             </ul>
                        <% end_if %>
                   <% end_if %>
               </li>
            <% end_loop %>
        </ul>
  </nav>

预期布局......

<nav class="seven columns u-right-align main-nav">
    <ul style="position: relative; z-index: 10000">
        <li>About <!--  I do not know where to create this title in SS -->
            <ul>
                <li><a href="">Annual Meeting</a></li>
                <li><a href="">History</a></li>
                <li><a href="">Society Calendar</a></li>
            </ul>
        </li>
    </ul>
</nav>

1 个答案:

答案 0 :(得分:3)

好吧,因为你不知道在哪里放置&#34;关于&#34; section title - 默认情况下,它不是在SilverStripe中构建的。您必须添加&#34; RedirectorPage&#34;为它,并改为重定向到第一个孩子。

幸运的是,其他人也遇到了这个问题,并且有some page types that do the trick for you

您可以重复使用已有的模板。

上面链接的网页类型在Controller的init()方法中具有funcitonality,可以重定向到第一个子节点,这非常简单:

function  init() {
    parent::init();

    if($this->Children()->Count()){
        Controller::redirect($this->Children()->First()->AbsoluteLink());
    }
}

因此,如果您使用默认RedirectorPage手动重定向,或者您想要更高级的东西,这取决于您。