2009年1月6日火曜日

全文検索

Sphinx Behavior - he Bakery, Everything CakePHP
オープンソースのテキスト検索エンジンSphinxを使うビヘイビア。
Sphinxについて
PHP でカスタム検索エンジンを作成する - IBM's resource for developers and IT professionals in Japan
cakePHP キーワード検索 - 空間情報科学研究室 卒研wiki

2009年1月5日月曜日

WHERE条件文の書き方

CakePHPで検索機能 - WEBで地域活性化

存在しないコントローラ・アクション・ビューへのアクセス

CakePHPでデバッグを有効にしていると、存在しないURLにアクセスした場合にエラーメッセージが表示される。
公開時にはデバッグを無効にする。

/* app/config/core.php /*
  define('DEBUG', 2);  // 変更前
  define('DEBUG', 0);  // 変更後

また、このエラーページは「cake/libs/view/errors/error404.ctp」に存在するのでカスタマイズする場合は「app/views/errors/error404.ctp」を作成して行う。

参考

CakePHP 公開する時はデバッグ情報を出さない - Shin x blog
PageControllerへのルーティング回避。
CakePHP1.2のエラーページは仕様が変わってる - blog.katsuma.tv
その他のエラーページカスタマイズ。

2008年12月30日火曜日

DBの切り替え - database.php

テスト用・公開用などでDBの切り替えしたり、複数のDBを使い分ける場合。
「app/config/database.php」に好きなだけ定義。

/* database.php */
<?php
class DATABASE_CONFIG
{
    var $default = array
    (
        'driver' => 'mysql'
        , 'persistent' => false
        , 'host' => 'localhost'
        , 'login' => 'db_user'
        , 'password' => 'db_pass'
        , 'database' => 'db_name'
        , 'prefix' => ''
    );
    var $test = array
    (
        'driver' => 'sqlite'
        , 'persistent' => false
        , 'host' => ''
        , 'login' => ''
        , 'password' => ''
        , 'database' => 'test.db'
        , 'prefix' => ''
    );
}

もちろん「database」だけ別とかも大丈夫。
モデルの頭に記述。

/* モデル */
class Test extends AppModel
{
   $useDbConfig = "default";
   // 又は
   $useDbConfig = "test";

CakePHPは複数プロジェクトや巨大なアプリケーションには向かないだろうが、試用などには必要だろう。

関連

2008年12月29日月曜日

CakePHPをベースにしたフォトブログ - CheeseCake

CakePHP製のPhotoblogシステム:CheeseCakeをXREAサーバにインストールしてみた。

CheeseCake

概要
CheeseCake Photoblog - MOONGIFT
プロジェクトページ
Cheesecake Photoblog - CakeForge
デモ
Demo
ダウンロード
cheesecake + cakephp - 2.0 Beta 1(更新:2008-07-29 07:34)
ページ下のほう。

今回はCheesecake + CakePHPまとめてインストール。CheesecakeのみのファイルはCakePHPの「app/」ディレクトリが入ってる。2つの構成は違うように思う。

インストール
  1. 解凍したファイルをアップロード。
    (ディレクトリ名を「cheesecake2」から「cheesecake」に変更)
  2. 「http://www.example.com/cheesecake/admin/install/」にアクセスしてインストール&セットアップ。
    XREAだとエラーが出るので、PHPをCGIモードにする「.htaccess」をWebルートに配置。
    .htaccess
    AddHandler application/x-httpd-phpcgi .php
  3. データベースの設定をする。(今回はMySQL)
  4. ユーザの設定をする。ログインのIDとパス、「Name」はサイト名。
  5. インストール完了。各自サーバ環境を確認してディレクトリ等の権限をセーフティーに。
    下に表示されてるのはCakePHPによるDebug。
サイト。

CakePHPのデバッグでクエリ結果が表示されてるので「app/config/core.php」のデバッグ設定を変更する。

app/config/core.php
Configure::write('debug', 0);
>ログイン画面。

日本語には対応してない様子。

2008年12月13日土曜日

ページャー/ページ送り - PEAR::Pager,Pagination,(1.2)Paginator

大量のデータを扱うサイトの場合、ページャーの実装は必要であり、それは実に面倒なことだ。
普通のPHPサイトではPEAR::Pagerが有名でよく使われるところだろう。

PEAR::Pager

マニュアル
Pager - PEAR

CakePHPでの扱いは以下。

ページネーション - CakePHP Users in Japan
Pagerの実装 - Wheel Of Fortune
-コンポーネント。ファイル一覧をデータとして扱う

PEARが使えない環境の場合、CakePHPのPaginationコンポーネントを使う。1.1系。

Pagination

セットアップ

bakeryの以下リンクからコンポーネント、ヘルパー、エレメントをコピーして各ディレクトリに作成。

Pagination Component→「/app/controllers/components/pagination.php」
Pagination Helper→「/app/views/helpers/pagination.php」
Pagination Element→「/app/views/elements/pagination.thtm」

データベース等設定が必要。
1.2系ではページャーが用意してある。これは更に容易に機能を提供してくれる。

Paginate(1.2系)

使い方

コントローラでfind()関数の代わりにpaginate()関数を使う。

/* コントローラ */

function index() {
  $this->paginate['limit'] = 5;
  $this->set('items', $this->paginate());
}

ページ送りレイアウト「elements/paginator.ctp」を作成。

/* 「elements/paginator.ctp」 */

