Заполните пункты меню в разных <div> - PullRequest
0 голосов
/ 18 июля 2011

Я пытаюсь заполнить четыре пункта меню в Silverstripe.Мне удалось заполнить первые два пункта меню SS, используя li class = "area {$ Pos}" в одном div.Тем не менее, третий и четвертый пункты меню отличаются по классу и классу от первых двух.Я искал, но не уверен, как использовать SS для заполнения элементов третьего и четвертого меню в разных div (/ second div> и классе?1002 * Вот мой код.

<div id="top">
<ul class="sf-menu">
     <% control Menu(1) %>
       <li id="area{$Pos}">
        <a href="#a">$MenuTitle</a>
           <% if Children %>
                 <ul><% control Children %>
                        <li>
                           <a href="#aa">$MenuTitle</a>

                         <% if Children %>
                            <ul>
                            <% control Children %>
                                 <li>
                                 <a href="#aa">$MenuImg.SetSize(20,20) $MenuTitle</a>
                                  </li>
                            <% end_control %>
                            </ul>
                        <% end_if %>
                       </li>
                   <% end_control %>

                </ul><% end_if %>

          </li>
         <% end_control %>

</ul>
</div>

<div id="test" >
<ul class="sf-menu sf-vertical">
      <li id="area3">
      <a href="#a">Area 3</a>
      </li>

      <li id="area4">
      <a href="#">Area 4</a>
        <ul class="show_left">
          <li>
           <a href="#">Store one</a>

          </li>
          <li>
           <a href="#">Store Two</a>

          </li>

       </ul>
    </li>
</ul>
</div>

Ответы [ 2 ]

2 голосов
/ 19 июля 2011

вы уже используете $ Pos Control ( см. Документы ) в своем коде, вы также можете использовать его внутри блока if. это должно помочь (не проверено):

ВНИМАНИЕ этот фрагмент не работает должным образом. см. ОБНОВЛЕНИЕ ниже

<% control Menu(1) %>
<% if Pos == 1 || Pos == 2 %>
<div>render items 1 and 2 here</div>
<% end_if %>
<% end_control %>

<% control Menu(1) %>
<% if Pos == 3 || Pos == 4 %>
<div>render items 3 and 4 here</div>
<% end_if %>
<% end_control %>

просто обратите внимание, что синтаксис <% if Pos < 3 %> не поддерживается. для более чистого способа сделать то же самое, обратитесь к этому фрагменту на ssbits.

UPDATE

к сожалению, Silverstripe, похоже, не поддерживает более сложные условия, как указано выше. этот поддерживается ( как в документах ):

<% if MyBoolean || MyOtherBoolean %>

тогда как этот не:

<% if MyInteger == 1 || MyInteger == 2 %>

так что, похоже, лучшим решением будет второе, на которое я вам указал (фрагмент выше на ssbits). в вашем случае это может выглядеть следующим образом:

добавить функции в класс Page, который вы используете для проверки текущей позиции:

public function InFirstDiv() {
  return ($this->iteratorPos == 1 || $this->iteratorPos == 2);
}
public function InSecondDiv() {
  return ($this->iteratorPos == 3 || $this->iteratorPos == 4);
}

, затем назовите их в своем шаблоне:

<% control Menu(1) %>
<% if InFirstDiv %>
<div>render items 1 and 2 here</div>
<% end_if %>
<% end_control %>

<% control Menu(1) %>
<% if InSecondDiv %>
<div>render items 3 and 4 here</div>
<% end_if %>
<% end_control %>

выглядит не очень умно - но на этот раз должно сработать:)

1 голос
/ 19 июля 2011

ИМХО, вы НЕ хотите структурировать это по позиции, потому что, если вы хотите изменить его на 1-3 страницы в первом и 4-5 во втором div, вам нужно изменить базовый шаблон.

Вместо этого я бы создал 2 страницы (возможно, страницы с перенаправлением - вы можете выбрать это в CMS), под которыми вы бы добавили страницы, которые вы хотите отобразить в своем шаблоне.Таким образом, у вас будет что-то вроде этого в CMS:

  • Страница перенаправления / foo
    • Page1
    • Page2
  • Страница / бар перенаправления
    • Page3
    • Page4

В своем шаблоне вы можете использовать <% control ChildrenOf(foo) %> (или bar) длязайдите на страницы двух разных регионов.

ПРИМЕЧАНИЕ. Если вы столкнетесь с ошибками шаблона, обязательно переведите свою страницу в режим разработки и добавьте ?showtemplate=1 к своему URL.Это покажет вам файл скомпилированного шаблона, где вы сможете найти фактическую ошибку.

PS: Очевидно, вам придется изменить шаблон, если вы измените URL, но я стараюсь избегать этого в живых проектах(неработающие внешние ссылки, ...), в то время как новые пункты меню довольно распространены.

...