cakephpを使って10分でCMSを作る方法

0

こんにちわ。
先日cakephpを使って10分でCMSを作る方法を教える必要があったのですが、まとめた資料をブログでもシェアします。
CMSってこんなに簡単に作れるんだ!を体験してもらえたら幸いです。

環境はすでに構築してある前提ですが、ローカルサーバーを立てたい場合には、
以下のサイトが参考になるかと思います。

ではでは、早速言ってみましょう!

1.CakePHPの最新版をダウンロード

まずはCakePHPの公式サイトから最新版をダウンロードします。
https://github.com/cakephp/cakephp/downloads

20110704 01 1

ダウンロードしたファイルを解凍すると長い名前になっているので、「cakephp」などにリネームしておきます。

そしてFTPソフトでサーバーにアップロードします。アップ先は公開ディレクトリにしてください。

SSHで実行する場合は、以下のコマンドを叩きます。

wget https://github.com/cakephp/cakephp/tarball/1.3
tar xvfz 1.3
mv ./cakephp-cakephp-ee16348/ ./cakephp/

1.CakePHPのセットアップ

それでは、CakePHPが動作するようにセットアップしていきます。

セットアップにはbakeというコマンドを使用します。
これはコマンドラインでMVC (M=モデル、V=ビュー、C=コントローラー)のプログラムを自動で生成してくれる機能です。
爆速でプログラミングできるようになるので、今回はこれを使います。

それでは、まずターミナルを立ち上げて以下のコマンドを実行しましょう。
今回はnewappというディレクトリを作成して、そこに全て格納するようにします。

cakephpへのパスは先ほどダウンロードしたディレクトリです。
適時変更しながら読み進めてくださいね。

$ cakephp/cake/console/cake bake ← bakeコマンドを実行します。

Welcome to CakePHP v1.3.10 Console
---------------------------------------------------------------
App : public
Path: /home/username/public
---------------------------------------------------------------
What is the full path for this app including the app directory name?
 Example:/home/username/public/myapp
[/home/username/public/myapp] > /home/username/public/newapp
 ←パスを指定します。

Bake Project
Skel Directory: /home/username/public/cakephp/cake/console/templates/skel
Will be copied to: /home/username/public/newapp
---------------------------------------------------------------
Look okay? (y/n/q)
[y] > ←空Enter
Do you want verbose output? (y/n)
[n] >  ←空Enter
---------------------------------------------------------------
Created: newapp in /home/username/public/newapp
---------------------------------------------------------------

Creating file /home/username/public/newapp/views/pages/home.ctp
Wrote `/home/username/public/newapp/views/pages/home.ctp`
Welcome page created
Random hash key created for 'Security.salt'
Random seed created for 'Security.cipherSeed'
CAKE_CORE_INCLUDE_PATH set to /home/username/public/cakephp in webroot/index.php
CAKE_CORE_INCLUDE_PATH set to /home/username/public/cakephp in webroot/test.php
Remember to check these value after moving to production server
Your database configuration was not found. Take a moment to create one.
---------------------------------------------------------------
Database Configuration:
---------------------------------------------------------------
Name:
[default] >  ←空Enter
Driver: (db2/firebird/mssql/mysql/mysqli/odbc/oracle/postgres/sqlite/sybase)
[mysql] >  ←空Enter。MySQLを使う。
Persistent Connection? (y/n)
[n] > ←空Enter
Database Host:
[localhost] > ←DBのホスト名を入力。今回はlocalhostを使用。
Port?
[n] > ←空Enter。ポートはデフォルトを使用。
User:
[root] > hoge ←DBのユーザー名を指定
Password:
> fuga ←DBのパスワードを指定
Database Name:
[cake] > hoge ←DB名を指定
Table Prefix?
[n] > ←空Enter
Table encoding?
[n] > ←空Enter

---------------------------------------------------------------
The following database configuration will be created:
---------------------------------------------------------------
Name:         default
Driver:       mysql
Persistent:   false
Host:         localhost
User:         hoge
Pass:         ************
Database:     hoge
---------------------------------------------------------------
Look okay? (y/n)
[y] > ←この内容でOKなら空Enter。
Do you wish to add another database configuration?
[n] > ←空Enter。DB設定は1つのみ。

Creating file /home/username/public/newapp/config/database.php
Wrote `/home/username/public/newapp/config/database.php`

