D3モジュール・Smartyアサイン(2)

Date 2006-10-12 18:20:13 | Category: XOOPS

in englishin japanese
MySQLには、配列というフィールドタイプは存在しません。
そこで、フィールドとしてはtextを用意し、serialize()してから格納、unserialize()して取り出す、という手法がLAMPアプリケーションでは一般的に利用されています。

ただ、その配列をSmartyにどうアサインするかは問題です。

原則的に生値アサインであるCube2.1方式なら問題は簡単です。あくまで、テンプレートサイドでエスケープ処理を行うからです。

しかし「アサインされるデータは安全である」ことを保証するシステムでは大変です。配列を一通りほどいて、それぞれにエスケープ処理を施してからようやくアサインできるのです。複雑な配列であれば、処理速度への悪影響だけでなく、余計なバグもはらんでしまいそうです。

かといって、DB格納前にHTMLエスケープを行うのは、明らかに間違いでしょう。

こういうケースでは、「美しくない」と言われるのを承知で、生値アサインを行う方がむしろベターな結果が得られそうです。テンプレートサイドが生値かどうかを知る手段は、例によって変数名です。

とりあえず、D3モジュールでは、生値アサインしたデータには、最後に _raw がつきます。このデータが配列であれば、<{foreach}>などで展開した文字列に|escapeをつけるんだな、と理解していただければ幸いです。




You can read more news at PEAK XOOPS.
http://xoops.peak.ne.jp

The URL for this story is:
http://xoops.peak.ne.jp/md/news/index.php?page=article&storyid=373