функция Silverstripe для возврата уровня меню - PullRequest
0 голосов
/ 03 августа 2011

Я пытаюсь написать функцию, которая возвращает уровни меню, которые видны на странице ... в данный момент я использую в шаблоне операторы <% if%>, например:

<div class="<% if Menu(1) %>navA<% end_if %> <% if Menu(2) %>navB<% end_if %> <% if Menu(3) %>navC<% end_if %>">...</div>

Который, если на странице 3 уровня меню, возвращает <div class="navA navB navC">

Мне нужна функция, которая возвращает меню самого низкого уровня на текущей странице, т.е. <div class="navC">

Спасибо

Ответы [ 2 ]

1 голос
/ 04 августа 2011

это вполне возможно. просто добавьте следующее к вашему Page_Controller классу:

function LowestLevel() {
    $i = 1;
    while($this->getMenu($i)->count() > 0) $i++;
    return 'level'.($i-1);
}

теперь вы можете назвать это в своем шаблоне так:

<div>lowest level: $LowestLevel</div>

$ LowestLevel выведет «level1», «level2» и т. Д.

в случае, если имена ваших классов должны быть похожи на 'navA', 'navB' ... вам нужно выполнить какое-то сопоставление, например 'level1' -> 'navA', что не должно быть слишком сложно - возвращайтесь ко мне если вам нужна помощь по этому вопросу.

0 голосов
/ 04 августа 2011

А как насчет следующего (непроверенного):

<div class="<% if Menu(3) %>navC<% else_if Menu(2) %>navB<% else %>navA<% end_if %>">...</div>

Возможно, вы захотите использовать некоторый пользовательский код в Контроллере для сложных логических операций, но это должно помочь...

...