Ploneではテンプレート機能があって(ZoptPageTemplate)、テンプレート中ではいろんな函数が使える。
様々の函数が名前空間という分類で分けることが出来る。代表的なのはTAL,METAL,I18Nの三つ。

TAL(Template Attribute Language)

  1. attributes 属性を付け替える
    <a href=”hoge” tal:attributes=”href context/absolute_url”>
    → <a href=”http://shonan-maguro/thispageurl”>
    hogeがabsolute_urlの値に書き換えられる。”hoge”は失われる。
  2. content 中身をすげ替える
    <li tal:content=”context/title_or_id”>hogehoge</li>
    → <li>テンプレートの基本</li>
    要素liの中身がhogehogeからtitle_or_idの値に置き換えられる。
  3. replace タグを削除して置き換え
    <li tal:replace=”context/title_or_id”>hogehoge</li>
    → テンプレートの基本
    タグliは失われる。
  4. condition 条件判断
    <div tal:condition=”request/hoge”>ほげ</div>
    request/hogeが真→ <div>ほげ</div>
    request/hogeが偽→ (何も出ません。divすら無くなる)
    真の場合にはそのタブの内容が出力される。
  5. define 変数定義
    <ul tal:define=”results here/getResults”>hoge</ul>
    → <ul>hoge<ul>
    変数resultsにgetResultsの内容が入れられる。”;”で区切ることで複数の代入が可能。
    “a here/tako ; b here/ika” → aにtako,bにikaが代入される。
  6. repeat 繰り返し
    <li tal:repeat=”result results”><span tal:replace=”result/Title”>hoge</span></li>
    → <li>タイトル1</li> <li>タイトル2</li> …..
    resultsにはあらかじめTitleを属性に持つ何かのリストを入れておく。その何かが一つずつresultに入れられループする。
    pythonの for result in results: みたいな感じ。

METAL(Macro Expansion Template Attribute Language)

TALのマクロ拡張版って感じ。

  1. define-macro マクロの定義
    <div metal:define-macro=”getResult”> </div>
    → 空っぽ。
    マクロの定義が行われて、HTML出力としては何も出ない。
  2. use-macro マクロの使用
    <div metal:use-macro=”dokoka/getResult”></div>
    → マクロの実行結果
    上 のmacro-defineで定義されたマクロが実行され、その出力が出てくる。getResultは他のテンプレート上に存在しても良いので、 “dokoka”に使いたいマクロが定義されたテンプレートの場所を書く。同じフォルダにあるテンプレート(tako)の場合は “here/tako/macros/getResult”。同じファイル中にあるなら”template/macros/getResult”。
  3. define-slot スロットを定義する
    ス ロットとは差し込み口のこと。何かを入れるための容器を用意する感じ。Ploneのページは沢山のスロットにいろんなコンテンツをはめ込むことで実現され ている。ZMIのプローンサイト→portal_skins→plone_template→main_templateを見ると沢山のスロットがあるの が分かる。例えば、このページの左側にある「ナビゲーション」を表示しているところがleft-slotsだったりする。
    <div metal:define-macro=”time”>
    <div metal:define-slot=”msg”>hogehoge</div>
    </div>
    define-slotはどこかのマクロに含まれていなければいけない。データを差し込むのはfill-slotを使う。
  4. fill-slot スロットにデータを入れる
    <div metal:use-macro=”template/macros/time”>  ←  同じファイルにマクロが定義されている場合
    <div metal:fill-slot=”メッセージだよん”></div>
    </div>
    → <div><div>メッセージだよん</div></div>

I18N(Internationalization)

国際化。INTERNATIONALIZATION=”I-18文字-N”だから一般にI18Nと略される。ちなみにLOCALIZATIONはL10N。
ま、ぶっちゃけ「いろんな言語に対応できるよ」ってこと。
<p i18n:translate=”XXX”>Welcome to Plone.</p> のように使うらしい。詳しくはここ
すみません、まだ良く理解してないです。分かるようになったら追記します。