【PHP】Smartyの使用例(導入前後の比較)
PHPテンプレートエンジン、Smartyを使用した実例を紹介します。
Smarty導入前後でソースを比較します。
Smartyの基本については、以前の記事で紹介しています。
環境:Smarty 3.1、PHP 7.4.4
・Before (Smarty導入前)
HTMLページ内にPHPをスクラッチで記述しています。
<main> <ul> <?php foreach($records as $record): $id = h($record["id"]); $record['comment'] !== NULL ? $withComment = 'with-comment' : $withComment = ''; ?> <?= "<li class='fadein'> <img src='import_media.php?id=$id' alt='".h($record['title'])."の画像'> <span class='img-title $withComment'>".h($record['title'])."</span> <p class='comment'>".h($record['comment'])."</p> </li> "; ?> <?php endforeach ?> </ul> <div id="pagination-area"> <div class="prev-link <?php echo h($prev_hidden);?>"> <a href="/?page=<?php echo h($current + 1)?>">前の10作品</a> </div> <div class="next-link <?php echo h($next_hidden);?>"> <a href="/?page=<?php echo h($current - 1)?>">次の10作品</a> </div> </div> <p class="contact"><a href="mailto:info@xxx.net"><span>contact</span></a></p> </main>
・After (Smarty導入後)
(変数の定義や出力の設定は実行ファイルで行なっている)
<main> <ul> {foreach $records as $record} <li class='fadein'> <img src='import_media.php?id={$record["id"]}' alt="{$record['title']}の画像"> {if $record['comment'] !== NULL} <span class='img-title with-comment'>{$record['title']}</span> {else} <span class='img-title'>{$record['title']}</span> {/if} <p class='comment'>{$record['comment']}</p> </li> {/foreach} </ul> <div id="pagination-area"> <div class="prev-link {$prev_hidden}"> <a href="/?page={$current + 1}">前の10作品</a> </div> <div class="next-link {$next_hidden}"> <a href="/?page={$current - 1}">次の10作品</a> </div> </div> <p class="contact"><a href="mailto:info@xxx.net"><span>contact</span></a></p> </main>
導入前よりもソースが簡潔になっている事がわかると思います。
(<?phpタグが登場しない)
条件式のif文や、繰り返しのforeach文などのロジック部分には
Smartyにあらかじめ用意されている組み込み関数と呼ばれる構文を使用する事ができ、
素のPHPよりもHTML構造が崩れにくいシンプルな記述を実現出来ます。
組み込み関数や構文の一覧など、詳細はSmarty公式リファレンスを参照