コンバンワー、中の人デスヨー(゚д゚)ノ


さて今回はすまーてー後編。


終わるのか終わらんのかわからないですが終わらせます。(ぇ


       ,;r''"~ ̄^'ヽ,
      ./       ;ヽ   <猫ちゃん大好きぃ
      l  _,,,,,,,,_,;;;;i     フゥハハハーハァー
      l l''|~___;;、_y__ lミ;l
      ゙l;| | `'",;_,i`'"|;i |
     ,r''i ヽ, '~rーj`c=/
   ,/  ヽ  ヽ`ー"/:: `ヽ
  /     ゙ヽ   ̄、:::::  ゙l,
 |;/"⌒ヽ,  \  ヽ:   _l_  彡
 l l    ヽr ヽ | _⊂////;`)  ナデナデ
 ゙l゙l,     l,|  彡  l,,l,,l,|,iノ∧
 | ヽ    ヽ   _ _ ( ・∀・)
  "ヽ     'j ヽヽ, ̄ ,,,,,U/"U,,
   ヽ    ー──''''''""(;;)   ゙j
   ヽ、_   __,,,,,r-'''''ーー'''''


フゥハハハーハァー


さてそういうことで後編では関数について取り扱っていきますYO


前編でリテラル{literal}{/literal}というモノを取り扱いましたが、リテラルも関数のうちの一つです。


         ナ ゝ   ナ ゝ /    十_"    ー;=‐         |! |!
          cト    cト /^、_ノ  | 、.__ つ  (.__    ̄ ̄ ̄ ̄   ・ ・
ミミ:::;,!      u       `゙"~´   ヾ彡::l/VvVw、 ,yvヾNヽ  ゞヾ  ,. ,. ,. 、、ヾゝヽr=ヾ
ミ::::;/   ゙̄`ー-.、     u  ;,,;   j   ヾk'! ' l / 'レ ^ヽヘ\   ,r゙ゞ゙-"、ノ / l! !ヽ 、、 |
ミ/    J   ゙`ー、   " ;, ;;; ,;; ゙  u ヾi    ,,./ , ,、ヾヾ   | '-- 、..,,ヽ  j  ! | Nヾ|
'"       _,,.. -─ゝ.、   ;, " ;;   _,,..._ゞイ__//〃 i.! ilヾゞヽ  | 、  .r. ヾ-、;;ノ,.:-一'"i
  j    /   ,.- 、  ヾヽ、 ;; ;; _,-<  //_,,\' "' !| :l ゙i !_,,ヽ.l `ー─--  エィ' (. 7 /
      :    ' ・丿   ̄≠Ξイ´,-、 ヽ /イ´ r. `ー-'メ ,.-´、  i     u  ヾ``ー' イ
       \_    _,,......::   ´゙i、 `¨ / i ヽ.__,,... '  u ゙l´.i・j.冫,イ゙l  / ``-、..- ノ :u l
   u      ̄ ̄  彡"   、ヾ ̄``ミ::.l  u   j  i、`ー' .i / /、._    `'y   /
              u      `ヽ  ゙:l   ,.::- 、,, ,. ノ ゙ u ! /_   ̄ ー/ u /
           _,,..,,_    ,.ィ、  /   |  /__   ``- 、_    l l  ``ーt、_ /  /
  ゙   u  ,./´ "  ``- 、_J r'´  u 丿 .l,... `ー一''/   ノ  ト 、,,_____ ゙/ /
        ./__        ー7    /、 l   '゙ ヽ/  ,. '"  \`ー--- ",.::く、
       /;;;''"  ̄ ̄ ───/  ゙  ,::'  \ヾニ==='"/ `- 、   ゙ー┬ '´ / \..,,__
、      .i:⌒`─-、_,....    l   /     `ー┬一'      ヽ    :l  /  , ' `ソヽ
ヾヽ     l      `  `ヽ、 l  ./  ヽ      l         )  ,; /   ,'    '^i



関数、正確に言うと『組み込み関数』なんですがね。

テンプレートというと、ただ値を埋め込むだけ、というイメージですが、関数を埋め込むことでテンプレート内に処理を埋め込むことが可能です。

処理といっても、プログラムコードを埋め込むという話ではなく(VCに分ける意味がなくなってしまうぉ(´・ω・`)ショボン)テンプレートタグを埋め込みます。

テンプレートタグを埋め込むことでさまざまな処理を行って表示させることができるようになります。


例えば条件分岐や繰り返し等。


この組み込み関数によるテンプレートタグはイパーイ用意されているので今回はその代表的なものを挙げていきましょう。


まずは条件分岐タグ。書式は次の通り。


{if 条件の指定}

...条件が成立するときの処理


{elseif 条件の指定}

...条件が成立するときの処理


{else}

...条件が成立しない時の処理

{/if}



基本は{if}{/if}ですYO!


基本セットは上記2つ。

それだけでも条件が成立時のみ何かを出力!という働きにできます。

{elseif}は最初のif文が成立しない場合に次の条件を提示して、それが成立する場合に出力させます。

{if}条件を連結する際に使います。

{else}は{if}条件が成立しない場合に使います。


PHPのif文そのまんまな気がしますが・・・まぁ実例としてやっていきましょう。


index.tpl
{config_load file='index.conf' section='index'}
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"
http://www.w3c.org/TR/xhtml1/DTD/xhtml1-transitional.dtd ">
<html xmlns="
http://www.w3.org/1999/xhtml ">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>{#title#}</title>
<style>
{literal}
table{{/literal}{#table_style#}{literal}}
th{{/literal}{#th_style#}{literal}}
.msg{{/literal}{#msg_style#}{literal}}
{/literal}
</style>
</head>

<body>
<h1>{#headline#}</h1>
<pre><p class="msg">{$message|escape}</p></pre>
<table>
<form method="post" action="index.php">
<tr><th>名前</th>
<td><input type="text" name="name" size="40"></td></tr>
<tr><th>アドレス</th>
<td><input type="text" name="mail" size="40"></td></tr>
<tr><th>電話番号</th>
<td><input type="text" name="tel" size="40"></td></tr>
<tr><td></td>
<td><input type="submit" value="送信"></td></tr>
</form>
</table>

</body>
</html>

↑を↓のように修正。


index.tpl
{config_load file='index.conf' section='index'}
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"
http://www.w3c.org/TR/xhtml1/DTD/xhtml1-transitional.dtd ">
<html xmlns="
http://www.w3.org/1999/xhtml ">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>{#title#}</title>
<style>
{literal}
table{{/literal}{#table_style#}{literal}}
th{{/literal}{#th_style#}{literal}}
.msg{{/literal}{#msg_style#}{literal}}
{/literal}
</style>
</head>

<body>
<h1>{#headline#}</h1>
<pre><p class="msg">{$message|escape}</p></pre>
<table>
<form method="post" action="index.php">
<tr><th>名前</th>
<td>
{if $name==''}
<input type="text" name="name" size="40">
{else}
{$name}<input type="hidden" name="name" value="{$name}">
{/if}
</td></tr>


<tr><th>アドレス</th>
<td>
{if $mail == ''}
<input type="text" name="mail" size="40">
{else}
{$mail}<input type="hidden" name="mail" value="{$mail}">
{/if}
</td></tr>
<tr><th>電話番号</th>
<td>
{if $tel == ''}
<input type="text" name="tel" size="40">
{else}
{$tel}<input type="hiden" name="tel" value="{$tel}">
{/if}
</td></tr>
<tr><td></td>
<td><input type="submit" value="送信"></td></tr>
</form>
</table>

</body>
</html>


つぎにコントローラーの修正。


index.php
<?php
require_once('Smarty.class.php');
$smarty = new Smarty();

if($_POST != null){
$smarty->assign('message',implode("\n",$_POST));
}else{
$smarty->assign('message','入力してください。');
}

$smarty->display('index.tpl');

?>


↑を↓のように修正。


index.php
<?php
require_once('Smarty.class.php');
$smarty = new Smarty();

if($_POST != null){
$smarty->assign('name',$_POST['name']);
$smarty->assign('mail',$_POST['mail']);
$smarty->assign('tel',$_POST['tel']);

}else{
$smarty->assign('name','');
$smarty->assign('mail','');
$smarty->assign('tel','');
}

$smarty->display('index.tpl');

?>


       ,;r''"~ ̄^'ヽ,
      ./       ;ヽ   <猫ちゃん大好きぃ
      l  _,,,,,,,,_,;;;;i     フゥハハハーハァー
      l l''|~___;;、_y__ lミ;l
      ゙l;| | `'",;_,i`'"|;i |
     ,r''i ヽ, '~rーj`c=/
   ,/  ヽ  ヽ`ー"/:: `ヽ
  /     ゙ヽ   ̄、:::::  ゙l,
 |;/"⌒ヽ,  \  ヽ:   _l_  彡
 l l    ヽr ヽ | _⊂////;`)  ナデナデ
 ゙l゙l,     l,|  彡  l,,l,,l,|,iノ∧
 | ヽ    ヽ   _ _ ( ・∀・)
  "ヽ     'j ヽヽ, ̄ ,,,,,U/"U,,
   ヽ    ー──''''''""(;;)   ゙j
   ヽ、_   __,,,,,r-'''''ーー'''''

フゥハハハーハァー。というわけでhttp://localhost/smartyapp/ へアクセスヽ( ^ω^)ノ サクセス!


今までどおりフォームが…でます…。


       ヽ|/
     / ̄ ̄ ̄`ヽ、
    /         ヽ
   /  \,, ,,/    |
   | (●) (●)|||  |
   |  / ̄⌒ ̄ヽ U.|   ・・・・・・・・ゴクリ。
   |  | .l~ ̄~ヽ |   |
   |U ヽ  ̄~ ̄ ノ   |
   |    ̄ ̄ ̄    |



PHP2009-sm7
すごく…すまーてぃです…。



PHP2009-sm8
それでは入力してみましょう。…ゴクリ。



PHP2009-sm9
(゚д゚)入力された値が表示され、入力フォーム部分がなくなっています。


これはフォームの送信に応じて表示を変える例です。

ためしに真ん中以外を埋めて送信してみませう。


すると…



PHP2009-sm10
真ん中空白でクエリ押下。



PHP2009-sm11
すると未入力欄のみ空欄が表示される。




     ヽ       j   .す
       ゙,      l.    ご
  空    !      ',     く
  欄    ',        ',    :
  で    ト-、,,_    l
  す    !   `ヽ、 ヽ、    _
   ;    /      ヽ、`゙γ'´
      /         \
      !   ト,       ヽ
ヽ__  ___ノ ,!   | | ト,       ゙、
  レ'゙ ,イ ./|!  .リ | リ ! .|! | ト|ト}
 ,イ ,/ ./〃/ / | / .リ/ //イ|.リ
// //ノノ  //゙ ノ'////|.リ/
´彡'゙,∠-‐一彡〃 ト.、,,,,,,,,,,,レ゙
二ニ-‐'''"´      /`二、゙゙7
,,ァ''7;伝 `        {.7ぎ゙`7゙
  ゞ‐゙''  ,. ,. ,.  l`'''゙" ,'
  〃〃"      !   |
              !  l
 !       (....、 ,ノ  !
 j        `'゙´  ,'   ゴクリ…
     ー--===ァ   /
      _ _   ./
\     ` ̄   ,/
  ` .、       /
   :ミ:ー.、._  /``'''ー-、
    `゙三厂´




ここでは、{if $name==''}という条件文で変数が空かどうか調べ、空ならば入力欄を表示します。


それ以外の場合はヒドゥンで値を持ちつつ変数を表示。



さて条件文を軽く流したところで次はお決まりの繰り返し条件。


      / ̄ ̄ ̄ ̄ ̄ ̄ \
/⌒ヽ  / ''''''     ''''''   ヽ
|  /   | (●),   、(●)   |
| |   |    ,,ノ(、_, )ヽ、,,     |
| |   |    `-=ニ=- '      |
| |   !     `ニニ´      .!      天狗じゃ、天狗の仕業じゃ!
| /    \ _______ /
| |    ////W\ヽヽヽヽ\
| |   ////WWWヽヽヽヽヽヽヽ
| |  ////WWWWヽヽヽヽヽヽヽ
E⊂////WWWWWヽヽヽヽヽヽヽ
E////         ヽヽヽヽヽヽヽ
| |  //WWWWWWWヽヽヽヽヽヽヽ

天狗ではなくforeachです。


というわけですまーてーでのforeach文の書き方。


{foreach from = 配列 item = 変数}

繰り返す内容


{/foreach}


fromに配列、itemに変数を用意。それで配列から値を取り出し変数に入れてくれます。配列終わるまで。


           , -─- 、  , -‐- 、
        ,, -'"     `V     `‐、
      /                 \
    ./                       \
    /                      ヽ
   ./  /                   l  ヽ
  /  / /  / ./ /          l   | .l .lヽ
  |  l. l  /  / / ./ .l    |  |  l  / /  l l.〉  ∧∧∧∧∧∧∧∧∧∧∧∧
   l、 | |  l  / / ./ ./   |.  l  | ./ ./ ./ | |./  <                    >
    l、| | l // ///|   l  / / //// / /  .<  配列が終わるまで     >
    l、l | /l///_/ l  / //_|/_∠| / | /   .<  ずっと俺のターン!!    >
    /⌒ヽ | \ `ー' ゝl  // `ー' /|/⌒v'     <  凡骨変数共はひれ伏せ >
    | l⌒l l|    ̄ ̄"//|〉 ̄ ̄ ̄  .|/^_l.l     <  ワハハハハ        >
    ヽゝ(ー| /|   ´ \|       ll ),l'ノ     <                     >
     lヽ_ /  |   ┌───7   /._/        ∨∨∨∨∨∨∨∨∨∨∨∨
     .l/   |     l ̄ ̄ ̄/    / /   ,ノ!
    /       |..   V´ ̄∨   ./ /,.-‐'" .|
    ./   (;;)   |\   `ー‐'´  / /       |
    |     _|_\       /| ./      |
   (|   ,.-‐'"    | \__/  .|/    _,.-─;
   |/    .(;;) |─────┤ _,.-‐'":::::::::/
   ̄         |::::::::::::::::::::::::::::::|^l::::::::::::::::::/


さて社長はほっといて、すまーてーにはもうひとつ繰り返し文が用意されておるとですよ。


{section}。こっちはなにやらメンドイ。

     ____
   /      \ ( ;;;;(
  /  _ノ  ヽ__\) ;;;;)
/    (─)  (─ /;;/
|       (__人__) l;;,´ マンドクセ…
/      ∩ ノ)━・'/
(  \ / _ノ´.|  |
.\  "  /__|  |
  \ /___ /


とりあえず形式だけ。

{section name = 名前 loop = ループ回数 start = 開始値 step = 増加数 max = 最大値 show = 真偽値}

繰り返し出力する内容

{/section}


…みればわかるとおり、腐るほど属性があります。属性が多いのでかなり複雑な動きを持たせることも可能です。でもメドイです。(ぉ


とりあえず、最低限nameとloopさえ設定しとけば使えます(ぉぃ

それ以外は必須では無いので必要に応じて使えばいいんでないでしょうか。


         ___
       /::::::::::::::::\
      /:::::─三三─\         使いもしない設定なんて滅ぼしてしまうお…   
    /:::::::::(○)三(○).\
/⌒)⌒)⌒.:::::::::: (__人__) :::::: \   /⌒)⌒)⌒)
| / / /..    ` ⌒´    | (⌒)/ / / /,,-''ヽ、
| :::::::::::(⌒)          /  ゝ ::::::.,,-''"    \
|     ノ           \  /_,-'"        \
ヽ    /             ヽ /\           \
 |    |        __   //\\           \
             /|[]::::::|_ / \/\\         /
           ./| ̄ ̄ ̄ ̄ //\ \/  \      //    ___
         |  |:::「「「「「「 / \/\  /\\   /:::/   ./|    |__
       _..|  |:::LLLLL//\ \/  \/\\/::::::/  /  | ロ  .|lllllllllllll
      / llllll|  |:::「「「「 / \/\  /\ .\/ ./::::::::/  / ./ .|    |lllllllllllll
__     llllll|  |:::LLL.//\ \/  \/\  /::::::::/   | /  .| ロ  .|lllllllllllll
          |  |:::「./ .\/\  /\ \/ /::::::::/⌒ヽ、| ||/ ..|
          |  |:::l//\ \/  \/\_, -― 、  ''"⌒ヽ,_
                (⌒ヽ、_,ノ⌒Y"    Y     .....⌒)
            (⌒ヽー゙ ....::(   ..::.......  .__人.....::::::::::::::::::::
┣"┣"┣"┣"┣"┣"┣"┣"┣"┣"┣"┣"┣"┣"┣"┣"┣"┣"┣"┣"┣"


いいぞもっとやれ!!







ではなくて。最低限だけ。

{section name = 変数名 loop = 配列}

これはloopに指定した配列から要素を1ずつ指定し、繰り返すものです。nameで指定した変数に各要素のキーが渡されます。要素そのものが渡されるわけではないです。


{section name = 変数 start = 開始値 loop = 繰返し範囲 step = 増加値}

nameで指定した変数の値を、startからstepずつ増やす。範囲がloop内である限り繰り返しまくりんぐ。


とりあえず、繰り返しが必要になる処理といえばDBからデータを引っ張ってくる処理とかになりますが、ここはメンドイのでSQLiteでも使って動きだけでも確かめてみませう。



(´・ω・`)SQLiteは今回はXAMPPの人対象。他環境でSQLiteが使えるならry


XAMPP環境

…と困った。phpinfo()見る限りSQLiは入ってるぽいがどうやって操作するんだろう(´・ω・)そして睡魔に襲われるorz


(゚д゚)…意識朦朧としつつもそれらきしきもの発見。

C:\xammp\apache\bin配下にsqlite3.exe発見。

exe実行するとそれらしきプロンプト発動。


多分これだろう…。phpmyAdminみたいなツールはないのね…。


         ___
       /::::::::::::::::\
      /:::::─三三─\         所在がわからないとかふざけてるお…   
    /:::::::::(○)三(○).\
/⌒)⌒)⌒.:::::::::: (__人__) :::::: \   /⌒)⌒)⌒)
| / / /..    ` ⌒´    | (⌒)/ / / /,,-''ヽ、
| :::::::::::(⌒)          /  ゝ ::::::.,,-''"    \
|     ノ           \  /_,-'"        \
ヽ    /             ヽ /\           \
 |    |        __   //\\           \
             /|[]::::::|_ / \/\\         /
           ./| ̄ ̄ ̄ ̄ //\ \/  \      //    ___
         |  |:::「「「「「「 / \/\  /\\   /:::/   ./|    |__
       _..|  |:::LLLLL//\ \/  \/\\/::::::/  /  | ロ  .|lllllllllllll
      / llllll|  |:::「「「「 / \/\  /\ .\/ ./::::::::/  / ./ .|    |lllllllllllll
__     llllll|  |:::LLL.//\ \/  \/\  /::::::::/   | /  .| ロ  .|lllllllllllll
          |  |:::「./ .\/\  /\ \/ /::::::::/⌒ヽ、| ||/ ..|
          |  |:::l//\ \/  \/\_, -― 、  ''"⌒ヽ,_
                (⌒ヽ、_,ノ⌒Y"    Y     .....⌒)
            (⌒ヽー゙ ....::(   ..::.......  .__人.....::::::::::::::::::::
┣"┣"┣"┣"┣"┣"┣"┣"┣"┣"┣"┣"┣"┣"┣"┣"┣"┣"┣"┣"┣"


(´・ω・`)まさかSQLiteでつまるとはorz


(´;ω;`)ウッ…


(´・ω・)仕方がないのでSQLiteについて一通り調べ終わってから再び書きます。


(´・ω・`)ショボンヌ

人気ブログランキングへ

こんばんわ、中の人ですぉ。

今回は宣言どおりスマーティーをやっちゃう系。



       ,-'"ヽ
      /   i、         /ニYニヽ      _/\/\/\/|_
      { ノ   "' ゝ     /( ゚ )( ゚ )ヽ     \          /
      /       "' ゝ /::::⌒`´⌒::::\    < ピカチュー!!>
      /          i ,-)___(-,|   /          \
     i             、  |-┬-|   /     ̄|/\/\/\/ ̄
    /                 `ー'´  /.
    i'    /、                 ,i..
    い _/  `-、.,,     、_       i
   /' /     _/  \`i   "   /゙   ./
  (,,/     , '  _,,-'" i  ヾi__,,,...--t'"  ,|
       ,/ /     \  ヽ、   i  |
       (、,,/       〉、 、,}    |  .i
                `` `     ! 、、\
                       !、_n_,〉>


…はおいといて。まぁスマーティは結構有名(そうでもない?)なのかデザイナの人とかだと聞いた覚えがあるのであ?


とりあえずMVCで言うならVCのみ。単純にHTMLとPHP分けるってだけだしね(ざっくばらんに言うと。)


じつはこいつはフレームワークというよりテンプレートエンジンてやつなのさー。


ぶっちゃけ見た目の部分を作ってそれをCで使いまわす…というイメージだから・・・なのか?(ぇ


テンプレートを使ったビューの作成の起源はスマーティにあるらしい。本当かいな。


さて当然使うとなるとまたインスコが必要になるわけですが今回も例によってXAMPP環境へのインスコ。


面倒な設定無しでLAMP環境が整うしね。つかAMPだな。正確に言うとWAMP環境?


            〃´⌒ヽ
.     , -――  メ/_´⌒ヽ
   /   / ̄  ´ヽ ヽ
.  /  ,  /// ト. !  、 丶ヽ
  l  / /(((リ从  リノ)) '
  |  i  l   . ヽノ .V l
  l ,=!  l  ///    ///l l   ねんがんのフレームワークをてにいれたぞ!
  l ヾ! ', l    ヽ_フ   l l
  |  ヽヽヽ        //
  l    ヾ≧ , __ , イ〃
  li   (´`)l {ニ0ニ}、 |_"____
  li   /l, l└ タl」/l´        `l
  リヽ/ l l__ ./  |_________|
   ,/  L__[]っ /      /


::::::::/           ヽ、   :: ::: ::: :::::::::::::::::::::::::::::::::
:::::/            lハ ::: : :: :::::::::: :::::::::::::::::::::::::::::
::::l           l  /ノリ ::: : :: ::::::::::: :::::::::::::::::::::::::::::
:::|          /) / ::: : :: ::::::::: :::::::::::::::::::::::::::::
::l          /イ/| . :. :. .:: : :: :: :::::::: : ::::::::::::::::::
/          / ||/ / ̄ ̄ ̄ ̄ ̄7l::::::::::::::::::::
      i   /_,/i!/         / l::::::::::::::::
      l    人  / すまーてー  /  /::::::::::::::::
     l   / /⌒ヽ       /  /::::::::::::::::
     l  /il  |   )      /  /::::::::::::::::
     ll l i! `ー、\___ / n/::::::::::::::::
     lヽ l    |\. \   /⌒〉::::::::::::::::



まずはすまーてーを入手しよう!

http://www.smarty.net/download.php

のサイトへレッツアクセスヽ( ^ω^)ノ サクセス!


Latest Stable Releaseとあるのが最新版のすまーてーになります。現段階(2009/6段階)で2.6.26。

linux環境ならtar.gz、windows環境ならzipでくれ!!を入手。


迷うことなくzipをDL。リンク押下しる。

圧縮されたフォルダを解凍するとSmarty-2.6.26のフォルダ内にSmarty-2.6.26フォルダが展開される。

とりあえず中のほうのSmarty-2.6.26をCドライブ直下へ移動させませう。

  三|三
  イ `<             ,..-──- 、         _|_
   ̄             /. : : : : : : : : : \        |_ ヽ
   ∧           /.: : : : : : : : : : : : : : ヽ      (j  )
   /  \        ,!::: : : :,-…-…-ミ: : : : :',
              {:: : : : :i '⌒'  '⌒' i: : : : :}     _ヽ_∠
  └┼┘          {:: : : : | ェェ  ェェ |: : : : :}       lニl l |
.   |_|_|  , 、      { : : : :|   ,.、   |:: : : :;!      l─| l 亅
   __   ヽ ヽ.  _ .ヾ: :: :i r‐-ニ-┐ | : : :ノ        _
    /     }  >'´.-!、 ゞイ! ヽ 二゙ノ イゞ‐′      l  `ヽ
   ´⌒)    |    -!   \` ー一'´丿 \       l/⌒ヽ
    -'    ノ    ,二!\   \___/   /`丶、      _ノ
        /\  /    \   /~ト、   /    l \
       / 、 `ソ!      \/l::::|ハ/     l-7 _ヽ
      /\  ,へi    ⊂ニ''ー-ゝ_`ヽ、    |_厂 _゙:、
      ∧   ̄ ,ト|    >‐- ̄`    \.  | .r'´  ヽ、
     ,ヘ \_,. ' | |    丁二_     7\、|イ _/ ̄ \
     i   \   ハ∟       |::::|`''ー-、,_/  /\_  _/⌒ヽ


これでC:\smarty-2.6.26というパスにすまーてーが配置されたわけです。


では使用する前にPHP側で設定を修正します。

この修正しないとドナルド☆マジックで消されます。気をつけてね☆ミ


XAMPP環境の場合C:\xampp\apache\binにあるphp.iniを修正します。

include_path = ".;C:\xampp\php\pear\"の一行を見つけ出し、次のように修正しましょう。


include_path = ".;C:\xampp\php\pear\;C:Smarty-2.6.26\libs"


すでに他の値がインクルードされている場合には、;で区切ってパスを追記しましょう。デフォでpearパスがついてた・・・。


修正後に鯖を再起動すればすまーてーが使えるようになります。


でぁまずはすまーてーを使う為のフォルダを用意しましょう。

WEB鯖の公開ディレクトリに『smartyapp』というフォルダを作成しませう。XAMPPなら『htdocs』フォルダね。


次にスマーティで必要になるフォルダ『templates』『templates_c』という2つのフォルダを用意しましょう。


もち『smartyapp』フォルダの中にね。

これらは前者がテンプレートファイルを配置する場所、後者がすまーてーがコンパイルしたファイルを置く場所になります。


すまーてーは用意されたテンプレ(html)とphp(コントローラー)部分をコンパイルして出力。コンパイル後のファイルが作成された後は出力スピードがうpします。まぁコンパイル後のファイルをキャッシュ代わりにするわけだしね。


でまぁその点について注意。

上記のようにコンパイル後のファイルをキャッシュ代わりに使うので、もし一度すまーてーで出力させたビューなりコントローラーなりを修正する場合にはコンパイルファイルを削除しておくことをオヌヌメします。
中の人が始めてすまーてーを使った際にハマった。

「修正したのに、反映されない…だと…。」なんてことになるのを回避するために「修正」→「コンパイルファイル抹殺!!!killyou」を習慣づければおk


                    _,ィ、  ,r、__
                ,.ヘー'´  i `´/  `i_
            /ヾ、 ヽ、 i /   /ヽ
              _ィ、〉   > ´ ̄  ̄ ` く  ,ゝ、
          }、 ,>'´        、  ヽ./`ヽ
          ┌! /    /  i 「`i   ヽヽ ヽ   }
            Y     !   | |  l i i   l i  ',__,.ゝ
          ,'     |  | |   !l l   | l  l !
           i   !   |   | |   | j___j |  |i i!
           |i!  l  ,.|‐T丁i!   ハlj, --!`トlノ、||
           | !  !  レ'i´`j    "i´ `iヽ, i ||  _
           | l  |i   iバ__ソ     L__ソ /.ノ |! _ヽ)
           | |  |l  |、//// '  ///// |! |i ヽ)
           !ハ |!  |,ゝ' ´ ̄ ̄ ` く  レy'|!
          __,ノ レ'ヽiハ /             \}'´ ̄ `ヽ、
    ィ´ ̄/    ,べY    知っているが    Y`i__    \
    〉/    / , 、ヽ  お前の態度が   /_`ヽ\    \
   ,ィ'ん、  / ! '´__ ヽ  気に入らない  /´__,.` ', \   ァ'`
   `ヽ、/ー'   /!   __`ヾ!           レ'´ _,.  !   \ i
    /ー-ィ、 ィ__!  ___`フ         /  ヽ二  /7  _i弋
   /    辷j  !   ヽ      / /    /  / }  j´  〉
    ヽ、   冫 ヽ__ュ_y\    /   /     /ヽヘ/え´   /
     \'´` `}ー-、_,ゝくi ヽ、 ____ ,. イィ_,、  __う'´__/
      , `>ャ,`Yー-‐'^ |ニ=ー-   ー-/  `^7   ,ゝ、ヽ
    ///  l !     |           /    }   / | iハ_j
   く///f´ ̄l/      |          i     y /-、| |
      // | ┌ヽ.     / `ー-='´ _|     /`  | |\
    i l   | ,ゝ,ハ  /         ´,ハ   /〉    レ'   ヽ


(゚д゚)・・・。

さて、それであ実際に触っていってみましょうか。

上でも言ったようにすまーてーはVCからなっているので当然VCそれぞれのファイルが必要です。説明するまでもないか

             「 ̄ `ヽ、   ______
             L -‐ '´  ̄ `ヽ- 、   〉
          /           ヽ\ /
        //  /  /      ヽヽ ヽ〈
        ヽ、レ! {  ム-t ハ li 、 i i  }ト、
         ハN | lヽ八l ヽjハVヽ、i j/ l !
         /ハ. l ヽk== , r= 、ノルl lL」
        ヽN、ハ l   ┌‐┐   ゙l ノl l
           ヽトjヽ、 ヽ_ノ   ノ//レ′
    r777777777tノ` ー r ´フ/′
   j´ニゝ        l|ヽ  _/`\
   〈 ‐ 知ってるが lト、 /   〃ゝ、
   〈、ネ..         .lF V=="/ イl.
   ト |お前の態度が とニヽ二/  l
   ヽ.|l         〈ー-   ! `ヽ.   l
      |l気に入らない lトニ、_ノ     ヾ、!
      |l__________l|   \    ソ


まずテンプレート部分の作成から。


『template』フォルダの中に「index.tpl」というファイルを作成しませう。これがビュー部分になります。


index.tpl


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"
http://www.w3c.org/TR/xhtml1/DTD/xhtml1-transitional.dtd ">
<html xmlns="
http://www.w3.org/1999/xhtml ">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>{$title}</title>
</head>

<body>
<h1>{$headline}</h1>
<p>{$message}</p>
</body>
</html>


ちなみに文字コードはUTF-8。
さて上記テンプレートには3つの変数が埋め込まれています。{$title}{$headline}{$message}の3つです。
これらはテンプレートタグと呼ばれるもので、コントローラーで変数を定義すれば該当箇所に変数の値が埋め込まれることになるのです。

ではコントローラー部分の作成に取り掛かりませう。コントローラーファイルは、『smartyapp』内に「index.php」という名前で作成します。


index.php

<?php
require_once('Smarty.class.php');
$smarty = new Smarty();
$smarty->assign('title','welcome to Smarty');
$smarty->assign('headline','Smarty Page');
$smarty->assign('message','これはsmartyのテンプレートで表示した画面です');
$smarty->display('index.tpl');

?>


それぞれ作成が終わったら、http://localhost/smartyapp
へアクセスしてみませう。ヽ( ^ω^)ノ サクセス!



PHP2009-sm1
表示成功すればおk。


ではindex.phpでしている処理の説明をしませう。
まず一行目ですまーてーのクラスファイルをロードします。
すまーてーのクラスファイルは、Smartyがインストールされているフォルダの『lib』内にあります。
それをrequire_onceで読み込んでいるわけです。

続いて$smarty = new Smarty();でインスタンスを生成。
そして変数に値をセットしていく作業。


$smarty->assign('title','welcome to Smarty');
$smarty->assign('headline','Smarty Page');
$smarty->assign('message','これはsmartyのテンプレートで表示した画面です');

$smarty->assign('変数名','ないよう');でビューで埋め込んだ{$変数名}に'ないよう'を代入。
以下messageまで同上。
最後に$smarty->display('テンプレ名')で画面出力。終了。そんだけ。


        _,,:-ー''" ̄ ̄ ̄ `ヽ、
     ,r'"           `ヽ.
 __,,::r'7" ::.              ヽ_
 ゙l  |  ::              ゙) 7
  | ヽ`l ::              /ノ )
 .| ヾミ,l _;;-==ェ;、   ,,,,,,,,,,,,,,,_ ヒ-彡|
  〉"l,_l "-ー:ェェヮ;::)  f';;_-ェェ-ニ ゙レr-{   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  | ヽ"::::''   ̄´.::;i,  i `'' ̄    r';' }   | 久々にワロタ
 . ゙N l ::.  ....:;イ;:'  l 、     ,l,フ ノ   | Codeigniterの後だと
 . |_i"ヽ;:...:::/ ゙'''=-='''´`ヽ.  /i l"  < スマーティで説明すること
   .| ::゙l  ::´~===' '===''` ,il" .|'".    | が少ないないから困る
    .{  ::| 、 :: `::=====::" , il   |     \________
   /ト、 :|. ゙l;:        ,i' ,l' ノト、
 / .| \ゝ、゙l;:      ,,/;;,ノ;r'" :| \
'"   |   `''-、`'ー--─'";;-'''"   ,|   \_


困ります。


そもそもassignの説明。(英単語としての説明ね。)
assign

動詞
1)割り当てる,あてがう
2)任務・仕事などを付与する
3)財産・権利などを与える,【法律】譲渡する
4)人を指名する,任命する。物を充当する,使用する
5)時や場所などを,指定する,定める,設ける
6)~の帰属を定める
7)~に帰す,~のせいにする
8)理由や原因などを挙げる,指摘する,掲げる