これで /home/username/public/newapp にアプリケーションがセットアップできました。

20110704 02

↑http://[ドメイン]/newapp/にアクセスして、ページが表示されればひとまずOKです。

2.テーブルを作成する

それでは、CakePHPで更新するテーブルを作成します。
今回はPostテーブルという名前で作成します。

20110704 03

↑タイトルと本文だけのシンプルな構造です。

SQLはこんな感じです。

CREATE TABLE IF NOT EXISTS `posts` (
  `id` int(10) unsigned NOT NULL auto_increment,
  `title` varchar(255) character set utf8 NOT NULL,
  `body` text character set utf8 NOT NULL,
  `created` datetime NOT NULL,
  `modified` datetime NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 ;

3.アプリケーションのセットアップ

ここから再度コンソールに戻ってbakeを実行します。
オプションの引数でアプリ名を指定します。

$ cakephp/cake/console/cake bake -app newapp
←newappのセットアップを行います

Welcome to CakePHP v1.3.10 Console
---------------------------------------------------------------
App : newapp
Path: /home/username/public/newapp
---------------------------------------------------------------
Interactive Bake Shell
---------------------------------------------------------------
[D]atabase Configuration
[M]odel
[V]iew
[C]ontroller
[P]roject
[F]ixture
[T]est case
[Q]uit
What would you like to Bake? (D/M/V/C/P/F/T/Q)
> M ←モデルを作成します。
---------------------------------------------------------------
Bake Model
Path: /home/username/public/newapp/models/
---------------------------------------------------------------
Possible Models based on your current database:
1. Post
Enter a number from the list above,
type in the name of another model, or 'q' to exit
[q] > 1 ←Postモデルを作成する
Would you like to supply validation criteria
for the fields in your model? (y/n)
[y] > ←空Enter。入力チェックを追加します。

Field: id
Type: integer
---------------------------------------------------------------
Please select one of the following validation options:
---------------------------------------------------------------
1 - alphanumeric
2 - between
3 - blank
4 - boolean
5 - cc
6 - comparison
7 - custom
8 - date
9 - decimal
10 - email
11 - equalto
12 - extension
13 - inlist
14 - ip
15 - maxlength
16 - minlength
17 - money
18 - multiple
19 - notempty
20 - numeric
21 - phone
22 - postal
23 - range
24 - ssn
25 - time
26 - url
27 - userdefined
28 - uuid
29 - Do not do any validation on this field.
... or enter in a valid regex validation string.

[29] >  ←空Enter。idフィールドは入力チェックはしない。

Field: title
Type: string
---------------------------------------------------------------
Please select one of the following validation options:
---------------------------------------------------------------
1 - alphanumeric
2 - between
3 - blank
4 - boolean
5 - cc
6 - comparison
7 - custom
8 - date
9 - decimal
10 - email
11 - equalto
12 - extension
13 - inlist
14 - ip
15 - maxlength
16 - minlength
17 - money
18 - multiple
19 - notempty
20 - numeric
21 - phone
22 - postal
23 - range
24 - ssn
25 - time
26 - url
27 - userdefined
28 - uuid
29 - Do not do any validation on this field.
... or enter in a valid regex validation string.

[19] >  ←空Enter。タイトルを必須項目にする。
Would you like to add another validation rule? (y/n)
[n] > y ←続けて入力チェックを追加する

Field: title
Type: string
---------------------------------------------------------------
Please select one of the following validation options:
---------------------------------------------------------------
1 - alphanumeric
2 - between
3 - blank
4 - boolean
5 - cc
6 - comparison
7 - custom
8 - date
9 - decimal
10 - email
11 - equalto
12 - extension
13 - inlist
14 - ip
15 - maxlength
16 - minlength
17 - money
18 - multiple
19 - notempty
20 - numeric
21 - phone
22 - postal
23 - range
24 - ssn
25 - time
26 - url
27 - userdefined
28 - uuid
29 - Do not do any validation on this field.
... or enter in a valid regex validation string.

[19] > 15 ←タイトルの文字数制限を行う。
Would you like to add another validation rule? (y/n)
[n] > ←空Enter。次の項目へ。

Field: body
Type: text
---------------------------------------------------------------
Please select one of the following validation options:
---------------------------------------------------------------
1 - alphanumeric
2 - between
3 - blank
4 - boolean
5 - cc
6 - comparison
7 - custom
8 - date
9 - decimal
10 - email
11 - equalto
12 - extension
13 - inlist
14 - ip
15 - maxlength
16 - minlength
17 - money
18 - multiple
19 - notempty
20 - numeric
21 - phone
22 - postal
23 - range
24 - ssn
25 - time
26 - url
27 - userdefined
28 - uuid
29 - Do not do any validation on this field.
... or enter in a valid regex validation string.

[29] > 19 ←本文を必須にする
Would you like to add another validation rule? (y/n)
[n] > ←空Enter。次の項目へ。

Field: created
Type: datetime
---------------------------------------------------------------
Please select one of the following validation options:
---------------------------------------------------------------
1 - alphanumeric
2 - between
3 - blank
4 - boolean
5 - cc
6 - comparison
7 - custom
8 - date
9 - decimal
10 - email
11 - equalto
12 - extension
13 - inlist
14 - ip
15 - maxlength
16 - minlength
17 - money
18 - multiple
19 - notempty
20 - numeric
21 - phone
22 - postal
23 - range
24 - ssn
25 - time
26 - url
27 - userdefined
28 - uuid
29 - Do not do any validation on this field.
... or enter in a valid regex validation string.

[29] > ←空Enter。作成日は入力チェックはしない

Field: modified
Type: datetime
---------------------------------------------------------------
Please select one of the following validation options:
---------------------------------------------------------------
1 - alphanumeric
2 - between
3 - blank
4 - boolean
5 - cc
6 - comparison
7 - custom
8 - date
9 - decimal
10 - email
11 - equalto
12 - extension
13 - inlist
14 - ip
15 - maxlength
16 - minlength
17 - money
18 - multiple
19 - notempty
20 - numeric
21 - phone
22 - postal
23 - range
24 - ssn
25 - time
26 - url
27 - userdefined
28 - uuid
29 - Do not do any validation on this field.
... or enter in a valid regex validation string.

[29] > ←空Enter。更新日は入力チェックはしない
Would you like to define model associations
(hasMany, hasOne, belongsTo, etc.)? (y/n)
[y] > n ←モデルのアソシエーション。今回は使用しない

---------------------------------------------------------------
The following Model will be created:
---------------------------------------------------------------
Name:       Post
DB Table:   `posts`
Validation: Array
(
    [title] => Array
        (
            [notempty] => notempty
            [maxlength] => maxlength
        )

    [body] => Array
        (
            [notempty] => notempty
        )

)

---------------------------------------------------------------
Look okay? (y/n)
[y] > ←上記プレビューの内容で良ければ空Enter

Baking model class for Post...

Creating file /home/username/public/newapp/models/post.php
Wrote `/home/username/public/newapp/models/post.php`
SimpleTest is not installed. Do you want to bake unit test files anyway? (y/n)
[y] > n ←自動テストは今回は作成しない

これでModelの設定は完了です。
次にControllerを設定します。

---------------------------------------------------------------
Interactive Bake Shell
---------------------------------------------------------------
[D]atabase Configuration
[M]odel
[V]iew
[C]ontroller
[P]roject
[F]ixture
[T]est case
[Q]uit
What would you like to Bake? (D/M/V/C/P/F/T/Q)
> C ←コントローラーを作成
---------------------------------------------------------------
Bake Controller
Path: /home/username/public/newapp/controllers/
---------------------------------------------------------------
Possible Controllers based on your current database:
1. Posts
Enter a number from the list above,
type in the name of another controller, or 'q' to exit
[q] > 1 ←Postを選択
---------------------------------------------------------------
Baking PostsController
---------------------------------------------------------------
Would you like to build your controller interactively? (y/n)
[y] >  ←空Enter。対話式で作成します。
Would you like to use dynamic scaffolding? (y/n)
[n] >  ←空Enter。scaffoldは使用しない。
Would you like to create some basic class methods
(index(), add(), view(), edit())? (y/n)
[n] > y ←Postデータの一覧や追加変更処理を自動生成する
Would you like to create the basic class methods for admin routing? (y/n)
[n] >  ←空Enter。URLにadminを使用しない。
Would you like this controller to use other helpers
besides HtmlHelper and FormHelper? (y/n)
[n] >  ←空Enter。Htmlヘルパーを使用しない。
Would you like this controller to use any components? (y/n)
[n] >  ←空Enter。コンポーネントを使用しない。
Would you like to use Session flash messages? (y/n)
[y] >  ←空Enter。flashコンポーネントを使用する。

---------------------------------------------------------------
The following controller will be created:
---------------------------------------------------------------
Controller Name:
	Posts
---------------------------------------------------------------
Look okay? (y/n)
[y] >  ←上記プレビューの内容で良ければ空Enter

Creating file /home/username/public/newapp/controllers/posts_controller.php
Wrote `/home/username/public/newapp/controllers/posts_controller.php`
SimpleTest is not installed. Do you want to bake unit test files anyway? (y/n)
[y] > n ←自動テストは今回は作成しない

これでコントローラーも完了です。
最後にViewファイルを作ります。

---------------------------------------------------------------
Interactive Bake Shell
---------------------------------------------------------------
[D]atabase Configuration
[M]odel
[V]iew
[C]ontroller
[P]roject
[F]ixture
[T]est case
[Q]uit
What would you like to Bake? (D/M/V/C/P/F/T/Q)
> V ←Viewを選択
---------------------------------------------------------------
Bake View
Path: /home/username/public/newapp/views/
---------------------------------------------------------------
Possible Controllers based on your current database:
1. Posts
Enter a number from the list above,
type in the name of another controller, or 'q' to exit
[q] > 1 ←Postを選択
Would you like bake to build your views interactively?
Warning: Choosing no will overwrite Posts views if it exist. (y/n)
[n] > y ←上書きを許可
Would you like to create some CRUD views
(index, add, view, edit) for this controller?
NOTE: Before doing so, you'll need to create your controller
and model classes (including associated models). (y/n)
[y] >  ←空Enter。一覧や追加変更ページを自動生成する
Would you like to create the views for admin routing? (y/n)
[n] >  ←空Enter。URLにadminを含むページを作成しない。

Creating file /home/username/public/newapp/views/posts/index.ctp
Wrote `/home/username/public/newapp/views/posts/index.ctp`

Creating file /home/username/public/newapp/views/posts/view.ctp
Wrote `/home/username/public/newapp/views/posts/view.ctp`

Creating file /home/username/public/newapp/views/posts/add.ctp
Wrote `/home/username/public/newapp/views/posts/add.ctp`

Creating file /home/username/public/newapp/views/posts/edit.ctp
Wrote `/home/username/public/newapp/views/posts/edit.ctp`
---------------------------------------------------------------

View Scaffolding Complete.

これで表示画面も設定が終わりました。

1点だけ、ファイルを修正する必要があります。

Postモデルのタイトルチェックで追加した文字数制限ですが、
制限したい文字数を記述する必要があるので直接ファイルを書き換えます。

newapp/models/post.phpを開いたら、16行目近辺を以下のように修正します。

'maxlength' => array(
				'rule' => array('maxlength'),
               ・・・

'maxlength' => array(
				'rule' => array('maxlength', 255),

これでデータの登録更新処理部分は完了です。

ひとまずブラウザから以下のURLにアクセスして動作を確認してみてください。
http://[ドメイン]/newapp/posts/

20110704 04

↑上のような画面が生成されていればOKです。

20110704 05

↑更新画面もばっちりできています。

20110704 06

↑エラー画面もばっちりです。
実際にデータが登録できる事も確認してみてください。

ログイン画面を作る

まだこれで終わりではないですよ。
そうです。管理者だけが更新できるようにするためのログイン画面が必要ですね。

ここはbakeだけでは作れないので、手を動かします。
まずはログインできるユーザー情報を格納するテーブルを作ります。

20110704 07

SQL

CREATE TABLE IF NOT EXISTS `users` (
  `id` int(10) unsigned NOT NULL auto_increment,
  `username` varchar(255) character set utf8 NOT NULL,
  `password` varchar(255) character set utf8 NOT NULL,
  `created` datetime NOT NULL,
  `modified` datetime NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 ;

先ほどのPostと同様にUserでもbakeして、controller、model、viewを作成します。
内容は先ほどと同じでOKです。

$ cakephp/cake/console/cake bake -app newapp

それぞれのファイルを作成したら
users_controller.phpを以下のように編集します。

newapp/controllers/users_controller.php

class UsersController extends AppController {
	var $name = 'Users';
	$components = array('Auth');

	function login(){
	}
	function logout(){
	    $this->Auth->logout();
	}
}

ログイン画面を作成

app/views/usersフォルダ内にlogin.ctpファイルを作成します。
以下の内容をコピーしてください。

newapp/views/users/login.ctp

 if  ($session->check('Message.auth')) $session->flash('auth');
 echo $form->create('User', array('action' => 'login'));
 echo $form->input('username');
 echo $form->input('password');
 echo $form->end('Login');

ログアウト画面を作成

同時にlogout.ctpも作成します。

newapp/views/users/logout.ctp

ログアウトしました。

これでログインフォームが出来ました。
次に、ログインするためのユーザー名とパスワードをDBに設定します。

その際にパスワードは暗号化する必要があるのですが、
以下の手順で簡単に暗号化したパスワードを知る事ができますよ。

20110704 08

SQL

INSERT INTO  `users` (
`id` ,
`username` ,
`password` ,
`created` ,
`modified`
)
VALUES (
NULL ,  'test',  'cd2409a5830bc21d461a2911da440ea877fab27b',  '2011-07-05 00:00:00',  '2011-07-05 00:00:00'
);

最後にpost_controller.phpに認証が必要ないアクションを指定します。
indexとviewアクションは一般ユーザーが見れて良いページなので
この2つのアクションだけ認証が必要ないようにします。

以下のコードをpost_controller.phpに追加してください。

newapp/controllers/posts_controller.php

var $components = array('Auth');

function beforeFilter()
{
    $this->Auth->allow('index', 'view');
}

これで完了です!

さあ、http://[ドメイン]/newapp/posts/ にアクセスしてみてください。
ログイン画面が出て、ユーザー名とパスワードを入力するとページが開けるようになりました。

以上で終了です。
簡単に設置できるよう、色々はしょっている部分もあります。ご了承ください。
何かわからない事や質問などありましたらお気軽にコメントくださいね。

読むべきサイトやブログ記事

もっと色々な機能が知りたい方やCakePHPを触ってみたい方は以下のサイトやブログを参考にすると色々勉強になると思います。私もいつもお世話になっております。

書籍ではこの本がおすすめです。cakephp1.2が対象なのですが、基礎的な部分からテストのやり方など
とてもためになる情報が満載です。

また、手前味噌ですが当ブログのCakePHPタグもぜひどうぞ。

以上、cakephpを使って10分でCMSを作る方法でした。

CakePHPでjQueryを使って画像をトリミングするコンポーネント

0

20110130-03

CakePHPで画像をトリミングするコンポーネントがBakeryにありましたので、ご紹介。

CakePHPのデバッグレベルをブラウザから切り替えるFirefox拡張

0

CakeDebug」はブラウザからCakePHPのデバッグレベルを切り替えるFirefox拡張です。

インストールすると、ブラウザのステータスバーにCakeアイコンとデバッグレベルが表示されるようになります。
20101222-02

右クリックからデバッグレベルを選択、変更できるようになりました。
CakePHP開発者の方は全員入れて良いのではないでしょうか!

設定方法

コンポーネントをgithubからダウンロードして、コンポーネントに読み込むだけです。

app_controller.phpに設定すると良いでしょう。


class AppController extends Controller {
    var $components = array(
        'DebugControl',
    );
}

デバッグレベルが0の場合には動作しないようです。
必ず1以上の値を設定してください。

Configure::write('debug', 1);

CakePHPで普段使っているpluginをまとめてみた

3

20101220-07

2010年を振り返る意味で、自分がCakePHPで開発する際に良く使うプラグインをまとめてみました。
誰かのお役に立てれば幸いです。


1.cakeplus

■ よく使うバリデーションをまとめたBehaviorであるadd_validation_rule
モデルでバリデーションする際に本当に使います。


var $validate = array(
 		'hoge' => array(
			"rule1" => array('rule' => array('katakana_only'),
 				'message' => 'hogeにカタカナ以外が含まれています'
 			),
 		),
 	);

■ 自動でhiddenタグを生成するヘルパーformhidden

確認画面を挟む際にhiddenに入力情報をまとめて出力してくれます。

echo $formhidden->hiddenVars();

このプラグインを知ってから、CakePHPで作ったサイトには全て組み込んでいるぐらい必須のプラグインです。
フォームを作成する際にはもう手放せません


2.XformHelper

フォーム入力画面と確認画面で共通で使えるヘルパーです。
確認画面を作る際に、確認画面用のviewを作らなくてもよいので大変便利に使わせてもらってます。

例えば、こんなviewをelementに作ったとします。


echo 'タイトル:';
echo $xformjp->input('Post.title');

そうすると、入力画面と確認画面のviewから このelementを読み込むだけで、
・入力画面ではフォームを表示
・確認画面では入力されたテキストを表示
を自動的に切り替えてくれる素敵仕様になっています。
これもまず手放せないプラグインとなっています。


3. cakephp-commentor-plugin

コメントを表示するプラグインです。
投稿はajaxで出来るようになっているので、組み込みも簡単です。

コメントスパム対策プラグインであるAkismetや、連続投稿の防止、IP制限など様々なスパム対策が施されています

使う時はこんな感じでelementを組み込むだけです。


//投稿済みのコメント一覧を表示します
echo $this->element('comments/index', array(
    			'plugin' => 'commentor',
    			'commentParent' => $commentParent,
				));

//投稿フォームを表示します
echo $this->element('comments/add', array(
    		'plugin' => 'commentor',
		));


4. debug_kit

言わずと知れた最強デバッガー。
POSTやViewへ渡した変数の出力やSQLの表示など、必要な情報をブラウザで確認できるようになります。

これはコンポーネントにプラグインを指定するだけで使えるようになります。


var $components = array('DebugKit.Toolbar');


5. MeioUpload Behavior

画像のアップロードビヘイビア。
プラグイン使用時に画像のフォーム名を指定して、
WWWROOTの下にモデル名 / カラム名 のフォルダを作成すると、該当箇所に勝手にアップロードしてくれます。

リサイズのサイズ設定も初期値を設定してあげるだけで自動的によしなにしてくれます。

    var $actsAs = array(
        'Meioupload.MeioUpload' => array(
            'image' => array(
                'thumbsizes' => array(
                //サムネイルのサイズをここで指定します。
    				'large'  => array('width'=>450, 'height'=>450, 'zoomcrop'=>null),
                ),
            ),
        ),
	);

MediaPluginという高機能なファイルアップローダーもあるのですが、画像ファイルだけ上げれば良い場合にはこっちを使う事が多いです。


6. qdmail

PHP高機能日本語メール送信ライブラリ。
メール送信の際はもうこれで良いでしょう的な最強メールClass。

コンポーネントととして利用する場合には、初期値をよしなにしてくれるプラグインcakephp-qdmailerは必須です。

以下はQdmailerを使用したサンプル

$this->Qdmailer->to( "送信先メールアドレス" );
$this->Qdmailer->subject("サブジェクト");
$this->Qdmailer->from( "送信者のメールアドレス" );

//メール本文はelementを使用
$this->Qdmailer->cakeText( $this->data, 'element名', 'default');

//送信処理
if (!$result = $this->Qdmailer -> send()) {

    //メール送信時にエラーが発生した場合にログを出力
	$message = print_r($this->Qdmailer->errorStatment(false),true);
	$this->log($message);
	$this->log($this->data);
}


7. multibox_validation

チェックボックスをグループとして扱うためのビヘイビア。

チェックボックスのチェック数をバリデートできるようになります。
例えば、1個以上、4個以下のチェックの場合にエラーを発生させるような動作なんかに使います。

var $actsAs  = array(
    'MultiboxValidation' => array(
        'name' => 'house',
        'min' => '1',
        'max' => '4',
        'message'=>'1から4個の範囲でチェックしてください'
    ),
);

データはシリアライズされて格納されるのでなかなか便利です。


8. MultivalidatableBehavior

Validationの必須ルールを動的に変更します。
データ登録時と編集時でバリデーションが違ったり、同じModelでもページ毎にバリデーションが違う場合なんかに良く使います。

function register() {
    $this->User->setValidation('register'); 

    //登録時にのみチェックするバリデーションに変更します。
} 

function password() {
    $this->User->setValidation('changePassword'); 

    //パスワード変更時にのみチェックするバリデーションに変更します。
}


9. OrderedBehavior

並び順を指定したり変更する事ができます。
idを指定するだけで、一つ上(下)のデータと順番を入れ替える事ができます。

//一つ上に移動する場合
$this->ModelName->moveup($id);
//一つ下に移動する場合
$this->ModelName->movedown($id);

※bakeryの記事からバージョンが上がっているようです。
リンク先の一番下のコメントに最新版へのリンクがあります。


10. csv Datasource

データベースが使えない場合や、管理更新はCSVを使うと言う場合に重宝します。
CSVを使ったfind、ページングができるようになっています。

$conditions = array(
  "id >" => 10,
  "status" => 1
);
$conditions = array(
  "or" => array(
    "id <=" => 10,
    "status" => 1
  )
);

最後に

CakePHPは最早枯れたフレームワークになって来ていると思います。
もっと便利になるように、みんなで使い倒しましょう。

他にも便利なプラグインがあれば教えてください!

jQueryで使えるサジェストプラグイン&チュートリアル10選

0

20101214-13

WebデザインやWeb開発に使えるオープンソースプログラムを紹介するblogfreakzというブログにてjQueryで使えるサジェストプラグインとチュートリアルが紹介されていました。

10 Awesome jQuery Autocomplete Plugins & Tutorials」というエントリーから抜粋してご紹介。

CakePHPからDropBoxを使用するコンポーネント

0

20100407-01
自分用メモです。
CakePHPからDropBoxのファイルが操作できるコンポーネントが Bakeryにありました。

DropBoxってAPIなんてあったんですね。ログインして自分のファイルを操作できるようです。

これでサーバーでもファイルの同期ができそうです。
CakePHPに限らず、色んなサイトで流用できそうですね。

CakePHPで認証付きの静的ページを作る

1

CakePHP1.2で管理者用の静的ページを作る(認証付き)というエントリーを見つけました。

静的ページで良いんだけど認証ユーザーにだけ見せたい場合とかってみんなどうやってるんでしょうね。自分のやり方を忘れないためにエントリー。

やり方としてはPagesにアクセスされた際にapp_controllerにて、ログインユーザー以外は非表示になるよう処理を振り分けます。

コードはこんな感じです。

<php
class AppController extends Controller {
    var $lockedPages = array('agreement');
    function beforeFilter()
    {
        // pages controllerかどうかをチェック
        if ($this->name == 'Pages')
        {
            // pagesなら引数を受け取る
            $path = $this->passedArgs;

            // 認証ユーザーしか閲覧できないページか調べる
            if (isset($path[0]) && in_array($path[0], $this->lockedPages))
            {
                //ここでpagesのdisplayをロック
                $this->Auth->deny('display');
            }
        }
    }
}?>

$lockedPagesに、認証ユーザーにだけ見せたいPageを配列で指定するだけで簡単に量産することが可能です。
これだとルーティングも特に変更する必要はありません。

どっかの記事にのってたのを参考にしたはずなんですが、元記事が見つけられませんでした。

pages_controllerをapp以下に持ってきた方が色々カスタマイズするには便利なんだけど、静的ページを見せたいだけならいっつもこんな感じです。

PHP用の世界最速最軽量MVCフレームワーク「DooPHP」

0

DooPHP
DooPHPはPHPでできたオープンソースの軽量MVCフレームワークです。より少ないコストでサイトを構築するには最近はこういったフレームワークは必須ですね。

高性能だけれども軽くて早い、ぜひ使ってみたくなるようなベンチマークが公式サイトに掲載されていました。

doophp_benchmark_comparison

CakePHPやCodeIgniterと比較したベンチマークを測った所、はるかに多くの処理を実行できたそうです。

DooPHPは軽量ですがいくつかの重要な機能はサポートしています。
・MVC
・REST
・URIルーティング
・ORM
・Templateエンジン

最近はこういったフレームワークが多数出現するため選択肢に幅がでるのは良いのですが、とっかかりが難しく途中で利用を諦める場合があります。業務で利用できるまでになるには日本語での情報が期待ですね。

サイトにはブログなどの多数のデモがあるためPHPデベロッパーの方はぜひ見てみてください。

これはすごい!CSS FrameworkのRMSforms

0

20091231_004340
画像は公式サイトデモより

最近はフォームを作成する場合、テーブルを使用しないCSSオンリーで作成する事の方が多いのですが、
入力項目によっては横に2つ並べたりする場合(郵便番号、姓名など)テーブルの方が便利な場合があります。

しかしCakePHPなどを使用していると、どうしてもViewファイルがhtmlとphpコードが入り混じり
可視性が低くなってしまいます。

そこで、全部cssで制御できればViewファイルの整理がかなりできるのではないのでしょうか。
それを解決してくれるのがRMSformsです。

こんなCSSを待っていました。

詳しくは以下