 <div id='pagination'>
 <?php echo $paginator->prev('<< '.__('previous', true), array(),null,array('class'=>'disabled', 'tag' => 'span')); ?>
 | 
<?php echo $paginator->numbers(). ' | '. $paginator->next(__('next', true).' >>', array(), null, array('tag' => 'span', 'class' => 'disabled')); ?> </div>

ビューで任意の位置で呼び出す。

/* ビュー */

<?php echo $this->renderElement('paginator'); ?>

Pagenateは本当に便利で楽。ページ送り部分のデザインもエレメントとして分離できるし、使いまわせる。

追記:2008/12/24
SQLite3を使う - PHP on the Cake !(2008年10月10日)

残念なことにSQLite3を使うための「dbo_source.php」をアップしているとエラーが出てしまう。このファイルが以前のバージョンを基に作られているためだろうか、calculate()関数が見つからないエラーが表示される。
デフォルトの「dbo_source.php」からコピーしてアップした「dbo_source.php」に追記すれば表示することは出来る。不具合は不明。以下のようなソース。

/* 「/cake/cake/libs/model/datasources/dbo_source.php」 */
~略~

function calculate(&$model, $func, $params = array()) {
  $params = (array)$params;
  switch (strtolower($func)) {
    case 'count':  if (!isset($params[0])) {  $params[0] = '*';  }
                        if (!isset($params[1])) {  $params[1] = 'count';  }
                        return 'COUNT(' . $this->name($params[0]) . ') AS ' . $this->name($params[1]);
    case 'max':
    case 'min' :  if (!isset($params[1])) {  $params[1] = $params[0];  }
                      return strtoupper($func) . '(' . $this->name($params[0]) . ') AS ' . $this->name($params[1]); 
                      break;
  }
}

~略~

2008年11月25日火曜日

CakePHPを基にしたCMS

有名そうなプロジェクトと開発止まってない、情報も見つかったものをピックアップしてまとめ。
インストールしてみんとす。
個人的に拡張性が高すぎる規模大きいCMSには惹かれないので多分やらない。開発側としては楽しいだろうし有意義だろうけど、使う側として何していいか解んなくなっちゃうしね。ただのお試しには特に。

Wildflower

CakePHP製のCMS。

公式サイト
Wildflower
解説
CakePHPを使ってCMS「Wildflower」 - MOONGIFT
デザインされたデフォルトの管理画面、カスタマイズを前提に作られている(解説有り)、CakePHPなので習得が楽。
CakePHP で作成された CMS - Sun Limited Mt.
app 以下にはコントローラもモデルもビューも置いていないこと。CMS で使う MVC は app ディレクトリと同じ階層にある wildflower というディレクトリに app ディレクトリと同じ構成で入っています。これはカスタマイズするときに、app 以下にカスタマイズした MVC を入れて、wildflower の元々のファイルを修正しなくてもいいように出来ているようです。

CheeseCake

CakePHP製のPhotoblogシステム。

概要
CheeseCake Photoblog - MOONGIFT
プロジェクトページ
Cheesecake Photoblog - CakeForge
デモ
Demo

Pocky

インストールいらず、ディレクトリ設置だけでCakePHP開発環境。

Pocky: CakePHP on a Stick - CakeForge
解説
Pocky - MOONGIFT
いい物見つけた - Glorious Life
MySQLのインストールも簡単らしい。

まんじゅうCMS

CloverStudioが開発しているCakePHPで作られたCMS。もちろん日本の人。開発も止まってない。
共有とカスタマイズを方針として開発。
現在公開のモジュール・プラグインはブログ、掲示板、フォーム、外部RSS読み込み。

公式サイト
まんじゅうCMS
デモ
デモ・リンク
ブログなどデモ集。

関連

リンク集。リンク切れや情報がないのが多い。

php sweets - CakePHP のおいしい食べ方
CakePHPで作られたショッピングサイト - BakeSale他 - PHP on the Cake!(2008年11月18日記事)