Smartyを使う2 if文

PHP

Smartyを使って、条件分岐(if)で表示を変える

Smartyを使う

SmartyではPHPなどと同じく、if 文で
「○○だったらA」
「○○だったらA、そうでなければB」
というようにHTMLに埋め込んで表示を変更することができます。

使い方は、Smartyを使うと同じ例でいくと

<構成> 

     test.php
         |
         |-templatesディレクトリ
         |    |-temlate.html
         | 
         |-templates_cディレクトリ
    

・test.php

 <?php
 require_once('Smarty/libs/Smarty.class.php');
 
 $smarty=new Smarty();
 $template_dir='./templates';
 $compile_dir='./templates_c';
 $animal="Buta";
 $smarty->assign("animal",$animal);
 $smarty->display("template.html");
 ?>

・template.html

 <html>
 {if $animal=="Buta"}これは豚です。{/if} 

 (解説…変数 $animal がButaの場合、「これは豚です。」と表示させる。)

 </html>

ブラウザからtest.phpにアクセスすると、次のようなHTMLページが表示されるはずです。

 <html>
 これは豚です。
 </html>

さらにtest.phpで$animal=”Buta”でない場合、「これは豚でない」と表示させる場合

 ・template.html
 <html>
 {if $animal=="Buta"}これは豚です。
 {else}
 これは豚ではありません{/if} 

 (解説…変数 $animal がButaの場合、「これは豚です。」と表示、そうでなければ「これは豚ではありません」と表示。)

 </html>

{if …}
で始まる文は必ず{/if}で終わるようにしないとエラーが出ます。

Smaryマニュアル
http://www.smarty.net/manual/ja/language.function.if.php

Smartyを使う

PHP

Smartyを使う

Smartyはテンプレートエンジンで、使うメリットとしては

  • デザインとロジックを分離して考えられる
  • それによるデザイナーとの分業
  • 簡単な処理もできる

などがあります。
要は、HTMLでデザイン、インターフェースをつくり、Smartyを使ったPHPでプログラムが書ける、ということだと思います。

Smartyを設置するで設定できたら、次は使い方です。

使い方例

具体的に使い方例です。超簡単なプログラムをSmartyを使ってHTMLに反映させます。
<構成> 

     test.php
         |
         |-templatesディレクトリ
         |    |-temlate.html
         | 
         |-templates_cディレクトリ
    

・test.php

 <?php
 require_once('Smarty/libs/Smarty.class.php');
 
 $smarty=new Smarty();
 $template_dir='./templates';
 $compile_dir='./templates_c';
 $animal="Buta";
 $smarty->assign("animal",$animal);
 $smarty->display("template.html");
 ?>

・template.html

 <html>
 {$animal}
 </html>

ブラウザからtest.phpにアクセスすると、次のようなHTMLページが表示されるはずです。

 <html>
 Buta
 </html>

続きは、下記のサイトなどで詳しいです。
http://phpspot.org/blog/archives/2005/04/smarty1_1.html

Smaryマニュアル
http://smarty.php.net/manual/ja/

SmartyとJavascriptを使う

PHP

Smartyを使ってHTMLを出力するときに、Javascriptの内容をSmartyが間違って解釈してしまい、エラーになる時があります。
その場合は、

 {literal}(javascriptの中身){/literal}

とすれば、{literal}と{/literal}の間はSmartyが解釈をしないので、エラーになりません。

Smartyを使う

Smartyでforeach ループ回数が知りたいっす

Smartyでforeach ループ回数が知りたいっす

そんな時、

{foreach from=$hairetu item=”item” name=”loopKaisuu”}

こんな感じでforeachを書きましょう。
ポイントはnameだけなので、fromとitemは何でもいいっす。

このforeach文の中で何回ループしたかの回数を取得したいときは、

{$smarty.foreach.loopKaisuu.index}

こう書けば分かります。
indexの場合はループ回数が0からスタートですが、
1からスタートしたい時はiterationを使います。

{$smarty.foreach.loopKaisuu.iteration}

これでforeach文の中でループ回数を取得して、
if文等で条件分岐ができますね!!!

{if $smarty.foreach.loopKaisuu.index < 10 } ↑こんな感じ はい!! by 芦野輝明 twitter→https://twitter.com/teriyakiegg

PHP

SmartyでUTF-8のデータをShift_JISに変換

PHP

Smartyを使ってUTF-8のデータをShift_JISに変換する

私の場合は、携帯のサイトを作成するためでした。
PCサイト用で持っているUTF-8のデータをShift_JISで表示したいのに、簡単な方法がないかな~、と探してましたら、こんな方法を見つけました。

・はてな:PHPモジュールのSmartyを使用していて、PHPとテンプレートのエンコードをEUCで保存して、出力をShift-Jisにしたいのですが、どの様にすればいいでしょうか?
http://q.hatena.ne.jp/1170847935

上記を参考にして、UTF-8からShift_JISへの変換です。

 $smarty->register_outputfilter("Encode_utf8tosjis");
 
 function Encode_utf8tosjis ($tpl_output, &$smarty) {
 
 $tpl_output = mb_convert_encoding($tpl_output, 'Shift_JIS', 'UTF-8');
 return $tpl_output;
 
 }

参考:Smartyを設置する