2010年6月2日

Smartyサンプル 1

【仕事サイトにSmartyの関連記事を書きました】
カラーミーショップのカスタマイズに便利なSmartyを学ぶ (1/2) 
カラーミーショップのカスタマイズに便利なSmartyを学ぶ (2/2)

 
カラーミーショップでは、Smartyと呼ばれるテンプレートエンジンが使用されています。

Smartyでやれること
・独自タグでデータ出力しページ上に表示させる (商品名や価格など。基本中の基本)
・デザインにより近いところでの、条件分岐やループ(JavaScriptでも条件分岐やループはできるがデザインが大変)
・正規表現と置換(regex_replace)が強力
たとえば、商品名を表示させる独自タグ(<{$product.name}>)には、「商品名への付加画像設定」で画像(New画像など)を指定した場合には、HTMLのimgタグがもれなくついてきます。
商品名のみが必要な場合は、
<{$product.name|regex_replace:'/\\<\\/?[^\\>]*\\>/':''}>
とすると、不要なタグ部分をのぞいて取り出せます(商品名によっては必要な部分までとりのぞいてしまいますが)。
そのほか、特定の文字列以降をごっそり消してしまうこともできます(例の場合は■以降を空の文字列に置換している)。
カラーミーには大・小2カテゴリーしかありませんので、商品名にカテゴリー要素を組み込んでおき、正規表現で上手に取り出すという使い方もできます。
<{$product.name|regex_replace:'/■.+/':''}>


Smartyの、あくまでサンプル
・$smarty リクエスト変数(たとえば、URLの”cid=”のあとの文字)などを参照する。例の場合は、商品検索時のカテゴリidを表示します。
<{$smarty.get.cid}>
・assign テンプレート変数を割り当てる。
<{assign var="name" value=$product.name|regex_replace:'/\\<\\/?[^\\>]*\\>/':''}>
<{$name|regex_replace:'/■/':'☆'}>
これでも同じこと(参考)
<{assign var="name" value=$product.name|regex_replace:'/\\<\\/?[^\\>]*\\>/':''|regex_replace:'/■/':'☆'}>
<{$name}>
・fetch コンテンツを読む。ページを読んで、必要な情報を切り出すことも可能です。
<{fetch file="http://~/?mode=srh&cid=&keyword=hoge" assign="res"}>
<{$res|regex_replace:'/\\<\\/?[^\\>]*\\>/':''}>
・strip_tags 変数の修飾子。あとから気づいたんですが、HTMLタグを取り除く機能は、わざわざ正規表現を使用して置換せずとも、はじめからついています(どう考えてもこっちのほうが簡単)。
例の場合は、商品名からHTMLタグを取り除いています。商品登録時に、「商品名への付加画像設定」をしていると、imgタグがつきます(たとえば、New画像など)。
<{$product.name|strip_tags}>
上記の場合はHTMLタグをひとつの空白に置き換えています。
さらに、別の文字列や空白なしにすることもできます(:以降で設定、下例では空白なし)。
<{$product.name|strip_tags:''}>

【参照リンク】
Smarty

【関連記事】
Smartyサンプル 2
ツィートする 2