我甚至不知道我是否要求正确的事情。我所拥有的是类别列表,这些类别将是过滤器项目的链接。这就是我的开始:
{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次。我只希望每个匹配的字符串各一个。不知道该怎么做。感谢您提供的任何见解。
答案 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执行此操作,该操作始于任何内容并连接任何不在其中的类别。因此,后续检查会看到该类别已添加并跳过它。