CakePHP 動的なウィジェットの作り方

CakePHPではコントローラーでの処理はビューを介してレイアウトのメインコンテンツ($content_for_layout)の部分に展開されます。
その際レイアウトに配置してあるメインコンテンツ以外の部分は基本的にはコントローラーから操作ができません。(たぶん)
一般的なサイトでは2段組みや3段組みのレイアウトを使うケースが多いと思いますが、メインコンテンツ領域以外もCakeを使って柔軟に制御する方法を検討します。
(出力されるHTMLの部品をウィジェットとします)

※今回の実装サンプルはこちらから確認できます。
※ソースコードはこちらからダウンロードできます。
※サンプルではメインコンテンツ側で指定されたカテゴリの情報をフッター部に表示しています。

Read more

CakePHP コントローラーのアクションをコンポーネントにまとめる

本業のほうが忙しく久々の更新になってしまいましたが小ネタです。

Cakeを使っていると最初はbakeやscaffoldを利用する機会がありますが、序々に利用頻度が減ってきました。(現在では殆ど使っていません)

理由としては、社内での共通のルールであったり、プロジェクト毎の特性を反映した雛型から複製して作成したほうが効率的になってきたということが大きいと思います。

ただ、bakeでの自動生成や複製方式だと初回は良いのですが、大規模なものになってくると、同様のソースが点在し一括での改修などが面倒なことになってきます。

ということで、明らかに同様の処理はscaffold風にコンポーネント化することにしました。
※コンポーネントからコントローラーを制御する場合は、ロジックが分散すると見通しが悪くなりますので、ロジック全体を委譲できる場合に利用することをお勧めします。
Read more

CakePHP zip圧縮コンポーネント

CodeIgniterの標準ライブラリにはZip圧縮クラスがあり、簡単に以下のような機能を実装することができます。
・Zipアーカイブを作成し、サーバーに保存やダウンロードを行う
・サーバーのファイルやディレクトリをZipに追加
・動的にテキストデータをZipに追加

このクラスをCakePHPのコンポーネントクラスとして利用できるように少々改良しました。
Read more