从指定的pagetype parent的所有子项创建导航

时间:2015-02-18 17:12:45

标签: silverstripe

我正在创建一个包含持有者页面的网站,我想为这个和所有孩子创建一个共享导航树。我想出了一个相当难看的解决方案,并想知道是否有人有更好,更清洁的解决方案?

据我所知,有一个名为'InSection'的模板方法,但我相信这只匹配指定的页面,而不是页面类型。

<% with $Level(3) %>
    <% if $className == "fooHolder" %>
        <% with $Up %>
        <article>
            <nav id="contentNav">
                <ol>
                    <% with $Level(3) %><li><a href="$Link" title="$Title.XML">$MenuTitle.XML</a><% end_with %>
                        <% if $Menu(4) %>
                        <ol>
                            <% loop $Menu(4) %>
                                <li class="$LinkingMode"><a href="$Link" title="$Title.XML">$MenuTitle.XML</a>
                                    <% if $Children %>
                                        <ol>
                                        <% loop $Children %>
                                            <li class="$LinkingMode"><a href="$Link" title="$Title.XML">$MenuTitle.XML</a>
                                        <% end_loop %>
                                        </ol>
                                    <% end_if %>
                                </li>   
                            <% end_loop %>
                        </ol>
                        <% end_if %>
                    </li>
                </ol>               
            </nav>
            <section class="article-wrapper">
                $Content
            <section>
        </article>              
        <% end_with %>  
    <% else %>
        <% with $Up %>
               $Content
        <% end_with %>
    <% end_if %>
<% end_with %>

1 个答案:

答案 0 :(得分:2)

我已经提出了一个更好的解决方案,但总是对听到它感兴趣。

Page.php中的

public function parentFromPageType($pageType){

    if ($this->ClassName == $pageType) {
        $sectionRoot = $this;
    } else {
        $sectionRoot = $this->getAncestors()->filter(array(
            'ClassName' => $pageType
        ));
    }

    if ($sectionRoot ) {
        return $sectionRoot ;
    } else {
        return false;
    };
}

在Page.ss

<% if $parentFromPageType(CategoryIntroPage) %>
    <article>
        <nav id="contentNav">
            <ol>
                <% loop $parentFromPageType(CategoryIntroPage) %>
                    <li><a href="$Link" title="$Title.XML">$MenuTitle.XML</a>
                        <% if $Children %>
                            <% include NestedChildren %>
                        <% end_if %>
                    </li>   
                <% end_loop %>
            </ol>
        </nav>
        <section class="article-wrapper">
            $Content
        <section>
    </article>  
<% else %>
    $Content
<% end_if %>

在Includes / NestedChilden.ss

    <ol>
        <% loop $Children %>
            <li class="$LinkingMode"><a href="$Link" title="$Title.XML">$MenuTitle.XML</a>
                <% if $Children %>
                    <% include NestedChildren %>
                <% end_if %>
            </li>                       
        <% end_loop %>
    </ol>
</li>