そのまんまやないですか。
'title'に'すまーてーへようこそ'をあてがう。
'headline'に'すまーてーぺーじ'を付与する。
'message'へ'これは以下略'を与える
(以下略


$smarty->display('index.tpl');
部分はテンプレファイル(index.tpl)をロードしてレンダリングしてブラウザに表示。


以上のように、テンプレートエンジンを使うと、ビューであるテンプレートから処理を切り離すことができます。
ですが、切りはなされたプログラム部分には、実はまだ問題が残されています。それは、表示される細かな値がプログラムに混在しているという点です。

そもそもテンプレート自体、ビューとコントローラーにきれいに分け、わかりやすくメンテナンスしやすい構造にすることが目的のはずです。


ですが先ほどテンプレートに変数を埋め込んで表示したタイトルやメッセージなどはプログラムの中に直接埋め込まれています。


後から表示される内容を変更したり、コードを書き直すことになったりした場合に、それでは困るわけです。

つまるところこうした画面に表示する値については設定ファイルとしてまとめておくことも可能です。


設定ファイルに変数名と値を記述しておき、それをロードしてテンプレートに表示させる。
後でもし修正が必要になっても、プログラムには触らずに表示される内容だけを書き換えることが可能です。


        _,,:-ー''" ̄ ̄ ̄ `ヽ、
     ,r'"           `ヽ.
 __,,::r'7" ::.              ヽ_
 ゙l  |  ::              ゙) 7
  | ヽ`l ::              /ノ )
 .| ヾミ,l _;;-==ェ;、   ,,,,,,,,,,,,,,,_ ヒ-彡|
  〉"l,_l "-ー:ェェヮ;::)  f';;_-ェェ-ニ ゙レr-{   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  | ヽ"::::''   ̄´.::;i,  i `'' ̄    r';' }   | いちいち修正するものアリだが
 . ゙N l ::.  ....:;イ;:'  l 、     ,l,フ ノ   |  それではテンプレートを使う意味
 . |_i"ヽ;:...:::/ ゙'''=-='''´`ヽ.  /i l"  <  がなくなるから困る
   .| ::゙l  ::´~===' '===''` ,il" .|'".    | 
    .{  ::| 、 :: `::=====::" , il   |     \________
   /ト、 :|. ゙l;:        ,i' ,l' ノト、
 / .| \ゝ、゙l;:      ,,/;;,ノ;r'" :| \
'"   |   `''-、`'ー--─'";;-'''"   ,|   \_

困る。



それでは設定ファイルを作ってみよう。

『smartyapp』フォルダに新たに『configs』というフォルダを作成しよう。
これが設定ファイル置き場になる。

この中に、「index.conf」という名前で下記の内容のファイルを作成しよう。


index.conf
[index]
title = "Welcome to Smarty"
headline = "Smarty Page."
message = "これは、Smarty設定ファイルから情報を読み込んで表示したものです。"



ここでは[index]という項目の後にいくつかの変数に値を代入する文が続きますが、この[index]というのは「セクション」と呼ばれるものです。


これは設定ファイル内をいくつかの領域に分ける区切りの様なものです。


設定ファイルでは、このようにセクションごとに変数へ値を代入し、必要に応じてセクションごとに変数が呼ばれることになります。

また、セクションをつけずに作成された変数は、"グローバル変数"と呼ばれる変数になり、セクションを指定せずとも呼ばれるようになります。


それぞれの値は、 変数 = 値 という形式で記述されます。


値はイコールの後にそのまま書くか、PHPの様に""でくくって書くかします。


ではテンプレートでコンフィグから変数を読み込むように修正しましょう。


index.tplの中身を次のように修正。


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"
http://www.w3c.org/TR/xhtml1/DTD/xhtml1-transitional.dtd ">
<html xmlns="
http://www.w3.org/1999/xhtml ">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>{$title}</title>
</head>

<body>
<h1>{$headline}</h1>
<p>{$message}</p>
</body>
</html>


↑修正前↓修正後


{config_load file='index.conf' section='index'}
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"
http://www.w3c.org/TR/xhtml1/DTD/xhtml1-transitional.dtd ">
<html xmlns="
http://www.w3.org/1999/xhtml ">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>{#title#}</title>
</head>

<body>
<h1>{#headline#}</h1>
<p>{#message#}</p>
</body>
</html>


注意すべきはHTMLタグ(DOCTYPE宣言)前にコンフィグファイルを読みに行っている事と、テンプレートの変数の記述が{$変数名}から{#変数名#}になっている点でしょうか。


設定ファイルから読み込んだ変数は通常の変数とは使い方がやや違います。


見ればわかるとおり、変数は#でくくってあります。通所の変数とは書き方が異なるので注意してください。

一行目ではconfig_loadという関数を使い、index.confで指定した変数を読み込んでいます。


    |┃三    ,ィ, (fー--─‐- 、、
    |┃.    ,イ/〃        ヾ= 、
    |┃   N {                \
    |┃  ト.l ヽ               l
 ガラッ.|┃ 、ゝ丶         ,..ィ从    |
    |┃  \`.、_    _,. _彡'ノリ__,.ゝ、  |     / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
    |┃三 `ゞf‐>n;ハ二r^ァnj< y=レヽ    <  話は聞かせてもらったぞ!
    |┃.    |fjl、 ` ̄リj^ヾ)  ̄´ ノ レ リ     |   人類は滅亡する!
    |┃三  ヾl.`ー- べl,- ` ー-‐'  ,ン       \____________
    |┃      l     r─‐-、   /:|
    |┃三     ト、  `二¨´  ,.イ |
    |┃     _亅::ヽ、    ./ i :ト、
    |┃  -‐''「 F′::  `:ー '´  ,.'  フ >ー、
    |┃    ト、ヾ;、..__     , '_,./ /l

滅亡されても困ります。



最後に、下記のようにindex.phpを修正します。

index.php
<?php
require_once('Smarty.class.php');
$smarty = new Smarty();
$smarty->assign('title','welcome to Smarty');
$smarty->assign('headline','Smarty Page');
$smarty->assign('message','これはsmartyのテンプレートで表示した画面です');
$smarty->display('index.tpl');

?>


↑修正前↓修正後

<?php
require_once('Smarty.class.php');
$smarty = new Smarty();
$smarty->display('index.tpl');

?>


注意!ちなみにフォルダ名を『configs』ではなく『config』としてしまった場合すまーてーエラーが発生する。
そんなミスするの自分くらいか||orz



PHP2009-sm2
うまくいくと表示される。


さて、では次の段階として読み込んだ設定を編集してみよう。

       ヽ|/
     / ̄ ̄ ̄`ヽ、
    /         ヽ
   /  \,, ,,/    |
   | (●) (●)|||  |
   |  / ̄⌒ ̄ヽ U.|   ・・・・・・・・ゴクリ。
   |  | .l~ ̄~ヽ |   |
   |U ヽ  ̄~ ̄ ノ   |
   |    ̄ ̄ ̄    |


設定ファイルは以上のようにビューで読み込むだけで直接使えてしまう便利なものである。

用意しておいた値をシンプルに表示する」だけなら、それこそ完璧だろう。


問題として、読み込んだ値に処理をかけ、その処理した後の値を表示したい、となった場合が問題である。


なんせ、処理をかけようにも直接ビューが読みに行ってしまうため、処理の掛け様がない。これは困る。


        _,,:-ー''" ̄ ̄ ̄ `ヽ、
     ,r'"           `ヽ.
 __,,::r'7" ::.              ヽ_
 ゙l  |  ::              ゙) 7
  | ヽ`l ::              /ノ )
 .| ヾミ,l _;;-==ェ;、   ,,,,,,,,,,,,,,,_ ヒ-彡|
  〉"l,_l "-ー:ェェヮ;::)  f';;_-ェェ-ニ ゙レr-{   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  | ヽ"::::''   ̄´.::;i,  i `'' ̄    r';' }   | 久々にワロタ
 . ゙N l ::.  ....:;イ;:'  l 、     ,l,フ ノ   | 読み込む代わりに処理の余地がない
 . |_i"ヽ;:...:::/ ゙'''=-='''´`ヽ.  /i l"  < のが設定ファイルなんだよな
   .| ::゙l  ::´~===' '===''` ,il" .|'".    | 処理がかからないから困る
    .{  ::| 、 :: `::=====::" , il   |     \________
   /ト、 :|. ゙l;:        ,i' ,l' ノト、
 / .| \ゝ、゙l;:      ,,/;;,ノ;r'" :| \
'"   |   `''-、`'ー--─'";;-'''"   ,|   \_


