OpenPNE: 2009年6月アーカイブ

OpenPNE では、ニックネーム、誕生日以外のプロフィール項目のテンプレート用変数は、

項目名 = ({$profile.caption})
内容 = ({$prof.profile[$profile.name].value})

のように表現する。

$profile.name には、$profile_list を foreach した結果が入っている。
$profile_list には、「プロフィール項目一覧」画面で指定した並び順どおりにデータがセットされているので、foreach した順に({$profile.caption})と({$prof.profile[$profile.name].value})を出力していけば、プロフィールの一覧が表示される。

・・・が、画面デザインのカスタマイズをしていると、ある項目だけ別の場所に表示したくなることもある。

そんなときには、

性別:({$prof.profile[sex].value})

みたいに書きたくなるが、こんな書き方では駄目で、オブジェクトらしく、

性別:({$prof.profile.sex.value})

のように書くこと。

それだけの話。すんません。単なる備忘録です。

img33.jpg

OpenPNE では、アップロードされた画像データは一旦 DB に登録され、参照されたときにキャッシュディレクトリに書き出され、以降はそれが参照されるようだ。
多分。(ドキュメントは読んでないけど(^^;、動きから察するに)

なので、直接イメージファイルを指定するのではなく、img.php を

<img src="/img.php?filename=m_7_1244606821.jpg&w=72&h=54&m=pc" alt="img" align="center" />

こんな感じで指定する。

・・・が、上記の指定方法ではディフォルトだと何も表示されない。
'w=72&h=54' ってところがミソ。
実は、OpenPNE は config.php の中で、使用出来る画像サイズを規定している。

$GLOBALS['_OPENPNE_IMG_ALLOWED_SIZE'] = array('76x76', '120x120', '180x180', '240x320', '600x600');

という具合だ。

なので、ここに、'72x54' というのを追加してやり、キャッシュディレクトリを作ってやる必要がある。

/var/img_cache の下の gif, jpg, png にそれぞれ w72_h54 という名前のディレクトリを掘ってやるわけだ。

これで、

<img src="/img.php?filename=m_7_1244606821.jpg&w=72&h=54&m=pc" alt="img" align="center" />

と書い ておけば、そこに横 72px、縦 54px の画像が表示されるわけだ。

ちなみに、画像が無いとき(例えばメンバー写真を表示したいのに、c_member テーブルの image_filename が空だったら)

<img src="/img_skin.php?filename=no_image&w=72&h=54&image_filename=skin_no_image.gif" alt="img" align="center" />

てな具合に、No Image 画像を表示してやる。

さっき、「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 の開発ってちゃんとやったことがないので、いちいちソースを読んで「なるほど、こういう仕組みかぁ」と動きを把握するしかなくてムチャ面倒くせぇ。(^^;

以前から某社に OpenPNE をカスタマイズした地域系 SNS の提案をしてたんだけど、別のお客さんで、同じく OpenPNE をカスタマイズして対応できそうな(規模は地域系 SNS と比べれば小さいが)案件が出てきたので、予行演習的な意味もあって超格安な特別価格で受注したんだけど・・・

・その後、某地域系 SNS への提案を、OpenPNE のカスタマイズからオリジナルシステムのフルビルドの形に切り替えた。
・ユーザ要件がなかなかまとまらず混乱・迷走し、結局当初要件よりずいぶんかけ離れてきてて、SNS 的機能のほとんどが必要なくなった。

という点で、OpenPNE をカスタマイズする意味がほぼ失われてしまった・・・(^^;

まあ、今から方向転換するのも納期的に厳しいので、このまま OpenPNE ベースで開発するけど、結局、「会員管理エンジン」として OpenPNE を使うことになりそうで。
非常にもったいない使い方だなあ。(^^;

ま、認証まわりを新規に作らないだけでもそれなりの工数が削減出来るんだけど、OpenPNE をハックする工数と比較して、どっちが得なのやら(^^;

このアーカイブについて

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

前のアーカイブはOpenPNE: 2009年2月です。

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

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


月別 アーカイブ

電気ウナギ的○○ mobile ver.

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