UtilsPluginの内訳

下の記事で存在を知ったのですが、
CakePHPに、様々な「ちょっとした処理」を追加できる UtilsPlugin という便利なものが配布されています。
http://1-byte.jp/2011/01/06/open_trivist/


しかし、公式ページ(ver.1.1)や、READMEを読んでも、何にどうやって使うか、ちょっと分からない物もあります。


そこで、UtilプラグインVer.1.1で何ができるのか、自分なりにソースを解読したメモです。
PingBackやTinySluggable、Archive、Cleanup、Listなど、実際に使ってみたい機能もあったので、
実際に使用したら、具体的な導入方法を、別途記事にします。


また、UtilsPluginを配布しているCakeDC様では、他にも様々な、CakePHP用の便利なプラグインを開発&公開しています。
http://cakedc.com/eng/downloads
Cake Development Corporation · GitHub
これらも、機会があれば導入検討したいです。

ビヘイビア

Btree

 いわゆる「B木」構造でデータを保存する。
B木 - Wikipedia

CsvImport

 CVSデータをインポートして、指定モデルに取り込む

Inheritable

 モデルの継承を行う
参考:http://bakery.cakephp.org/articles/taylor.luk/2008/10/22/inheritable-behavior-missing-link-of-cake-model
 「people」テーブルの情報を「emploee」に引き継ぐ、などの使い方ができる

Keyvalue

field->value という構造のデータを保存(saveSection())・読み込み(getSection())する。


以下のテーブル構造を想定している模様。

id 自動
foreign_key(変更可能:デフォルトでuser_id) [ユーザIDなど]
field Section名(変更可能、空OK).key名
value 任意


例えばusersテーブルに関連付けて、
特定のユーザ(user_id)に関連するデータだけ取得・保存したり、
特定のSectionのデータを全員分取得できたりする。


すると、usersに直接保存するのと比べて、項目数を増やすのにテーブル構造変更が不要になる・・・というBehavoirでしょうか。

List

順番指定のある一覧データを、操作・取得する。
Ajaxと組合わせて使うと面白そう。


テーブルには、順番を指定するカラム(position:カラム名変更可能)があり、
positionに、1刻みで順番が指定されていることが前提。

<テーブルのイメージ>

id position name value ・・・
1 1 A *** ・・・
5 2 B *** ・・・
6 3 C *** ・・・


関数
 insertAt() positionを指定してInsert/Update。
 moveLower() idを指定して、positionを1下げる
 moveHigher() idを指定して、positionを1上げる
 moveToBottom() idを指定して、一番下に移動
 moveToTop() idを指定して、一番上に移動
 removeFromList() idを指定して、一覧から削除(position自動調整)
 isFirst() idを指定して、最初の項目かどうかチェック
 isLast() idを指定して、最後の項目かどうかチェック
 higherItem() idを指定して、一つ上の項目取得
 lowerItem() idを指定して、一つ下の項目取得


positionを特に指定せずにsave/delete行った場合は、beforeSaveとAfterDeleteの機能で自動的に設定されます。

Lookupable

関連付けのあるデータを参照・保存する。
 個人的には、関連付けは意識してON/OFFするのが好きなので、使い手が微妙・・・

Pingbackable

PingBackやトラックバック機能を実装するのに便利なBehavoir。
PingBack元やトラックバック先のページ内容を取得、タグなどをクリーンアップしてデータベースに保存まで可能です。
データベースに保存する場合、テーブルの書式や内容はある程度規定されます。

Publishable

データを「公開」したときに、「公開日」を記録したりするビヘイビア。
・・・らしい。正直よく分かりません・・・

Serializable

$this->data中の指定のfieldを、シリアル化したり、取得したシリアル化データを戻すビヘイビア。
対象のfieldやデータがなかった場合のエラーなどを回避している模様。

Sluggable

保存するデータのタイトルなどを正規化するビヘイビア。
unique化も可能(連番数字を末尾につける形)

SoftDelete

delete()関数の処理を、SoftDelete(データベース上はデータを残しながら、表示させない)に変更するビヘイビア。
対象のモデルには、削除日時を記録するカラム(deleted_date)の追加が必要。

SoftDelete状態のデータを取得したり、元に戻す機能なども充実しています。

TinySluggable

指定の文字列データを短縮・正規化して保存するビヘイビア。
変換後の文字列は半角英数字のみで、必ずuniqueになる。
bit.lyのようなURL短縮などに用いると良い、という志向らしい。

Toggleable

データを2つ指定して、後のデータ内容で前のデータを置換して保存する(?)

ライブラリー

Languages

L10nの多言語化ファイルをチェックして、対応言語一覧のリストを出力する。


L18nには対応してないのかな・・・?

コンポーネント

Archive

指定コントローラ以下のデータを、年・月毎に件数を集計する。

例えば、DiaryControllerで用いると、

$data = array(
    '0' => array('2011', '01', '39'),
    '1' => array('2011', '02', '50'),
    '2' => array('2011', '03', '11'),
    .....
)

のようなデータが得られて、「2011年1月の日記(39件)」などの表示ができる。


集計基準はデフォルトで「created」だが、modifiedなどにも変更可能。

FormPreserver

フォームを送信したら「ログインが必要」であった場合、ログインして戻ってきた時まで入力内容を保持し続ける機能。

長文書いて認証時間切れになるような場合などに対応できるか。


データはセッションで保管。

Pingbacks

PingBack/トラックバックを送信する。
ビヘイビアは「取得」機能がメインなのが違いのようです。

Referer

add/editが成功した後、元のページに戻る機能。

戻りたいページで Referer->setReferer()しておくと、add/edit成功後にReferer->rdeirect()でそのページに戻れるようです。

Utils

Utilプラグインの中で更に「その他色々」的な関数群か?

現在、cleanHtml()という、Utils.Cleanerヘルパーの処理を行う関数があります。

ヘルパー

Cleaner

上記Utilコンポーネントで呼ばれているヘルパー。
指定したタグだけを許可してその他のタグを削除したり、括り漏れたタグを削除したりする。
[]で括った(?)GoogleVideoやYoutubeのURLを、リンクやプレイヤーに自動変換する関数bbcode2js()もある。


日本人的には、拡張してニコ動対応が欲しいところか・・・。

Gravatar

Gravatarに対応するためのヘルパー。
Gravatarとは Gravatar - グローバルに認識されるアバター (Globally Recognized Avatars)

Tree

データをツリー上に正規化するヘルパー。

以上