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つ指定して、後のデータ内容で前のデータを置換して保存する(?)
コンポーネント
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/トラックバックを送信する。
ビヘイビアは「取得」機能がメインなのが違いのようです。
ヘルパー
Cleaner
上記Utilコンポーネントで呼ばれているヘルパー。
指定したタグだけを許可してその他のタグを削除したり、括り漏れたタグを削除したりする。
[]で括った(?)GoogleVideoやYoutubeのURLを、リンクやプレイヤーに自動変換する関数bbcode2js()もある。
日本人的には、拡張してニコ動対応が欲しいところか・・・。
Gravatar
Gravatarに対応するためのヘルパー。
Gravatarとは Gravatar - グローバルに認識されるアバター (Globally Recognized Avatars)
Tree
データをツリー上に正規化するヘルパー。
以上