PEAK XOOPS - D3モジュール・Smartyアサイン(1) in englishin japanese

Archive | RSS |
XOOPS
XOOPS : D3モジュール・Smartyアサイン(1)
Poster : GIJOE on 2006-10-10 06:21:11 (8103 reads)

in englishin japanese
Smartyにどうアサインするか。
常に大きな問題でした。

とりあえず、ありがちな話題として、「速度」というのがありますが、これはあまり問題にならないことがほぼ判っています。テンプレートで使われる変数だけをチマチマと渡しても、配列やオブジェクトをドカンとまるごと渡しても、速度的には大差ありません。オブジェクトは参照で渡りますし、配列はリファレンスカウントという仕組みのおかげで、参照で渡しても実体で渡しても速度的な差はありません。むしろ、チマチマと渡すコードが羅列されている方が、よほど負荷になりそうです。

問題は、渡すべきデータをどうするか、どんな形式で渡すか。その2点です。

Cube 2.1では、可能な限りオブジェクトで渡します。そして、基本的に生データ渡しです。これは、とても明確なルールであり、素晴らしい設計だと思います。

ただ、これでデザイナーがついてこれるか、というと難しいかもしれません。生データをescapeフィルターに渡さずにそのままテンプレートに書いてしまえば、XSS or ScriptInsertionです。そういう責任をデザイナーにおわせて良いのか…。

とりあえず、D3モジュールでは、コア互換性のために、オブジェクトでアサインすることはしません。あくまで配列です。

例えば、d3forumでは、

$post
$topic
$forum
$category

という判りやすい配列でアサインされ、それぞれ統一された命名規則の要素を持ちます(表記の揺れを極力減らす、ということ)。各配列のタイトルは、$category.title, $forum.title, $topic.title です($postだけはあえて$post.subjectにしていますが…)。このように、アサイン配列の構造を整理すれば、オブジェクトでなくても、データ取得方法が統一されていると言えるでしょう。

配列アサインあれば、altsysのDreamweaver支援機能もそのまま素直に利用できる、というメリットも大きいでしょう。(オブジェクトアサインでは不可能)

そして、これらの配列は、基本的に「そのまま表示して良い」文字列に変換済です。だから、デザイナーはXSSの心配なく、<{$topic.title}> と記述することができます。これは、良い言い方をすれば「プログラムが責任を持つ」、悪い言い方をすれば「デザイナーを信用しない」やり方です。

どちらの方法が良いか、現時点では判断できません。実際に、Cube2.1やD3モジュールが普及して、デザイナーがいじる段階になって初めて評価が下されることでしょう。

0 comments

Printer friendly page Send this story to a friend

Comments list

Login
Username or e-mail:

Password:

Remember Me

Lost Password?

Register now!