困る。ということで。

それをなんとかしませう。


実は、プログラム側で設定ファイルをロードし、それを処理した上でビューに渡すという芸当ができるのですYO。


ならはじめからそうしろと小一時間ry


それではindex.phpを修正していきませう。


設定ファイルをロードし、各変数の前後に<div>タグをつけて表示するようにしましょう。


<?php
require_once('Smarty.class.php');
$smarty = new Smarty();
$smarty->display('index.tpl');

?>


↑修正前↓修正後


<?php
require_once('Smarty.class.php');
$smarty = new Smarty();

$smarty->config_load('index.conf','index');
$smarty->assign('title',$smarty->get_config_vars('title'));
$smarty->assign('headline',"<div style=\"background-color:#CCCCFF; font-size: 12pt;\">".$smarty->get_config_vars('headline')."</div>");
$smarty->assign('message',"<div style=\"color:#FF0000\">".$smarty->get_config_vars('message')."</div>");

$smarty->display('index.tpl');

?>


テンプレート側は設定ファイル変数ではなく、プログラムから渡される変数を表示するように変えましょう。
設定ファイルではなく、プログラムから渡されてくるので、変数の形式を変更します。


{config_load file='index.conf' section='index'}
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"
http://www.w3c.org/TR/xhtml1/DTD/xhtml1-transitional.dtd ">
<html xmlns="
http://www.w3.org/1999/xhtml ">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>{#title#}</title>
</head>

