PHPTALの履歴
HTMLの属性で処理を記述できるPHPのテンプレートエンジン。
Zope Page Templatesを実装したものらしい。使ってみたい。
「metal」とか「tales」とか名前のセンスがいい!
http://phptal.org/
使ってみた感じ
少々文法にクセがある。機能はそれなりに十分。DOM解析系ではベスト?if 〜 elseif 〜 ができないようなのが残念。その代わり普通のテンプレートエンジンにはない機能が使える。コーディングスタイルも少し変わる。
ベンチマーク
http://d.hatena.ne.jp/tanakahisateru/20081024/1224850023
Smartyより若干遅いぐらい
レイアウト機能
こりゃすごいな。
http://lists.motion-twin.com/pipermail/phptal/2007-June/0007...
You can have ONE design.html which contains you base design in one macro : <html metal:define-macro="main"> <head> <title>Hello</title> </head> <body> <div id="header"> <h1>Hello</h1> </div> <div id="menu"> <ul> <li><a href="/">Home</a></li> <li><a href="/about">About</a></li> ... </ul> </div> <div id="content"> <metal:block define-slot="content"/> </div> <div id="footer"> Copyright (c) ... </div> </body> </html> And then you just call your design from each template : <html metal:use-macro="design.html/main"> <body metal:fill-slot="content" tal:ignore-tag=""> <h1>My content</h1> foo bar baz </body> </html>
Zend Frameworkへの組み込み
http://taat.pl/article/zend_framework_tutorial/step2/
基本的な構文
http://phptal.org/manual/ja/
http://www.webcore.co.jp/techinfo/misc/ZopePageTemplateRefer...
path:
配列やオブジェクトのアクセスは"/"区切りが基本。これは tales の path: の機能らしい
でも"php: "を使う場合は"."区切りになる。
context
contextについての理解が必要。
<div tal:define="hoge string:div1">
<span tal:content="hoge" />
<span tal:content="hoge" />
最初のdivで「div1」、次のdivで「div2」が表示される。タグ=スコープ。ここ理解してなくて最初の頃よくわからなかった。
tal
<div tal:content="hoge" />とかして使う。
tal:define
変数定義する
tal:condition
条件文。評価がtrueなら中身が表示される
tal:repeat
foreach。repeat/{varname}/{**} で特殊な値を取得できる。{**}はkey, index, number, even, odd, start, end, length が使える
tal:omit-tag
条件に合う場合はタグを表示しない。これはたまに使える。
tal:replace
tal:replaceの値の中身で置き換える。タグもなくなる
tal:content
tal:replaceの値の中身で置き換える。タグはなくならない
tal:attributes
属性を出力する。セミコロンで複数指定可。動的に属性定義はできないようだが、存在しない値は無視できる。
tal:on-error
エラーハンドラ
metal
metal:define-macro
マクロを定義
metal:use-macro
マクロを使う
metal:define-slot
スロットを定義。define-macroの中に定義する。
metal:fill-slot
スロットを埋めるuse-macroの中に定義する。
i18n
調べてない
tales
php:
phpが使える。ただし変数名の"$"を除去、"->"は"."に置き換える必要がある。
exists:
issetと同じ。普通は存在しないものにアクセスしたらエラーになるけどそれを回避できる。
default
定義されていない場合にタグの中身を表示する。
structure
HTMLをそのまま出力する
"|"
最初のtrueを返す
コメント
tal:comment が使えるみたいだけど
<div tal:replace=""> hogehoge </div> とするのもあり。