Upload
hisateru-tanaka
View
2.424
Download
1
Embed Size (px)
Citation preview
恒例となりましたPinocoのお時間まじめに紹介してみる
たなかひさてる@tanakahisateru
Pinoco developerPHPTAL contributorFirebug translation contributorYii 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へのニーズ
フロントエンド側のコードにも品質が求められる
なぜか保守メンバーになりました。よろしくお願いします。
これ、すぐに使いたい人は
Pinocoもっとも静的サイトに近いフレームワーク
http://tanakahisateru.github.io/pinoco/
$ cd _app$ ./serverPHP 5.4.13 Development Server started at Thu May 30 18:08:04 2013Listening on http://localhost:8801Document root is /Users/tanakahisateru/Sites/pinoco-testPress Ctrl-C to quit.
「すぐに」は本当にすぐに
ビルトインサーバ対応
最近のPinocoPhpStormの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からの移行をお待ちしております。