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>

これはすべての項目を表示しますが、正しくありません。1 つのカテゴリに 20 個の記事が割り当てられている場合は 20 回、1 つのカテゴリに 5 個の記事が割り当てられている場合は 5 回表示されます。一致する文字列ごとに1つずつ必要です。何をすべきかについての手がかりではありません。あなたが提供できる洞察をありがとう。

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 に答える