Можно ли получить детей детей в меню SilverStripe?

Я собираю трехуровневое меню навигации в шаблоне SilverStripe 3.1, и в моем шаблоне есть следующий код:

<% loop $Menu(1) %>
...
  <% loop $Children %>
...
    <% loop $Children %>
     <li><a href="$Link">$Model</a></li>
    <% end_loop %>
  <% end_loop %>
<% end_loop %>

Однако я не получаю ожидаемого результата от 3-го уровня. Реально ли получить Детей Детей? Если нет, то что мне делать вместо этого? Спасибо!


person Highly Irregular    schedule 29.04.2015    source источник
comment
Этот код выглядит нормально. Вы должны иметь возможность проходить через цикл Children of a Children, как вы это делаете. Все ли страницы настроены на ShowInMenus? $Children возвращает только те страницы, для которых установлено значение ShowInMenus. В противном случае вы также можете использовать $AllChildren для получения скрытых страниц. Есть ли в дереве сайта страницы глубиной 3 уровня? Что такое $Model? Это пользовательская переменная, которую вы добавили в класс Page?   -  person 3dgoo    schedule 29.04.2015
comment
@3dgoo Да, на всех страницах, которые я хочу отобразить, ShowInMenus настроен правильно. Да, есть страницы 3 уровня в глубину. И да, $Model — это пользовательская переменная.   -  person Highly Irregular    schedule 29.04.2015
comment
@3dgoo, изучая это подробнее, похоже, я получаю значение $Link, но не модель, поэтому мне просто нужно исследовать пользовательскую переменную. Спасибо за вашу помощь; Вы хотели бы переместить свой комментарий, чтобы быть ответом?   -  person Highly Irregular    schedule 29.04.2015
comment
Рад, что смог помочь. Конечно, я опубликую свои комментарии в качестве ответа.   -  person 3dgoo    schedule 29.04.2015
comment
Когда вы обнаружите свою проблему, обязательно поделитесь своим решением, если оно поможет кому-то в будущем.   -  person 3dgoo    schedule 29.04.2015


Ответы (1)


Да, можно пройти цикл «Дети детей».

Ваш код кажется мне правильным. Он должен работать правильно.

Вот несколько возможных проблем для проверки.

Убедитесь, что для всех страниц на каждом уровне ShowInMenus установлено значение true. $Children и $Menu(1) возвращают только те страницы, для которых ShowInMenus установлено значение true. Этот флажок можно найти на вкладке «Настройки» любой страницы. В противном случае вы можете использовать $AllChildren вместо $Children, чтобы также получить скрытые страницы.

Убедитесь, что в дереве сайта есть страницы глубиной 3 уровня. Очевидная вещь для проверки.

$Model не является встроенной переменной страницы. Это должна быть пользовательская переменная, которую вы установили. Убедитесь, что для этого задана страница, значения заполнены и она доступна на внешнем интерфейсе.

Вот некоторый код тестового шаблона, который вы можете использовать для проверки вывода дерева вашего сайта. Это может помочь вам в отладке вашей проблемы:

<ul>
<% loop $Menu(1) %>
    <li>
        <a href="$Link">$Title - $Model</a>
        <% if $Children %>
        <ul>
        <% loop $Children %>
            <li>
                <a href="$Link">$Title - $Model</a>
                <% if $Children %>
                <ul>
                <% loop $Children %>
                    <li>
                        <a href="$Link">$Title - $Model</a>
                    </li>
                <% end_loop %>
                </ul>
                <% end_if %>
            </li>
        <% end_loop %>
        </ul>
        <% end_if %>
    </li>
<% end_loop %>
</ul>
person 3dgoo    schedule 29.04.2015