Тег переключателя ExpressionEngine работает непоследовательно

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

<li><h4>DERMATOLOGY</h4>
  <ul>
    {exp:channel:entries channel="specialist" dynamic="no" orderby="sp_order" sort="asc"}
      {if sp_specialty == "sp_dermatology"}
        <li>
          <a href="{title_permalink='meet'}"><img src="{sp_headshot}" /></a>
          <a href="{title_permalink='meet'}"><p>{title}</p></a>
        </li>                           
      {/if}
    {/exp:channel:entries}
  </ul>
</li>
<li><h4>EMERGENCY AND CRITICAL CARE</h4>
  <ul>
    {exp:channel:entries channel="specialist" dynamic="no" orderby="sp_order" sort="asc"}
      {if sp_specialty == "sp_emergency"}
        <li class="{switch='one|two'}">
          <a href="{title_permalink='meet'}"><img src="{sp_headshot}" /></a>
          <a href="{title_permalink='meet'}"><p>{title}</p></a>
        </li>                           
      {/if}
    {/exp:channel:entries}
  </ul>
</li>

Что происходит в случае неотложной помощи и интенсивной терапии, так это то, что с 5 записями, которые у меня есть под этим, классы возвращаются следующим образом: два, один, один, один, два. Любые предложения по получению поведения, которое мне нужно?


person brunam    schedule 25.10.2012    source источник
comment
Что произойдет, если вы уберете параметр orderby?   -  person Anna_MediaGirl    schedule 25.10.2012
comment
Интересно, что порядок классов остается прежним: два, один, один, один, два. Похоже, он применяет порядок сортировки перед оператором switch.   -  person brunam    schedule 25.10.2012
comment
@brunam просто сообщает вам о нашем предложении для конкретного сайта EE здесь (если вы уже поддерживаете его, вам нужно связать свою учетную запись, чтобы ваша репутация учитывалась) area51.stackexchange.com/proposals/46387/expressionengine   -  person Adrian Macneil    schedule 26.10.2012


Ответы (1)


Я понимаю, что вы имеете ввиду. Переменная переключателя применяет свою логику ко всем записям, возвращаемым циклом записей — вот почему вы видите нечетную нумерацию на отображаемой странице — потому что она применяет их к записям, возвращаемым циклом, к которым вы затем применяете условные выражения, чтобы сделать ваша группировка. Вы можете использовать параметр поиска, чтобы сделать это за вас, возвращая только те записи, которые вы ищете в каждом цикле. Так:

<li><h4>DERMATOLOGY</h4>
    <ul>
    {exp:channel:entries channel="specialist" search:sp_specialty="=sp_dermatology"  dynamic="no" orderby="sp_order" sort="asc"}
    <li>
      <a href="{title_permalink='meet'}"><img src="{sp_headshot}" /></a>
      <a href="{title_permalink='meet'}"><p>{title}</p></a>
    </li>                           
{/exp:channel:entries}
</ul>
</li>
<li><h4>EMERGENCY AND CRITICAL CARE</h4>
<ul>
{exp:channel:entries channel="specialist" search:sp_specialty="=sp_emergency" dynamic="no" orderby="sp_order" sort="asc"}
    <li class="{switch='one|two'}">
      <a href="{title_permalink='meet'}"><img src="{sp_headshot}" /></a>
      <a href="{title_permalink='meet'}"><p>{title}</p></a>
    </li>                           
{/exp:channel:entries}
</ul>
</li>

Таким образом, каждый цикл возвращает ТОЛЬКО совпадающие элементы, которые вы ищете, устраняя необходимость в условном выражении и позволяя параметру-переключателю работать так, как он хочет, применяя себя попеременно к каждой возвращаемой записи из цикла.

person Jean St-Amand    schedule 25.10.2012
comment
Работает блестяще. Спасибо за помощь! - person brunam; 25.10.2012
comment
Вы также можете использовать Stash, чтобы избежать циклов с несколькими каналами: записи и применить переключатель к выходу Stash. Но для небольших сайтов это работает нормально; просто многоканальные циклы: входы МОГУТ стать проблемой производительности. - person adrienne; 27.10.2012