Posts tagged behavior

[CakePHP] 画像のアップロード&リサイズを簡単にできる ImageBehavior

19

画像のアップロード&リサイズ処理などは割とよくある処理でかつ面倒なものです。その処理を簡単にやってくれる Imageビヘイビアの紹介です。CakeFest で紹介された Media Plugin が高性能なので、メディアプラグインを使うのがいいのかもしれませんが、以前から Image ビヘイビアに関していつか使い方をまとめようと思っていたので紹介します。

参考サイト:ActAs Image column behavior (Articles) | The Bakery, Everything CakePHP

Baker で紹介されていた Image ビヘイビアです。このビヘイビアはアップロードされた画像をサムネイル作成、リサイズ、複数のバリエーションのサイズの画像を作成してくれます。またモデルを find すると画像のパスを返してくれます。

作成される画像は、webroot/img/[Model Name]/[Model ID]/ 以下に設定した名前でそれぞれの画像を作成してくれます。
(続きを読む…)

[CakePHP] Sluggable Behavior で日本語を扱う方法

1

beforeFind メソッドを追加するコードが抜けていたので追記しました。(2009.6.2)

前回書いた[CakePHP] Sluggable Behavior の使い方の最後で少し書いた、スラグに日本語を使う方法です。

日本語を使うには slug.php を少々カスタマイズする必要があります。
(続きを読む…)

[CakePHP] Sluggable Behavior の使い方

0

CakePHP の Behavior の紹介、今回は Sluggable Behavior です。

slug とは SEO に有利になるように URL にキーワードを入れるようなことです。Bakery の Sluggable Bhavior は

http://bakery.cakephp.org/articles/view/sluggable-behavior

となっています。通常の CakePHP の URL だと /articles/view/1 のように数字に ID で指定します。これを上記 URL のように英数字で ID の変わりにするビヘイビアです。

このビヘイビアの便利なところは

  • title カラムから自動的にスラグを生成してくれる
  • スラグが重複する場合は末尾に数字を付加してユニークな値にしてくれる

というところです。
(続きを読む…)

[CakePHP] SoftDeletable Behavior で論理削除

6

先日の第4回 CakePHP 勉強会で発表した内容でもあるのですが、簡単に SoftDeletable Behavior の使い方をまとめました。(少しだけ発表ないようにない追加情報もあります)

SoftDeletable Behavior はソフトデリート(論理削除)を簡単に実現してくれる大変便利なビヘイビアです。論理削除とは DB から DELETE するのではなく削除フラグを設けて DELETE する変わりに削除フラグを立てて削除したことにすることです。
(続きを読む…)

CakePHP1.2 モデルのビヘイビアを動的に切り替える

0

CakePHP 1.2 から追加されたビヘイビアが動的に追加、削除できるようになるようです。
Attaching and detaching model behaviors on-the-fly – cakebaker

以前、CakePHP メール送信許可フラグによってメールを一斉送信するメールビヘイビア を書いたときに初めてビヘイビアというのを使ったのですが、ビヘイビアというのはうまく使えばかなり便利かなと思いました。

モデルに
var $actsAs = array('BehaviorName');
と書くことにより使えるようになるのですが、現在開発中の CakePHP1.2 でビヘイビアがモデルに attach , detach できるようになるようです。

ダウンロードできる最新の CakePHP 1.2.0.6311-beta にはまだ入っていませんが、以下より model.php のソースを手に入れて
cake/libs/model/model.php
に入れることによって試すことができます。
model.php のソース

モデルにビヘイビアをアタッチ、デタッチするのは以下のようになります。

$this->Model->attach('BehaviorName');
$this->Model->dettach('BehaviorName');

CakePHP メール送信許可フラグによってメールを一斉送信するメールビヘイビア

2

Acts As Emailable | The Bakery, Everything CakePHP : Articles

メール送信許可フラグによってメールを一斉送信することができるメールビヘイビアが上記エントリで紹介されています。
ビヘイビアというのは今まで使ったことがなかったのですが、モデルに共通の振る舞いをさせるようなときに使う感じでしょうか。このメールビヘイビアはモデルにメールの一斉送信機能を付加します。

テーブル

CREATE TABLE `users` (
  `id` int(11) NOT NULL auto_increment,
  `username` varchar(255) NOT NULL default '',

  `emailable` tinyint(4) NOT NULL default '1',
  `email` text NOT NULL,
  PRIMARY KEY  (`id`)
)

emailable カラムは 0 or 1 の値で、1の場合はメール送信許可です。
email カラムはメールアドレスが入ります。

モデル

app/models/user.php

< ?php
class User extends AppModel {
     var $actsAs = array('emailable');
}
?>

モデルでメールビヘイビアを使うことを定義します。

ビヘイビア

Acts As Emailable | The Bakery, Everything CakePHP : Articles にメールビヘイビアのコードがあります。
これを app/models/behaviors/emailable.php として保存します。
ただし1点修正が必要でした。
322行目の
App::import('Component', 'EmailComponent');

App::import('Component', 'Email');
として保存してください。
Email コンポーネントが修正前のコードでは読み込めずにエラーになります。

メールテンプレート

< ?php
    echo "テストメッセージです。名前は".$username."です";
?>

保存先ですが、どこがいいのか悩みましたが今回は app/views/emails/test_template.php としました。
テンプレート内の変数はモデルのカラム名が使用できます。

メール送信

$email_options = array('from' => 'hoge@example.com', 'subject' => 'テストです');
$template = "views/emails/test_template.php";
$this->User->send_campaign_to_emailable($template, $email_options);

これでメール送信許可している(users.emailable=1)のユーザにメールが送信されます。

そのほかに以下のようなメソッドがあります。
send_campaign_to_all($template, $email_options)
登録されているユーザ全てにメールを送信します。

send_campaign_to_non_emailable($template, $email_options)
登録されているユーザでメール送信許可していないユーザにメールを送信します。

add_emailable($id)
ID で指定したユーザの emailable=1 にします。

remove_emailable($id)
ID で指定したユーザの emailable=0 にします。

デフォルトは mail 関数でメール送信しますが、SMTP を指定して送信することもできます。

まとめ

このメールビヘイビアを今回試すことによってビヘイビアの使い方、便利さが少し理解できました。まだビヘイビアを試されていない方は一度試して見てはいかがでしょうか?

optionタグを選択不可にする disabled 属性を IE6 でも有効にする方法

0

optionタグを選択不可にする disabled 属性で紹介したように option タグに disabled 属性を指定することにより選択不可にすることができるのですが、IE6 では選択できてしまいます。

JavaScript で解決する方法です。

Select, Option, Disabled And The JavaScript Solution

上記の参考サイトに詳しくやり方が書かれていますので、簡単に手順だけ紹介。

  • 参考サイトの「Implementing」にある download リンクより JavaScript コード(select-option-disabled-emulation.js)をダウンロード
  • select-option-disabled-emulation.js を適当な場所に保存
  • html 内で select-option-disabled-emulation.js を読み込む
  • 選択不可にしたい option タグに disabled 属性を指定する

DHTML で解決する方法です。

これは上記参考サイトの補足で紹介されていたサイトです。
apptaro’s blog: Emulating Disabled Options in IE with DHTML Behaviors

こちらも上記URL に詳しいやり方が書かかれていますので、簡単にご紹介。

  • 参考サイトの中央よりやや下にある Download よりファイル一式をダウンロード
  • 適当な場所に css, htc ファイルを保存
  • html で上記 css を読み込む
  • 選択不可にしたい option タグに disabled 属性を指定する

これで IE6 でも option タグの disabled 属性が使えるようになりました。

Go to Top