foreachでループした最初の要素を判断する smarty 変数(プロパティ)
ループが開始されて最初の1回目を判別するには「first」プロパティを使用します。
$smarty.foreach.ループ名.first
具体的な記述例
{foreach from=$data item='value' name='name'}
{if $smarty.foreach.name.first}
最初:{$value}
{else}
{$value}
{/if}
{/foreach}
これを実行するとループの一番目だけ「最初:値」が出力され、後はループの数だけ「値」が出力されます。
freo で新着エントリーリストの最新分だけ表示を変える
このプロパティを用いて新着エントリーリストの最新分だけ出力される要素を変更します。以下の例は「freoでサイト全体を管理する | freo.jp」でダウンロードできるテンプレートの「default/default.html
」69行目からのコードを基にしています。
<h2>最近のブログ記事</h2>
<ul>
<!--{foreach from=$entries|smarty:nodefaults item='entry' name='latest'}-->
<!--{if $smarty.foreach.latest.first}-->
<li id="latest">
<h3><a href="{$freo.core.http_file}/view/{if $entry.code}{$entry.code}{else}{$entry.id}{/if}">{$entry.title}</a></h3>
<!--{if $entry_texts[$entry.id].excerpt}-->
{$entry_texts[$entry.id].excerpt|smarty:nodefaults|strip_tags|mb_truncate:100:'...'|escape}
<!--{/if}-->
</li>
<!--{else}-->
<li>{$entry.datetime|date_format:'%Y/%m/%d %H:%M'} ... <a href="{$freo.core.http_file}/view/{if $entry.code}{$entry.code}{else}{$entry.id}{/if}">{$entry.title}</a></li>
<!--{/if}-->
<!--{/foreach}-->
</ul>
<ul>
<li><a href="{$freo.core.http_file}/entry">ブログ記事一覧</a></li>
</ul>
このコードでは新着エントリーリストを出力するループに「name='latest'
」と名前を付け、ループの最初の要素ならばタイトルを<h3>
タグで括り、本文冒頭100文字を表示し、それ以外は日付とタイトルのみ表示するようになっています。その他、「/entry」で表示できる日付・カテゴリ・タグや添付ファイル・サムネイルもコードを記述すれば表示することが出来ます。
デザインは li#latest
に CSS を当てることで調整します。