Smarty只显示匹配字符串的一次迭代

时间:2012-08-21 21:56:51

标签: smarty

我甚至不知道我是否要求正确的事情。我所拥有的是类别列表,这些类别将是过滤器项目的链接。这就是我的开始:

{foreach from=$items item=entry}
{strip}
    {foreach from=$entry->categories item='one_category'}
         {foreach from=$categories item='one'}
              {if $one_category.name == $one.name}
                  {$one.name}    
                  {$one.name|munge_string_to_url} 
              {/if}
         {/foreach}
     {/foreach}
{/strip}
{/foreach}

这是一个更好的版本:

因此,这列出了页面上使用的每个实例。目的是列出实例1x,如果有实例的话。

  <ul>
    <li><a class="active" href="#" data-filter="*">All</a></li>
    {foreach from=$items item=entry}
    {foreach from=$categories item='one'} 
     <li><a href="#" data-filter=".{$one.name|munge_string_to_url}">{$one.name}</a></li>
    {/foreach}{/foreach}
  </ul>

这显示所有项目但不正确,如果有20篇文章分配给一个类别,它会列出20次,如果有5篇文章分配给一个类别,它会列出5次。我只希望每个匹配的字符串各一个。不知道该怎么做。感谢您提供的任何见解。

1 个答案:

答案 0 :(得分:1)

我们试试这个。

<ul>
    <li><a class="active" href="#" data-filter="*">All</a></li>
    {assign var="tempCat" value=""}
    {foreach from=$items item=entry}
        {if $entry->categories} 
        {strip}
            {foreach from=$entry->categories item='category'}
                {if !$tempCat|strstr:$category.name} 
                    <li><a href="#" data-filter=".{$category.name|munge_string_to_url}">{$category.name}</a></li>
                    {assign var="tempCat" value=$tempCat|cat:$category.name}
                {/if}
            {/foreach}
        {/strip}
        {/if}
    {/foreach}
</ul>

基本上,我们的想法是保留您已添加到列表中的类别记录,而不是再次添加它们。我通过$ tempCat执行此操作,该操作始于任何内容并连接任何不在其中的类别。因此,后续检查会看到该类别已添加并跳过它。