2011年3月3日木曜日

3/3覚書

ちょいと遅刻して午後から。自分のドジっぷりがなんだかなあ;

1時間目?
現場レベルでのSmartyのデリミタの扱いについて。
{}はJavaScriptでも使うので、Smartyと混在するとエラーの原因になるので、
回避のためにデリミタを変更したclassを継承させる。

/**********************************************************************

Smartyクラスを継承したMySmartyクラスを作成

コンストラクタの呼び出しが「Smarty()」ではなくて「__construct()」に
変わっているので注意

**********************************************************************/

include_once ( "Smarty.class.php" );

class MySmarty extends Smarty {
 function MySmarty() {
  $this -> left_delimiter = "{{";
  $this -> right_delimiter = "}}";
  $this -> __construct();
 }
}

2時間目?

Ex.SmartyでFizzBuzz。ifとforeachでつくろ~(宿題らしい)。
ファイル名はまんまfizzbuzz.phpとfizzbuzz.tpl。

3時間目

暗号化
md5()で暗号化処理の関数です。覚えておくとラッキー。

mysql_fetch_array = 通常配列+連想配列
楽だがデータ取得が2倍になるので多用は難しい。
mysql_fetch_assoc = 連想配列

mysql_fetch_row = 通常配列


ブラウザで出すとこうなる。エクセルの表をイメージするとわかりやすいかな。
Array//$dataの配列
(
[0] => Array//$rowの1行目の配列
(
[1] => Array//$rowの2行目の配列
(

4時間目
連想配列を表で出してみよう。
foreachelse ・・・・・・データが入っていない場合の判定を入れることでエラー表示回避。

<body>
<table border="1">
 <tr><th>No.</th><th>会員ID</th><th>パスワード</th><th>有効/無効</th></tr>
 {{foreach from = $member_list item = num}}
 <tr>
  <td>{{$num.member_id}}</td>
  <td>{{$num.member_name}}</td>
  <td>{{$num.password}}</td>
  <td>{{if $num.delete_flg == 0}}有効{{/if}}
  {{if $num.delete_flg == 1}}無効{{/if}}</td>//elseifもおk
 </tr>
 {{foreachelse}}
 <tr><td colspan="4">データがありません</td></tr>
 {{/foreach}}
</table>

5時間目
4時間目の内容で、POSTされたデータを扱う。
何がきても大丈夫なように|escape()を使うことでXSS対策になる。
「escape」は「htmlspcialchars」のこと~。
あとindex.tplから。
$blog.blog_date|date_format:'%Y年 %m月 %d日 %T'
でデータの日付表示を変更できるよ。
関数を使うときは|でつなげるよ。

【問題】0302問題
以下のログインフォームをMとVに分離してください
・login.php
・login.tpl

テンプレートファイルに
・ログインネーム($login_name)と
・ログインメッセージ($login_message)
を表示させてください

多分pho側にSmarty設定を入れるのは平気だと思う。
{{$login_name}}と{{$login_message}}だけ~(設定次第なので{}のひとつでもおk)