foreachでループした最初の要素の表示

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 を当てることで調整します。