エントリのループがあり、1 つおきのエントリにフォーマットを適用したいと考えています。クラスだけでなく、いくつかの基本的な HTML マークアップも適用します。これどうやってするの?
3 に答える
この質問はよく出てくるようなので、簡単な例を投稿すると思いました。
{exp:channel:entries channel="whatever"}
{switch="<div class='entry'>|"}
<h2>{title}</h2>
{if count != total_results}{switch="|</div>"}{/if}
{if count == total_results}</div>{/if}
{/exp:channel:entries}
この例では、「entry」のクラスを持つ div が 2 つおきのエントリをラップしています。フロントエンドのスイッチ変数は非常に単純です。バックエンドは 2 つの条件を使用します。エントリがループの最後のエントリである場合は、DIV を閉じます。エントリがループの最後のエントリでない場合は、2 番目のエントリごとにのみ DIV を閉じます (ループの先頭でのスイッチ変数の反映)。
ここで、switch 変数は引用符に非常に敏感であることに注意してください。したがって、この方法で HTML を switch 変数内に挿入する場合は、二重引用符ではなく単一引用符を使用する必要があります。これは単純な挿入には問題ありませんが、より複雑な書式設定を念頭に置いている場合は少し不親切かもしれません. うまくいけば、これが何人かの人々を助け、このアイデアを自由に拡張してください.
この状況で役立つプラグインGWcode Alternateもあります。他の回答で言及されているネイティブのスイッチタグを使用することを好むため、私は自分で使用していません。
私が使用した例は、特に、すべてのエントリでDIVが必要ではなく、特定の間隔でDIVをラップする場合に使用しました。たとえば、一度に3つのエントリを含むjQueryスライダーが必要な場合に一般的です。これは明らかに私の例の目的でした。すべてのエントリは、私の例が意図したものである間隔と見なすものではありません。確かにそれはエッジケースですが、単純な条件のみでネイティブ機能を使用するという課題に対する単純なソリューションをキャプチャするのに十分な頻度で発生するエッジケースです。