<body>
<h1>{#headline#}</h1>
<p>{#message#}</p>
</body>
</html>


↑を↓へ修正。


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"
http://www.w3c.org/TR/xhtml1/DTD/xhtml1-transitional.dtd ">
<html xmlns="
http://www.w3.org/1999/xhtml ">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>{$title}</title>
</head>

<body>
<h1>{$headline}</h1>
<p>{$message}</p>
</body>
</html>




PHP2009-sm3

うまくいくと↑のように表示される。

index.phpでは、$smarty->config_load(設定ファイル名,セクション名);という形式でコンフィグを読み込んでいます。

つまりテンプレート側でやっていた{config_load...}という部分をプログラム側でやると上記の様な書式になる、ということですYO


つぎに、"リテラル"というものについて。

自分が最初にすまーてーを使用した際にこの理解がなかった為、「すまーてーじゃ<style>を直で指定できないのかYO!」なんておもったりしたものですが。


すまーてーを使用する際に注意しなければならないのが{}を使用した表現です。

例えばJavaScriptやCSS等がこれにあたるわけですが。

もし{}が含まれたものがテンプレートに混在した場合に正しくレンダリングが行われずにエラーとなってしまいます。

         ____
       /::::::::::  u\
      /:::::::::⌒ 三. ⌒\      
    /:::::::::: ( ○)三(○)\    
    |::::::::::::::::⌒(__人__)⌒  | ________
     \::::::::::   ` ⌒´   ,/ .| |          | <エラー!!エラー!!エラー!!エラー!!エラー!!
    ノ::::::::::u         \ | |          |
  /:::::::::::::::::      u       | |          |
 |::::::::::::: l  u             | |          |
 ヽ:::::::::::: -一ー_~、⌒)^),-、   | |_________|
  ヽ::::::::___,ノγ⌒ヽ)ニニ- ̄   | |  |


それを避ける為にあるのがリテラルというものです。

{literal}リテラルとされる部分{/literal}

という指定の仕方をします。

{literal}{/literal}に囲まれた部分はリテラルと判断され、そこに{}が含まれていてもそのまま表示されるようになります。


であ実際にリテラルってみましょう。


テンプレートを、設定ファイルとCSSを組み合わせて表示スタイルを変更します。


まずは設定ファイルに必要な値を用意しておきませう。「index.conf」を次のように修正。


[index]
title = "Welcome to Smarty"
headline = "Smarty Page."
message = "これは、Smarty設定ファイルから情報を読み込んで表示したものです。"


↑を↓へ変更。


[index]
title = "Welcome to Smarty"
headline = "Smarty Page."
table_style = background-color:#EEEEEE; padding: 3px;
th_style = color: #FFFFFF; background-color:#006633; padding:0px 10px;
msg_style = color: #CC0000;


テンプレートのテーブルとメッセージのスタイルを変更できるようになったわけです。

次。

テンプレのindex.tplを修正しませう。


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"
http://www.w3c.org/TR/xhtml1/DTD/xhtml1-transitional.dtd ">
<html xmlns="
http://www.w3.org/1999/xhtml ">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>{$title}</title>
</head>

<body>
<h1>{$headline}</h1>
<p>{$message}</p>
</body>
</html>


↑修正前↓修正後

{config_load file='index.conf' section='index'}
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"
http://www.w3c.org/TR/xhtml1/DTD/xhtml1-transitional.dtd ">
<html xmlns="
http://www.w3.org/1999/xhtml ">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>{#title#}</title>
<style>
{literal}
table{{/literal}{#table_style#}{literal}}
th{{/literal}{#th_style#}{literal}}
.msg{{/literal}{#msg_style#}{literal}}
{/literal}
</style>
</head>

<body>
<h1>{#headline#}</h1>
<pre><p class="msg">{$message|escape}</p></pre>
<table>
<form method="post" action="index.php">
<tr><th>名前</th>
<td><input type="text" name="name" size="40"></td></tr>
<tr><th>アドレス</th>
<td><input type="text" name="mail" size="40"></td></tr>
<tr><th>電話番号</th>
<td><input type="text" name="tel" size="40"></td></tr>
<tr><td></td>
<td><input type="submit" value="送信"></td></tr>
</form>
</table>

</body>
</html>


残るindex.phpを次のように修正してください。


<?php
require_once('Smarty.class.php');
$smarty = new Smarty();

$smarty->config_load('index.conf','index');
$smarty->assign('title',$smarty->get_config_vars('title'));
$smarty->assign('headline',"<div style=\"background-color:#CCCCFF; font-size: 12pt;\">".$smarty->get_config_vars('headline')."</div>");
$smarty->assign('message',"<div style=\"color:#FF0000\">".$smarty->get_config_vars('message')."</div>");

$smarty->display('index.tpl');

?>

↑修正前↓修正後
<?php
require_once('Smarty.class.php');
$smarty = new Smarty();

if($_POST != null){
$smarty->assign('message',implode("\n",$_POST));
}else{
$smarty->assign('message','入力してください。');
}

$smarty->display('index.tpl');

?>



PHP2009-sm4



PHP2009-sm5


PHP2009-sm6


であindex.tplで使われている機能について説明しますぉ。

{literal}
table{{/literal}{#table_style#}{literal}}
th{{/literal}{#th_style#}{literal}}
.msg{{/literal}{#msg_style#}{literal}}
{/literal}

の部分ですYO!


どう見てもリテラルです。大変ありがとうございました。

ちょいと入り組んでますが、全体を{literal}{literal}で囲み、それぞれの{}内の部分をリテラルからはずすように記述されています。


つまりtable{{#table_style#}}とあった場合table{と}部分のみリテラル指定、{#table_style#部分はそのままレンダリングされるようになっているわけです。


このように面倒ですがリテラル指定を細かくかけてやることでCSSもJavaScriptも使用することができるようになるわけですYO!


最後に一つ、謎の$message部分についての説明。

<p class="msg">{$message|escape}</p>


で{$message|escape}となっているわけですが、この|escapeって何じゃ!_とかなったと思われる。

この|escapeは、変数修飾子と呼ばれるもので、変数に何らかの設定を行って表示されるのに使います。


このescapeは「|」の前にある変数をエスケープ処理して表示する役割を持っています。


            / ̄ ̄\
          /   _ノ  \
          |    ( ●)(●)
          |     (__人__)  
             |     ` ⌒´ノ   学生時代に打ち込んだものは?
              |         }
              ヽ        }
            ヽ、.,__ __ノ
   _, 、 -― ''"::l:::::::\ー-..,ノ,、.゙,i 、
  /;;;;;;::゙:':、::::::::::::|_:::;、>、_ l|||||゙!:゙、-、_
 丿;;;;;;;;;;;:::::i::::::::::::::/:::::::\゙'' ゙||i l\>::::゙'ー、
