PHP: 2009年6月アーカイブ

さっき、「OpenPNE のテンプレートエンジンは Smarty だから」の中で書いた Smarty の例文のつづき。

ログインしてニックネームが取れる状態と、未ログインでニックネームが取れない場合で処理を分けるには、

({if $c_member.nickname})
    ({$c_member.nickname})さん、こんにちは
({else})
    ようこそ!
({/if})

と書けば良いのだが、例えば、ニックネームが取れないときは、無条件に'ゲスト'という名前にしちゃうというのであれば、

({$c_member.nickname|default:'ゲスト'})さん こんにちは

$c_member.nickname が偽(未定義値だったり空だったり)の時、標準で'ゲスト'を出威力せよということだ。
なるほど、いちいちロジック書かなくても良いのは確かに便利だ。
が、これを便利だと思った瞬間に、何となく自分のプログラマ度が下がった気がするのは何故だろう。(笑)

ところで、Smarty のマニュアルを読むと、デリミタ文字は {}(波カッコ)になっているのに、OpenPNE のテンプレートじゃ ({})(丸カッコと波カッコの組み合わせ)になってるんで、なんでやねん?OpenPNE の独自仕様 Smarty ?とか思ったら、

$smarty = new Smarty;
$smarty->left_delimiter = '({';
$smarty->right_delimiter = '})';
...

みたいに簡単にデリミタ文字の設定は変えられるようで。

そりゃそうだよな。

昨日からわからんなりにつついてるんだけど、なるほど、Smarty は強力だ。
テンプレート上で色々と組み込み関数が使えるのが良いな。

ログインしている状態で、ログイン名(ニックネーム)が取れれば「○○さん、こんにちわ」と表示し、未ログイン状態なら「ようこそ!」と表示するのであれば、

({if $c_member.nickname})({$c_member.nickname})さん、こんにちは({else})ようこそ!({/if})

これでOKだ。

なるほど簡単だわ。

他の言語の経験のない Web プログラマが PHP に飛びつくのもわかるような気がする。

俺は使ったことがあんまり無いので(他人が書いたソースを直したことはあるが)わからないのだが、Perl の Template.pm モジュールもこんな感じなんじゃろうか?

ま、Perl プログラマは、自分が必要な機能だけを組み込んだ簡単なテンプレートエンジンをちゃっちゃと書いて、それ使ってるような気がするが・・・
多分、文化的に Smarty を必要としないんだろうなあ。
でも、使ってみると便利だけどな。Smarty(笑)

OpenPNE のマイホームページで出身地等のプロフィール情報を表示してほしいという話があったので対応。
でも、ニックネーム、誕生日等の c_member テーブルにないプロフィール情報はテンプレート用変数がセットされてないんだなあ。

つーことで、

1.webapp/lib/db/member.php に、現住所等の拡張項目を呼び出してくる関数(db_member_c_member_profile4c_member_id)を追加。

2.webapp/modules/pc/page/h_home.php に、

// メンバープロフィール情報
$c_member_profile = db_member_c_member_profile4c_member_id($u);
$this->set('c_member_profile', $c_member_profile);

 という処理を追加。

これで、テンプレート(webapp/modules/pc/templates/h_home.tpl)の中で、({$c_member_profile.pre_addr_pref}) というように表示内容を変数で指定することが可能となる。

同じデザインのフレンド向けホームページの方も同様に修正しとかなきゃ。
こっちは、プロフィール情報呼び出しのキーであるメンバーIDは $u ではなく $target_c_member_id をセットして db_member_c_member_profile4c_member_id を呼ぶ。

ああ、Smarty 使った PHP の開発ってちゃんとやったことがないので、いちいちソースを読んで「なるほど、こういう仕組みかぁ」と動きを把握するしかなくてムチャ面倒くせぇ。(^^;

このアーカイブについて

このページには、2009年6月以降に書かれたブログ記事のうちPHPカテゴリに属しているものが含まれています。

前のアーカイブはPHP: 2009年5月です。

次のアーカイブはPHP: 2009年7月です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。


月別 アーカイブ

電気ウナギ的○○ mobile ver.

携帯版「電気ウナギ的○○」はこちら