BlogCakePHPを中心としたサイト開発情報をメインに公開。新しもの好きなので時々製品レポートなんかも。(木)【SmartyView】CakePHPへの対応についてCakePHP1.2.5がリリースされましたので、SmartyViewの対応状況を調査してみました。該当コードは修正されていませんので、現在のバージョンで問題なく使用できると思います。手短で申し訳ございませんが、ご報告まで。(木)【SmartyView】DB内のTplを読み込みSmartyに適用する方法を紹介されています下記ブログで、SmartyViewをベースに、DB中にあらかじめ格納したTplを読み込んでSmartyに適用する手法を紹介されています。▼kaz_29@はてな:CakePHPでテンプレートにDBを使用する方法http://d.hatena.ne.jp/kaz_29/20090428/1240929093このアイデアは面白いですね!例えば規模の大きなブログサービスとかを構築する場合、WEBサーバを複数台で並列させる場合を想定しなければならないと思いますが、DBで管理することで簡単にスケール変更が出来たりします。DBに任せてしまうことでファイル管理が不要になるので、プログラム側でのデータ管理は楽になりますね。逆に、DBに置くことでアクセスが遅くなるデメリットは考えられますので、キャッシュの仕組みは必須かも。それさえ解決できれば、メリットは大きいのではないでしょうか?私も今後、少し大きな規模の案件に着手しそうですので、大変に参考になりました。Stableに対応した、SmartyViewを公開いたします。今回から、SmartyViewについては専用ページにてご案内することにしました。(木)【Tplcutter】開発経過報告(その1)Tplcutterは、とりあえず開発が進んでおります。開発バージョンは、繰り返しになりますが「革命」とありますように、機能的に大きな変更をしております。最初は従来バージョンをベースに開発していたのですが、せっかくなので「一から」作り直すことにしました。ソースコードははっきり言って別物になっていて、いくつかの技術は転用しますが、たとえばパース部分は新しいアルゴリズムで動いております。そんなわけで、現在はメインシステムのコードはまだほとんど組み上がっていない状態で、主要技術のテストコード状態なのですが、パースについては動くものができあがりつつあります。現状仕様を満たしたタグをきっちり抜き出せるようになり、オプションパラメータも良好に得られるようになりました。心配していた部分がうまく動くようになったので、とりあえず今回の目玉については満たせそうですが、次の課題は「抜き出したオプションを利用して加工する」部分になります。コードを書いていく上で、いくつかさらに新機能を盛り込むことにしました。値を定義できる「define」コマンドがあるのですが、これに「スコープ」を付けることにしました。現バージョンも「ピース」機能でdefineに相当する事が出来るのですが、ピースで定義したものは同app内ですべてのファイルに対して有効になっていて、局所的な指定が出来ませんでした。スコープを付けてほかに影響しないような設定が出来るようにすれば、より解りやすいテンプレートが作れるのではないかと思います。現時点では「public(app内ですべてに有効)」「protected(ファイル内で有効)」「private(contentなどのブロック内で有効)」の3種類にしようかと考えています。app外オプションはちょっと危険だと思いますので、現在は考えないようにしていますが、技術的には出来ないことはないと思います。それから「include」で外部ファイルの読み込みに対応。PHPコマンドを使っても同様の動きは出来ますが、こちらは「ファイル加工時に組み込みしてしまう」ため、生成物の実行時に無駄な処理ステップがなくなるメリットがある点、そして「デザイナ側でPHPを意識しないテンプレートが組める」当初のコンセプトに沿える点があります。PHP変数挿入コマンドも追加します。これはSmartyの「{$hoge}」に相当するコマンドです。ぶっちゃけPHPタグで書けば全く不要なコマンドなのですが、これもデザイナー向けであることと可視化できることにメリットがあります。ボックス指定が可能で、ボックス内にダミー値を入れておくことで編集中のテストを容易にします。Smartyのように条件分岐とか繰り返しとか欲しくなるかもしれませんが、今のところはそれ以上のPHPエイリアス系のコマンドは設けないつもりです(defineで工夫することで似たようなことは出来ると思います)。最後に、これは別の意味で重要かもしれませんが、本バージョンを正式な「1.00」バージョンにしようかと考えています。あまりにも機能が変わってしまったため、既にマイナーチェンジの域を超えてしまったからです。以前から思っていた「CakePHPだけでなく、あらゆるプラットホームでも使える」柔軟な設定が、本バージョンで満たせそうだからです。0.2.0でそれに近づいてはいましたが、現にWordPressでは「ヘッダ・フッタ」が切り出せないために使えなかったですし、まだまだ汎用ではありませんでした。「システム固有の動作」に対応できる仕組みになっているか、検証が出来ていませんが、出来ていなかった場合を想定していくつかの対応も考えていますので、たぶん大丈夫だと思います。そんなわけで、夢もふくらみつつあるTplcutterですが、開発自体は進んでいますので、気長にお待ちいただけると。公開は2月中をめどにしていますが、正直自信はないです。今回は完成間近になりましたらβバージョンを公開して、正式リリース前に、皆さんに若干テストしていただきたいと思っています。その際には是非ご協力いただけますと幸いです。バージョン0.2.0を公開いたします。先日指摘しましたelement関連の不具合の修正と、新機能である「ピース」機能の実装をいたしました。「ピース」機能を簡単に説明いたしますと、エレメントは「繰り返し流用したい部分をあらかじめファイルに書き出しておき、それを呼び出す」機能であるのに対し、「繰り返し流用したい部分をあらかじめメモリに蓄積しておき、加工時に指定の場所にコピーする」機能を提供します。することで、実際の表示の際に余分な処理を抑えることが出来、展開速度の向上を見込むことが出来ます。ピースは同一アプリケーション内であれば、テンプレート内のどの場所に記述しても有効に働きます。指定した領域のあるテンプレートファイルと異なったテンプレートファイル内でも呼び出すことが出来ます。使用例はサンプルファイル内にありますので、そちらをご覧いただけますと幸いです。使えるツールになったっぽいので、よほどのバグがない限り、しばらくバージョンアップは控えることにします。いくつかやりたい機能はありますが、それは現在構築している新企画サイトの作成が終わってからにしたいと思います。なりつつある、フレームワークを用いたWEBアプリ開発では、HTMLファイルやPHPファイルを直接表示する手法は少なくなり、Viewシステムを介してテンプレートファイルを読み込み、それを加工した後に表示する手法が一般的となりました。ところが、テンプレートファイルは通常外部から見えない領域に格納されるため、デザイン編集作業の際にテンプレートファイル内に記述する画像など表示物等のリンクが実際のリンクと異なってしまうため、編集が困難になるという問題が発生します。そこで、デザイン時では普通のHTMLを編集するような感覚でデータを作成し、それらテンプレートとその他ファイルを適切な位置に配置できるようなツールが実現できないかと考え、本ツール「Tplcutter」を開発しました。デザイナー側から見ますと、サイト制作ツール等で編集可能なディレクトリ構造のまま作業し、それをそのままプログラマー側に受け渡せます。テンプレートは読み込んで加工したものを別のディレクトリに作成し、その他表示物はコピーしますので現在稼働しているサイトのデザインを崩すことなく直接編集することも可能です。最大のメリットとしては、コマンド一発で全てのテンプレートを更新することにあります。デザイナーによって制作されたテンプレートを適用するためには、これらファイルを加工したり、異なるディレクトリに配置したりする必要がありました。デザインが変更されるたびにこの作業を行わなければならないため、無駄な手間が発生します。本ツールはこれら作業を自動化しますので、時間の節約や更新間違い等による不具合の発生を極力防ぐことが出来ます。本ツールは、もともとCakePHPフレームワークにて利用できるように開発したのですが、SmartyやSynfony等、ほかのフレームワーク・テンプレートシステムでも利用できるように、PHPコマンドラインでも利用できるよう拡張いたしました。ツールは、CakePHP1.2.xのCakeコンソール、もしくはPHP4/5のコマンドラインで使用することが出来ます。CakePHPにてテンプレートを利用する場合は、Cakeコンソールで使用することで、ほぼ無設定でCakePHP向けのテンプレート加工をします。同様に、PHPのコマンドラインから利用する場合は、ほぼ無設定でPHP向けのテンプレート加工をします。ツール一式は使用もしくは再配布について、無料でご利用いただけます。基づいて配布しております。再配布・改変等は契約の範囲内で自由に行うことが出来ます。本ツールは一般的な利用において動作を確認しておりますが、ご利用の環境や状況、設定もしくはプログラム上の不具合等により期待と異なる動作をする場合が考えられます。本ツールの利用に対する効果は無保証であり、あらゆる不利益や損害等について、当方は一切の責任をいたしかねますので、ご了承いただきますようお願い申し上げます。CakePHP1.2CakePHP1.2用SmartyViewの最新版を公開いたします。このViewを利用することで、SmartyテンプレートをCakePHPで利用することが出来ます。ご利用には別途Smartyテンプレートシステムを用意する必要があります。Bakeryにも1.2用SmartyViewが紹介されているのですが、CakePHP1.2.0.6311betaあたりから仕様の合わない部分や不具合等がいくつかありましたので、作り直して公開しております。基本的に、アーカイブを解凍していただき、そのままのディレクトリ構造をcakeシステムに適用していただければ動作すると思いますので、導入は簡単です。詳しくは、アーカイブ中のreadmeをお読みください。※RC1版と比べ、コードはだいたい同じなのですが、ヘルパーの呼び出し方法が違う等若干異なっています(view.phpのアップデート由来です)。RC1で本バージョンを使用した場合も、おそらく動作はするとは思いますが、どのような挙動をするかまでは良く分かりませんので、一応無保証でお願いします。CakePHP1.2CakePHP1.2用SmartyViewの最新版を公開いたします。このViewを利用することで、SmartyテンプレートをCakePHPで利用することが出来ます。ご利用には別途Smartyテンプレートシステムを用意する必要があります。Bakeryにも1.2用SmartyViewが紹介されているのですが、CakePHP1.2.0.6311betaあたりから仕様の合わない部分や不具合等がいくつかありましたので、作り直して公開しております。基本的に、アーカイブを解凍していただき、そのままのディレクトリ構造をcakeシステムに適用していただければ動作すると思いますので、導入は簡単です。詳しくは、アーカイブ中のreadmeをお読みください。※RC1で大きな仕様変更があったため、こちらの仕様に合わせて修正したSmartyViewを以前のバージョンのCakePHPに適用することが出来ませんが、afterSmartyRenderコールバックが呼び出されない不具合がありましたので、以前のバージョンを修正したものも合わせて公開させていただきます。6311betaを引き続きお使いの方は、SmartyView1.2.0.6311版をお使いください。