. i;;;;;;;;;;;;;;;;;;;;;;|::::::::::::::\::::::::::\ .||||i|::::ヽ::::::|:::!

       ____
    /      \
   /  ─    ─\      
 /    (●) (●) \    キーボードです
 |       (__人__)    |    
 \     ` ⌒´   /      
,,.....イ.ヽヽ、___ ーーノ゙-、.
:   |  '; \_____ ノ.| ヽ i
    |  \/゙(__)\,|  i |
    >   ヽ. ハ  |   ||


とりあえずすまーてー前編は以上で終了。


(´Д`;)予想以上に長くなってびっくり。とりあえず後編ですまーてーは完結予定す。



( ゚ω゚)ノシ TO BE CONTINUED!!



人気ブログランキングへ

(゚д゚)ノ ども、中の人です。


今回はCodeigniterの最後、ヘルパーについて説明していくことにしますYO。


ヘルパーって何だ!.hackのあの人かっ!? いや、あれはヘルバでry


PHP2009-helba
こうですかわかりません(ぉ


オタなネタはほっといて、ヘルパーの説明に入りましょう。


介護ヘルパー?的なものでしゃうか?(ぇ


ヘルパーの機能は今までリダイレクト機能部分に使ってきたアレです。


ちゃんと説明すると、コントローラーやビューで使用される、入力を支援するための拡張機能のことです。


面倒なソースコードを簡単な関数で呼び出し、ミスを減らして記述も少なくする優れモノ。


             /)
           ///)
          /,.=゙''"/
   /     i f ,.r='"-‐'つ____     こまけぇこたぁいいんだよ!!
  /      /   _,.-‐'~/⌒  ⌒\
    /   ,i   ,二ニ⊃( >). (<)\
   /    ノ    il゙フ::::::⌒(__人__)⌒::::: \
      ,イ「ト、  ,!,!|     |r┬-|     |
     / iトヾヽ_/ィ"\      `ー'´     /



ヘルパーは関数の集合体としてつくられているので、ヘルパーを読み込むことでその関数群が使える様になります。


         / ̄\
        |     |
         \_/
          |
       /  ̄  ̄ \
     /  \ /  \
    /   ⌒   ⌒   \      よくぞこのヘルパーを呼んでくれた
    |    (__人__)     |      褒美として関数群を使う権利をやる
    \    ` ⌒´    /   ☆
    /ヽ、--ー、__,-‐´ \─/
   / >   ヽ▼●▼<\  ||ー、.
  / ヽ、   \ i |。| |/  ヽ (ニ、`ヽ.
 .l   ヽ     l |。| | r-、y `ニ  ノ \
 l     |    |ー─ |  ̄ l   `~ヽ_ノ____
    / ̄ ̄ ̄ ̄ヽ-'ヽ--'  / 関数   /|
   .| ̄ ̄ ̄ ̄ ̄ ̄|/|    | ̄ ̄ ̄ ̄ ̄ ̄|/| ______
/ ̄関数 /|  ̄|__」/_関数     /| ̄|__,」___    /|
| ̄ ̄ ̄ ̄ ̄|/関数   ̄/ ̄ ̄ ̄ ̄|/ 関数   /|  / .|
| ̄ ̄ ̄ ̄ ̄| ̄ ̄ ̄ ̄ ̄|/l ̄ ̄ ̄ ̄| ̄ ̄ ̄ ̄ ̄|/| /
| ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄|


ヘルパー使用時には、ビュー、またはコントローラーで


$this->load->helper('ヘルパー');


の一行を加えてヘルパーを呼びましょう。


     |┃三        / ̄\
     |┃         |     |
     |┃          \_/
 ガラッ. |┃            |
     |┃  ノ//   ./ ̄ ̄ ̄ \
     |┃三    /  ::\:::/:::: \
     |┃     /  <●>::::::<●>  \
     |┃     |    (__人__)     | <呼んだ?
     |┃三   \    ` ⌒´    /
     |┃三   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ \



これにより引数に指定したヘルパーが読み込まれ、その機能が使用できるようになります。


複数のヘルパーを読み出すには


$this->load->helper('ヘルパー','ヘルパー','ヘルパー','ヘルパー');


                      ''';;';';;'';;;,.,                  ザッ
                       ''';;';'';';''';;'';;;,.,   ザッ
          ザッ            ;;''';;';'';';';;;'';;'';;;
                        ;;'';';';;'';;';'';';';;;'';;'';;;
                        vymyvwymyvymyvy     ザッ
               ザッ     MVvvMvyvMVvvMvyvMVvv、
                   Λ_ヘ^-^Λ_ヘ^-^Λ_ヘ^Λ_ヘ
     ザッ            ヘ__Λ ヘ__Λ ヘ__Λ ヘ__Λ
                __,/ヽ_ /ヽ__,.ヘ /ヽ__,.ヘ _,.ヘ ,.ヘ    ザッ
    /\___/ヽ   /\___ /\___/ヽ _/ヽ /\___/ヽ
   /''''''ヘルパ'''''':::::\/'''ヘルパ'''/''''''ヘルパ'''':::::\   /''''''ヘルパ''':::::\
  . |(●),   、(●)、.:|(●),    |(●),   、(●)、.:|、( |(●),   、(●)、.:|
  |   ,,ノ(、_, )ヽ、,, .::::|   ,,ノ(、_, )|   ,,ノ(、_, )ヽ、,, .::::|_, )|   ,,ノ(、_, )ヽ、,, .::::|
.   |   `-=ニ=- ' .:::::::|   `-=ニ= |   `-=ニ=- ' .:::::::|ニ=|   `-=ニ=- ' .:::::::|
   \  `ニニ´  .:::::/\  `ニニ \  `ニニ´  .:::::/ニ´ \  `ニニ´  .:::::/
   /`ー‐--‐‐―´\ /`ー‐-  /`ー‐--‐‐―´\-‐‐ /`ー‐--‐‐―´


このように使用したいヘルパー名を配列にまとめたものを引数に指定してやります。


すでに上で述べましたが皆さんはURLヘルパーを使用しています。


当然ヘルパーにはURLヘルパーのほかにも多数のヘルパーが存在します。


それではもっとも多用されるFormヘルパーから見ていきましょう。


Formヘルパーは、文字通りフォームを作成するためのヘルパーです。


pearにも似たような機能があったと思いますが割愛(ぇ


Formヘルパーにはフォーム関係のタグを自動生成するための関数が用意されています。

これらの関数を呼び出してフォームを生成してみませう。


『veiws』のadd.phpを編集。


<h1>Blog新規作成</h1>
<p>新しい記事を記述してください。</p>
<?=$this->load->library('validation') ?>
<?=$this->validation->error_string ?>
<form method="POST" action="/igniterapp/helo/add">
<table>
<tr>
<th>タイトル</th>
<td><input type="text" name="title" size="60" value="<?=$this->validation->title ?>"></td>
</tr>
<tr>
<th>コンテンツ</th>
<td><textarea name="content" cols="40" rows="3"><?=$this->validation->content ?></textarea></td>
</tr>
<tr>
<th></th>
<td><input type="submit"></td>
</tr>
</table>
</form>


↑を↓のように編集。


<h1>Blog新規作成</h1>
<p>新しい記事を記述してください。</p>
<?=$this->load->helper('form') ?>
<?=form_open(base_url().'helo/add') ?><br/>
TITLE<br/>
<?=form_input(array('name'=>'title','size'=>60)) ?><br/>
CONTENT<br/>
<?=form_textarea(array('name'=>"content",'cols'=>40,'rows'=>3)) ?><br/>
<?=form_submit('submit','送信') ?>
<?=form_close() ?>


解説。
まずヘルパー機能を使う為にはじめに<?=$this->load->helper('ヘルパー名')?>としています。ここで使用するのはフォームヘルパーなのでformと入力。


ヘルパー名入力の際に''を入れるのを忘れずに。


こうしてフォームヘルパーの呼び出しを完了させたら実際にフォーム生成部分の記述。


<?=form_open(base_url().'helo/add') ?>部分は

<form method="post" action="http://localhost.igniterapp/helo/add ">というタグの生成。base_urlはconfigで設定したアレです。

CodeigniterではGET形式は危ない!という理念なのでデータ送信形式は基本POSTで行うということを前にも述べましたが、今回自動生成されるフォームの送信形式も当然POSTで行われます。


次にタイトル部分のフォーム。

<?=form_input(array('name'=>'title','size'=>60)) ?>

<input type="text" name="title" size="60">のテキスト入力フォームを生成します。


次にコンテンツ部分のフォーム。
<?=form_textarea(array('name'=>"content",'cols'=>40,'rows'=>3)) ?>

<textarea name="content" cols="40" rows="3"></textarea>のテキストエリアフォームを生成します。


次に送信ボタン。
<?=form_submit('submit','送信') ?>

<input type="submit" value="送信">を生成。

最後に<?=form_close() ?>

これは</form>、フォームの閉じタグを生成します。()を忘れずに。



PHP2009-46
見た目は変わらず。右クリックでソースの表示させてもおんなじ。



ちなみにこのままではデフォルトのフォームのままなので、バリデーション対応用に書き換えましょう。


バリデーション対応ver

<h1>Blog新規作成</h1>
<p>新しい記事を記述してください。</p>
<?=$this->validation->error_string ?>
<?=$this->load->helper('form') ?>
<?=form_open(base_url().'helo/add') ?><br/>
TITLE<br/>
<?=form_input(array('name'=>'title','size'=>60,'value'=>$this->validation->title)) ?><br/>
CONTENT<br/>
<?=form_textarea(array('name'=>"content",'cols'=>40,'rows'=>3,'value'=>$this->validation->content)) ?><br/>
<?=form_submit('submit','送信') ?>
<?=form_close() ?>



PHP2009-49


このようにvalueにバリデーションから前回入力された値をそのまま挿入することができます。


では最後にFormヘルパーの主なメソッドを紹介します。


*フォームの開始
form_open(送信先)
<form>タグを生成。引数に送信先をモジュール/メソッドとして入力。


*フォームの終了
form_close(追加テキスト)
</form>タグを生成します。引数に追加するテキストを挿入できます。
例えばフォームタグと一緒に閉じタグを挿入したい場合にform_close('</table>')とすることで
ドームが配置されているタグの閉じタグまでまとめて書き出せます。


*テキスト入力用タグ
form_input(名前、値)
form_input(属性の配列)

<input type="text">による入力フィールドを生成するものです。第一引数に名前、第二はそのままvalueの値を指定します。
あるいは配列で属性を指定できます。


*パスワード入力用タグ
form_password(名前、値)
form_password(属性の配列)

<input type="password">タグによるパスワード入力用フィールドを生成します。引数はform_inputと同じです。


*非表示フィールド用タグ
form_hidden(名前、値)
form_hidden(属性の配列)

<input type="hidden">タグによる非表示フィールドを生成します。引数はform_inputと同じです。


*テキストエリア
form_textarea(名前、値)
form_textarea(属性の配列)

<textarea>タグによる入力エリアを生成します。引数はform_inputと同じです。一般に、rowsとcolsの値は最低限用意しておきます。


*チェックボックス
form_checkbox(名前、値)
form_checkbox(属性の配列)

<input type="checkbox">によるチェックボックスを生成します。第一引数、第二引数はform_inputと同じですが、第三引数にデフォルトのチェック状態を
示す真偽値を指定できます。あるいは属性を配列にして渡す事も可能です。


*ラジオボタン
form_radio(名前、値、真偽値)
form_radio(属性の配列)

<input type="radio">によるラジオボタンを生成します。それぞれの引数は、form_checkboxと同じです。


*送信ボタン
form_submit(名前、値)
form_submit(属性の配列)

送信ボタンを生成します。これもform_inputと引数の指定等は一緒です。


*プッシュボタン
form_button(名前、値)
form_button(属性の配列)

プッシュボタンを生成します。名前と値を指定した場合には、<input type="bubmit">で
実行される送信ボタンが生成されます。また、form_buttonで属性の配列を指定した場合には、<input type="button">が生成されます。
この後第三引数にJavaScriptの設定を用意することもできます。


*ドロップダウンリスト
form_dropdown(名前、項目、選択する項目)
form_dropdown(属性の配列)

<select>タグによるドロップダウンリスト(ポップアップメニュー)を生成します。
第一引数には名前、第二引数には表示する項目名のテキストを配列として渡します。
第三引数には、デフォルトで選択されている項目名を指定します。


*ラベル
form_label(表示テキスト、ラベル付けする項目)
form_label(表示テキスト、ラベル付けする項目、属性の配列)

<label>タグによるラベルを生成するものです。第一引数にラベルとして表示するテキスト、第二引数に<label>タグのfor属性で指定する項目名をそれぞれ
記入します。第三引数に属性を配列で渡すことも可能です。)

以上でFormヘルパーの主なメソッドの紹介を終わります。


最後に。
Codeigniterは現存するフレームワークの中でもシンプルさに秀でています。
一つ一つのライブラリやヘルパーは、それを使う為に他のライブラリの機能や構造を理解していなければならない…ということがありません。

なので、最低限の使い方を覚えた後に、ヘルパーやライブラリを一部ずつ使えるようにしていけば何も問題ありません。
Codeigniterは短期間で最低限の学習だけで一通り使えるように設計されていますので、取得するのにもかなり短期間で済むと思います。

ただ、現状ではCodeigniterに関する解説は日本語でのドキュメントが少ないのでCodeigniterにあるドキュメント中心で勉強していくことになるかもしれません。

当然、他の詳解している日本のサイトを見つけて、それを参考にしながら勉強する、という手もあります。


それでは、長くなりましたがこれにてフレームワーク『Codeigniter』編を終了とさせていただきます。



   (  ~~.旦
       .~旦 )
     (( 旦~  グラグラ
       .旦
       ..旦~
       (旦~~
      /⌒ヽ   みなさん ごくろうさまです
     / ´_ゝ`)
     |    /    お茶がはいりましたよ
     | /| |
     // | |
    U  .U   ⊿

                    ダシャーン

                      \
           ⊂\    _,,,,,,,,__         /
             \\_/    .,’'.,’:.',,      .,’:.',, .,’: l  .,’:.',,|[]].,’:...,
         ガッ    _]         ).,’:.',,:.',,  []] .,’:.',,.,’:.',,.,日  .,’:.',,.,’:.',,          /
         ⊿⊂ニニ_______________,,..ノ  /[]].,’:',,:',[]]/[]]\[]].,’:.',,|[]].,’:.',, _ .,’:.',,]]/ 日.,’:.',,.., . ..,,,;:[]]

|||orz



(´ω`;)Codeigniterは再勉強or上達を目指すことになったらいつか続編として取り上げるかもしれません…いつか。


   /⌒ヽ
  / ´_ゝ`)次回は8割方smartyやりますよ・・・
  |    / 残り2割はcakePHPの可能性。
  | /| |
  // | |
 U  .U


(゚ω゚)ノシ TO BE CONTINUED!!

人気ブログランキングへ