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


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


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


       ,;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について一通り調べ終わってから再び書きます。


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

人気ブログランキングへ