EC-CUBEのためのSmartyの使い方まとめ

Pocket

EC-CUBEは無料で使えるため、コストを抑えながらECサイトを始めることができます。また、人気のブログツールであるWordpressのようにテンプレートを自由にカスタマイズしたり、様々なプラグインを導入してより多くの機能を追加することも可能。

このページではテンプレートのカスタマイズに欠かせないSmartyの使い方についてまとめておきたいと思います。

より詳しいSmartyの使い方に関してはこちらの日本語リファレンスが参考になります。

EC-CUBEのSmarty 使い方まとめ

細かい演算や値の処理などは基本的にクラス側でやるので、ここではテンプレート側でよく使う関数について紹介します。

Smartyのif文の使い方

if文は他の言語でもよく使うので改めて説明する必要もないのですが、Smartyでも同様の使い方が可能です。

基本的にはテンプレートに送られてきたデータの値を見て条件分岐させるときに使います。

<!--{if $tpl_login}-->

  <!-- ログインしている場合の処理 -->

<!--{else}-->

  <!-- ログインしていない場合の処理 -->

<!--{/if}-->

elseだけでなくelseifも使えるので、複数の条件をつけることもできますね。

Smartyのforeachの使い方

foreach関数も他の言語でよく使いますが、Smartyでは若干書き方が異なります。

<!--{foreach 
    from = $arrItem  // 配列
    item = "item"     // 連想配列の値
    key  = "key"      // 連想配列のキー
    name = "loop"     // ループ名
}-->
    
    <!-- 繰り返し要素の処理 -->

<!--{foreachelse}-->

    <!-- 配列(fromの中身)が空だったときの処理 -->

<!--{/foreach}-->

配列の要素とキー値を取り出すので連想配列の場合にこちらを使います。通常の配列の場合はkeyを設定せず、formとitemだけでも使用可能。

また、配列に値があるかどうかをif文を使って判定することもありますが、foreachelseを使うことで空の場合の処理を記述することもできます。

あと、Smartyでは便利なオプションが用意されています。ループと合わせて使うことでより複雑な処理も可能です。

  • index : ループインデックス、0からスタート
  • iteration : 現在のループインデックス、1からスタート
  • first : 最初かどうか
  • last : 最後かどうか
  • total : ループの合計回数
<ul>
<!--{foreach 
    from = $arrItem  // 配列
    item = "item"     // 連想配列の値
    key  = "key"      // 連想配列のキー
    name = "loop"     // ループ名
}-->
    
    <!-- 繰り返し要素の処理 -->
    <li>
        <!--{$smarty.foreach.loop.iteration}-->番目は
        <!--{$item}-->です。
    </li>

<!--{foreachelse}-->

    <!-- 配列(fromの中身)が空だったときの処理 -->
    <li>データがありません。</li>

<!--{/foreach}-->
</ul>
<p>※現在<!--{$smarty.foreach.loop.total}-->件表示しています。</p>

Smartyのsectionの使い方

sectionも先ほどのforeachと同様ループ処理を行う関数ですが、こちらはforeachと違いキー値を取得できません。なので、通常の配列を使用する場合に使います。

<!--{section 
    loop  = $arrItem  // 配列
    name  = "item"     // セクション名
    start = 0        // ループの開始位置、0スタート
    step  = 1        // ループのステップ
    max   = 9        // ループ最大回数
}-->
    
    <!-- 繰り返し要素の処理 -->

<!--{sectionelse}-->

    <!-- 配列(loopの中身)が空だったときの処理 -->

<!--{/section}-->

また、先ほどのforeachと同様オプションも用意されています。オプションはforeachと同じものを使用できます(一部異なるものもあるので詳細はリファレンスページ参照)。

<ul>
<!--{section 
    loop  = $arrItem  // 配列
    name  = item     // セクション名
    start = 0        // ループの開始位置、0スタート
    step  = 1        // ループのステップ
    max   = 9        // ループ最大回数
}-->
    
    <!-- 繰り返し要素の処理 -->

    <!--{if $smarty.section.item.first}-->
        <li class="first">
    <!--{elseif $smarty.section.item.last}-->
        <li class="last">
    <!--{else}-->
        <li>
    <!--{/if}-->

        <!--{$smarty.section.item.iteration}-->番目は
        <!--{$arrItem[item]}-->です。
    </li>

<!--{sectionelse}-->

    <!-- 配列(fromの中身)が空だったときの処理 -->
    <li>データがありません。</li>

<!--{/section}-->
</ul>
<p>※現在<!--{$smarty.section.item.total}-->件表示しています。</p>

Smartyの修飾子の使い方

最後にSmartyの修飾子について。修飾子とは変数や文字列を整形したり、日付を見やすくフォーマットしたりする機能。|で変数と修飾子を区切って使用します。

書き方は簡単。変数に|を挟んで修飾子を書けばいいだけ。

<!--{$item|default:"デフォルトの値"}-->

こんな感じで付け足すだけで文字列を整形してくれたりするので使える場所があれば使っていきたい機能ですね。

結構たくさんあるのでこちらのリファレンスページを参照してください。

EC-CUBEのSmartyまとめ

ここまで基本的なSmartyの使い方を紹介しました。if文や繰り返し関数が使えればだいたいのことはできると思います。

さらに細かい処理を行う場合はクラス側でやってしまうのが良いでしょう。テンプレート側ではあくまでもデータの表示に関するところだけを担当し、データの取得や演算などはクラス側で行うようにします。