D3モジュール・Smartyアサイン(2)
Date 2006-10-12 18:20:13 | Category: XOOPS
|
MySQLには、配列というフィールドタイプは存在しません。 そこで、フィールドとしてはtextを用意し、serialize()してから格納、unserialize()して取り出す、という手法がLAMPアプリケーションでは一般的に利用されています。
ただ、その配列をSmartyにどうアサインするかは問題です。
原則的に生値アサインであるCube2.1方式なら問題は簡単です。あくまで、テンプレートサイドでエスケープ処理を行うからです。
しかし「アサインされるデータは安全である」ことを保証するシステムでは大変です。配列を一通りほどいて、それぞれにエスケープ処理を施してからようやくアサインできるのです。複雑な配列であれば、処理速度への悪影響だけでなく、余計なバグもはらんでしまいそうです。
かといって、DB格納前にHTMLエスケープを行うのは、明らかに間違いでしょう。
こういうケースでは、「美しくない」と言われるのを承知で、生値アサインを行う方がむしろベターな結果が得られそうです。テンプレートサイドが生値かどうかを知る手段は、例によって変数名です。
とりあえず、D3モジュールでは、生値アサインしたデータには、最後に _raw がつきます。このデータが配列であれば、<{foreach}>などで展開した文字列に|escapeをつけるんだな、と理解していただければ幸いです。
|
|