0

我什至不知道我是否在要求正确的事情。我拥有的是一个类别列表,这些类别将是过滤项目的链接。这是我开始的内容:

{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 次。我只想要每个匹配的字符串一个。不知道该怎么做。感谢您提供的任何见解。

4

1 回答 1

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 做到这一点,它从无开始并连接任何不在其中的类别。因此,后续检查会看到该类别已添加并跳过它。

于 2012-08-23T19:50:33.377 回答