恒例となりましたPinocoのお時間
まじめに紹介してみる
たなかひさてる
@tanakahisateru
Pinoco developer
PHPTAL contributor
Firebug translation contributor
Yii framework user
テンプレートエンジン
何使ってますか
デザイナーが書いたHTML
<ul>
<li>
<a href="#">menu1</a>
</li>
<li>
<a href="#">menu2</a>
</li>
<li>
<a href="#">menu3</a>
</li>
</ul>
PHPerが触るとこうなっちゃう
<ul>
<?php foreach ($menuItems as $item): ?>
<li>
<a href="<?= $item['link'] ?>"
><?= htmlspecialchars($item['label']) ?></a>
</li>
<?php /*
<li>
<a href="#">menu2</a>
</li>
<li>
<a href="#">menu3</a>
</li>
*/ ?>
<?php endforeach; ?>
</ul>
インデント変わってね?
<ul>
<?php foreach ($menuItems as $item): ?>
<li>
<a href="<?= $item['link'] ?>"
><?= htmlspecialchars($item['label']) ?></a>
</li>
<?php /*
<li>
<a href="#">menu2</a>
</li>
<li>
<a href="#">menu3</a>
</li>
*/ ?>
<?php endforeach; ?>
</ul>
でもこれ読みにくい
<ul>
<?php foreach ($menuItems as $item): ?>
<li>
<a href="<?= $item['link'] ?>"
><?= htmlspecialchars($item['label']) ?></a>
</li>
<?php /*
<li>
<a href="#">menu2</a>
</li>
<li>
<a href="#">menu3</a>
</li>
*/ ?>
<?php endforeach; ?>
</ul>
問題点
HTMLのインデント方針→DOM構造
テンプレートエンジン→分岐と繰り返し
意味構造の違う言語が混ざっている
SmartyやTwigでもこれは同じ
TAL = Template Attribute
Language (Python文化)
TALの文法で書くと
<ul>
<li tal:repeat="item menuItems">
<a href="#"
tal:attributes="href item/link"
tal:content="item/label"
>menu1</a>
</li>
<li tal:replace="">
<a href="#">menu2</a>
</li>
<li tal:replace="">
<a href="#">menu3</a>
</li>
</ul>
HTML - TAL
<ul>
<li tal:repeat="item menuItems">
<a href="#"
tal:attributes="href item/link"
tal:content="item/label"
>menu1</a>
</li>
<li tal:replace="">
<a href="#">menu2</a>
</li>
<li tal:replace="">
<a href="#">menu3</a>
</li>
</ul>
最初の<a>でちょっとズルしてるけど許して
<ul>
<li>
<a href="#"
>menu1</a>
</li>
<li>
<a href="#">menu2</a>
</li>
<li>
<a href="#">menu3</a>
</li>
</ul>
TAL
TALはXHTMLの名前空間で実現される
つまりHTMLと構文システムを共有
HTMLバリデータを通る
ということは...
単体でブラウザに出せる
TAL導入の動機
ブラウザ側技術の高度化
ユーザビリティ最優先でデザインされたUIへのニーズ
フロントエンド側のコードにも品質が求められる
http://phptal.org/
なぜか保守メンバーになりました。
よろしくお願いします。
これ、すぐに使いたい人は
Pinoco
もっとも静的サイトに近いフレームワーク
http://tanakahisateru.github.io/pinoco/
$ cd _app
$ ./server
PHP 5.4.13 Development Server started at Thu May 30 18:08:04 2013
Listening on http://localhost:8801
Document root is /Users/tanakahisateru/Sites/pinoco-test
Press Ctrl-C to quit.
「すぐに」は本当にすぐに
ビルトインサーバ対応
最近のPinoco
PhpStormのOSライセンスもらってコード品質超改善。
難しいプログラミングの開発案件でも、
中のライブラリを取り出して使うと大活躍。
0.8をリリース → ベータ期間終了予定。
APIドキュメントをオンラインに。
そろそろワークショップをやりたいと思っています。
とか面白くないので
最新機能
静的サイト構造を維持した
ビューとロジックの分離はそのままに
ロジック
HTML
(+TALの属性)
ナウいルーターを挿入可能にました
$router = $this->route();
$router->pass(array( // 無視するパス(後続のスクリプトに委譲される)
'',
'index.html',
))
->on('list', function() {
// 一覧表を出力
})
->on('show/{id}', function($id) {
// IDで取得して詳細を出力
})
->on('POST:upload', function() {
// POSTでデータ更新
})
->on('GET:upload', array($this, 'forbidden')) // 403
->on('*', array($this, 'notfound')); // 404
やりやすくなったこと:
ビューを持たないアクションとか
JSON返すRESTなAPIとか
プレーンPHPからの移行を
お待ちしております。

Phpcon kansani-2013-pinoco