ExpressionEngine的开关标签工作不一致

3
在ExpressionEngine中,我正在创建一个带有条件语句的列表,但它返回了一些奇怪的行为。下面的代码是其中的一部分:
<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个条目,返回的类别是这样的:两个、一个、一个、一个、两个。请问如何获得所需的行为?

如果您删除orderby参数会发生什么? - Anna_MediaGirl
有趣的是,类别顺序保持不变,两个,一个,一个,一个,两个。看起来它在 switch 语句之前应用了排序顺序。 - brunam
@brunam,我想让你知道我们为EE专门网站的提案(如果你已经支持它,你需要链接你的账户,这样你的声望才能算在里面)http://area51.stackexchange.com/proposals/46387/expressionengine - Adrian Macneil
1个回答

6

我理解你的意思。switch变量将其逻辑应用于由entries循环返回的所有条目,这就是为什么您在呈现的页面中看到奇怪的编号 - 因为它们应用于您随后应用条件语句进行分组的循环返回的条目。您可以使用搜索参数来为您完成其中一些工作,在每个循环中仅返回您要查找的条目。像这样:

<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>

这样,每个循环都只返回你正在寻找的匹配项,消除了条件语句的需要,并允许switch参数按照其要求进行操作 - 以交替方式应用于从循环中返回的每个条目。

运行得非常出色。感谢您的帮助! - brunam
您也可以使用Stash来避免多个channel:entries循环,并将switch应用于Stash输出。但对于较小的站点,这种方法效果良好;只是多个channel:entries循环可能会成为性能问题。 - adrienne

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接