アーカイブ: 2008年6月

ページ送り機能(基本版)

パーマリンク 2008/06/30 16:30:42 著者: cakephp メール
カテゴリ: ヘルパー, ビュー, コンポーネント, コントローラー

【CakePHP1.1】
ページ送り機能の基本版です。

http://bakery.cakephp.org/articles/view/pagination-component
上記ソースを app/controllers/components/pagination.php に設置します。

http://bakery.cakephp.org/articles/view/pagination-helper
上記ソースを app/views/helpers/pagination.php に設置します。

http://bakery.cakephp.org/articles/view/pagination-element
上記ソースを app/views/elements/pagination.thtml に設置します。


コントローラーに下記のように書きます。

<?php 
class SamplesController extends AppController
{
    var $uses = array('Sample');
	var $components = array ('Pagination');
	var $helpers = array('Pagination');

	function index() {	
		$conds = NULL;
		list($order,$limit,$page) = $this->Pagination->init($conds);
		$data = $this->Sample->findAll($conds, NULL, $order, $limit, $page);

		$this->set('data',$data);
	}
}


ビューは下記のように書けば、ページ送りが表示されます。

<?php e($this->renderElement('pagination')); ?>


細かい内容を変更する場合は、設置したヘルパーなどを変更します。

コントローラーから別のビューを呼び出す方法

パーマリンク 2008/06/26 20:19:11 著者: cakephp メール
カテゴリ: ビュー, コントローラー

CakePHP は規則に沿ったやり方でやる分には、色々と省略して書けたりしてかなり便利です。

一方、その規則から外れたやり方をやりたい時は??となってしまうこともあります。

今回はあるコントローラーから、別のコントローラーに属するビューを呼び出す方法の紹介です。

アクション(sample)のビューを呼び出す場合

$this->render('sample');  // 無くてもOK


同じコントローラー内の別アクション(other_sample)のビューを呼び出す方法

$this->render('other_sample');



別のコントローラー(tests)のビューを呼び出す方法

$this->render('../tests/sample');

これで呼び出せます。

別のビューを呼び出して、そのコントローラーのビューが一つもない場合でも、app/views にフォルダだけはいるので要注意です。

テーブルの項目を変更した時の注意点

パーマリンク 2008/06/24 16:47:17 著者: cakephp メール
カテゴリ: モデル

テーブルの設計が途中で変更になることがあると思います。
そういったときに気をつけなければならない事があります。

CakePHP では、app/tmp/cache/models/ 以下にモデルの情報がキャッシュされますので、既存テーブルにカラム追加や変更、削除を行っても、ここのファイルが変わらない限り、昔のテーブル構成のまま動こうとします。
ですので、ここのファイル(items モデルなら default_items)を削除することを忘れないようにしましょう。

CakePHPの開発事例(日本)

パーマリンク 2008/06/23 16:26:25 著者: cakephp メール
カテゴリ: 参考サイト

CakePHP で開発されたサイト(日本)をまとめています。

ニンテンドーDSコミュニティサイト DS Family †フェイス女学園† (顔診断サービス) ホッテントリメーカー 今週のハイライト - デザイン系ソーシャルニュースサイト インデザ.jp


TrekNavi.com GPSのトラックログや手描きによって地図を作成・公開・共有または非公開地図を作成できるサイト 名言・名セリフ投稿サイト ~ナポレオンからガンダムまで~- あの人のセリフ 自主申告型タイムトライアルサイト 自転車でヒルクライムしようぜ! 幕末古写真ジェネレーター -写真を江戸〜明治期の古写真ぽくします-


薬剤師求人.com : 薬剤師・薬学生限定の求人・就職・転職サイト みんなで作る話題発見サイト トピックイット 就職案内ネット一六社 飲食店案内ネット一六社


amp アマゾンマーケットプレイス出品者一覧検索 まとめ買い 大人買い ラーメンネット一六社 タクシー乗務員募集 タクルート 県ニュース


Giraffe Windows ケータイアプリカタログ 語学学習サービス - BlueOWL 沖縄旅行は全日空・ANAで行く格安旅行のスカイツアーズ PHP Webアプリケーション開発のモード・エー(mode-A)


格言 名言集 - 言霊.in 新刊案内ネット一六社 書店案内ネット一六社 スノーボード一六社


ゆるゆるプロフ型掲示板 - ミルフィール - ポイミ! - ちょっとだけ匿名の文章投稿サイト - ミルフィール - 教室・塾案内ネット一六社 ブレイクダンスサイト「B-BOYING.NET」


エトワール バレエが好きな人のための総合サイト
【連想くん】あなたの連想をサポートするサイト エトワール バレエが好きな人のための総合サイト 赤い糸DS モバロケ


☆オーラカメラ☆(顔からわかるオーラ診断サービス) 「あとで買うかも!?」買い物情報収集サイト 日本のweb系企業まとめ Ckr!(ちぇけら!)~ マイミクとペア占い☆


東方神起のペン(ファン)交流サイト「東方神起-X-」 @大喜利 ブログに貼れる大喜利ブログパーツ オートキャンプ一六社 温泉データベース|みんなで作る全国温泉マップ
東方神起のペン(ファン)交流サイト「東方神起-X-」 @大喜利 ブログに貼れる大喜利ブログパーツ オートキャンプ一六社 温泉データベース|みんなで作る全国温泉マップ


フットサル一六社 地域特産品 ネットショッピング e-shop一六社 美容室案内ネット一六社 宿泊案内ネット一六社
フットサル一六社 地域特産品 ネットショッピング e-shop一六社 美容室案内ネット一六社 宿泊案内ネット一六社


空港案内ネット一六社 空リゾートコンシェルジュ 癒しの言葉~彼女に言ってもらいたい~ 葬儀ネット一六社
空港案内ネット一六社 リゾートコンシェルジュ 癒しの言葉~彼女に言ってもらいたい~ 葬儀ネット一六社


佐川急便株式会社 羽田空港ターミナル BIG BIRD みんなの古民家スポットコミュニティ「ふるみる」 タクシーコール一六社
佐川急便株式会社 羽田空港ターミナル BIG BIRD みんなの古民家スポットコミュニティ「ふるみる」 タクシーコール一六社


スキー一六社 トランクルーム一六社 菓写メ お手軽メール送信サービス「clipmail」
スキー一六社 トランクルーム一六社 菓写メ お手軽メール送信サービス「clipmail」


訳あり商品検索サイト「ワケありーな」 名前をつけてやる 割り勘電卓 テレビで紹介されたものをまとめた「テレビでみたよ」
訳あり商品検索サイト「ワケありーな」 名前をつけてやる 割り勘電卓 テレビで紹介されたものをまとめた「テレビでみたよ」


Twitterで簡単家計簿「つぶやけ~ぼ」 お出かけする時に寄り道しちゃおー「よりみち」 たまにはジャケ買いなんてどう?「ジャケ買い」 新作発売日情報などをメールで通知!『お知らせメール』
Twitterで簡単家計簿「つぶやけ~ぼ」 お出かけする時に寄り道しちゃおー「よりみち」 たまにはジャケ買いなんてどう?「ジャケ買い」 新作発売日情報などをメールで通知!『お知らせメール』

※他にもあるよ!という方はぜひコメントください。


【関連記事】
参考サイト
勉強会資料

入力フォームの戻るボタンの作り方

パーマリンク 2008/06/21 22:45:33 著者: cakephp メール
カテゴリ: ビュー, コントローラー

まず、ビューにこのように書きます。

<?php e($html->submit(' 前の画面に戻る ', array('name' => 'submit_back'))); ?>


続いて、コントローラーにこのように書いて、入力画面のビューを呼び出します。

// 戻るボタンクリック時
if (!empty($this->params['form']['submit_back'])) {
    $this->render(入力画面のビュー);
    return;
}

HtmlHelper::tagValue の注意点

パーマリンク 2008/06/20 14:21:19 著者: cakephp メール
カテゴリ: ヘルパー, ビュー

CakePHP1.1

モデルのデータを出力する場合に HtmlHelper::tagValue を利用しますが、

<?php e($html->tagValue('Sample/name')); ?>

とすると、エスケープ処理がされないまま出力されてしまいます。

ですので、

<?php e(h($html->tagValue('Sample/name'))); ?>

としましょう。

入力チェックのやり方

パーマリンク 2008/06/20 13:49:11 著者: cakephp メール
カテゴリ: モデル

CakePHP1.1

CakePHP には標準で、空かどうか、数値かどうかなど、幾つかのチェック方法が用意されています。
ですが、あえてそれを使わずに下記のように書きます。

<?php
class Sample extends AppModel {

    /**
     * 入力チェック
     */
    function validates($data = array())
    {
        $validate_flg = 0;
        if (empty($data)) {
            $data = $this->data;
        }

        $name = $data['Sample']['name'];

        if (empty($name) && $name != '0') {
            $this->invalidate('name');
            $validate_flg = 1;
        } elseif (*********) {
            // 色々なチェック
        }

        if ($validate_flg == 0) {
            return true;
        } else {
            return false;
        }
    }
}

このように name という項目に対してチェックする内容を一箇所に集約することで、見やすくなったと思いませんか?

CAKE_SECURITYの挙動の違い

パーマリンク 2008/06/19 14:28:38 著者: cakephp メール
カテゴリ: 設定

CakePHP1.1

app/config/core.php 内にセキュリティレベルを設定する CAKE_SECURITY という項目があります。
この項目には high / medium / low の3パターンの設定が可能です。

それぞれの違いは下記の通りです。

セッションの有効期限

  • high
    CAKE_SESSION_TIMEOUT × 10 秒
  • medium
    CAKE_SESSION_TIMEOUT × 100 秒
  • low
    CAKE_SESSION_TIMEOUT × 300 秒


セッションクッキーの生存期限

  • high
    0 秒
  • medium
    7 * 86400 秒 = 1 週間
  • low
    788940000 秒 = 25 年くらい


session.referer_checkの設定

  • high
    自ホスト名を指定
  • medium
    自ホスト名を指定
  • low
    設定なし


sessionのチェックなどに使う時間設定

  • high
    10 分
  • medium
    100 分
  • low
    300 分

ログを出力する方法

パーマリンク 2008/06/18 19:27:16 著者: cakephp メール
カテゴリ: コントローラー

ログの出力方法は

$this->log(メッセージ, LOG_DEBUG);

これだけで出来ます。

出力先は、
app/tmp/logs/debug.log
になります。

INSERTしたIDを取得する方法

パーマリンク 2008/06/17 14:28:21 著者: cakephp メール
カテゴリ: コントローラー

INSERTしたIDは、下記の方法で取得できます。

$id = $this->Model->getLastInsertID();

404エラーページをカスタマイズする方法

パーマリンク 2008/06/16 16:56:05 著者: cakephp メール
カテゴリ: ビュー

CakePHP1.1

CakePHP で存在しない URL を実行された時に表示されるページは cake/libs/view/templates/errors/error404.thtml の内容が表示されます。

このページを変更したい場合は、app/views/errors/error404.thtml にコピーして内容を変更すれば良いです。



CakePHP1.2 RC2

デフォルトでは、cake/libs/view/errors/error404.ctp の内容が表示されます。
変更したい場合は、app/views/errors/error404.ctp にコピーして内容を変更すれば良いです。

好きな時に好きなキーでアソシエーションする方法

パーマリンク 2008/06/15 18:42:59 著者: cakephp メール
カテゴリ: モデル

通常のアソシエーションのやり方だと、必要ない時に外すという処理が必要になってきます。
そのテーブル単体のデータが欲しい頻度とアソシエーションしたデータが欲しい頻度の比率にもよると思いますが、単体のデータを取得する方が多い場合は、こちらのやり方が良いのではないでしょうか。

また、通常のアソシエーションの場合、結合させるキーは決まっています。
任意のキーで結合したい場合はなかなかうまくいきません。
そんな時も今回の方法だとうまくいきます。

1.アソシエーションの準備

まずはアソシエーションの準備として、app/app_model.php に下記の内容を追加します。

<?php
class AppModel extends Model
{
    // アソシエーションの設定
    public function expects($array)
    {
        foreach ($array as $assoc) {
            $this->bindModel( 
                array($this->assocs[$assoc]['type'] => 
                    array($assoc => $this->assocs[$assoc]))
            ); 
        } 
    }
}

2.各モデルの設定

どのモデルとどの形式でアソシエーションさせるかを設定します。

<?php
class Sample extends AppModel
{
    // アソシエーション設定
    public $assocs = array(
        // 商品マスタ
        'Item' => array(
            'type' => 'hasAndBelongsToMany',
            'className' => 'Item',
            'joinTable' => 'samples_items',
            'foreignKey' => 'sample_id',
            'associationForeignKey' => 'item_id',
        ),
    );

type の部分に他のアソシエーションの形式(hasOne など)も設定できます。

3.コントローラーから呼び出す

そのままアソシエーションさせる場合は、下記のようにすることで呼び出すことが出来ます。

$this->Sample->expects(array('Item'));
$data = $this->Sample->findAll();


キーを変更する場合

$this->Sample->primaryKey = 'item_id'; // キーの変更

$this->Sample->expects(array('Item'));
$data = $this->Sample->findAll();

$this->Sample->primaryKey = 'id'; // キーを元に戻す


Item テーブルに対して条件を指定したい場合

$this->Sample->assocs['Item']['conditions'] = array('name' => 'hoge');
$this->Sample->expects(array('Item'));
$data = $this->Sample->findAll();

統一で使える条件はモデルに直接記載し、可変の条件はコントローラで指定すれば良いですね。

参考:使用するアソシエーションをコントローラで決める[CakePHP]

PostgreSQLの持続的接続を解除する方法

パーマリンク 2008/06/14 11:36:16 著者: cakephp メール
カテゴリ: データベース, PostgreSQL

CakePHP で PostgreSQL を利用する場合、デフォルトのままだと持続的接続(pg_pconnect)になっています。
持続的接続を解除したい時は、明示的に指定しなければなりません。

CakePHP1.1

var $default = array('driver'   => 'postgres',
                     'connect'  => 'pg_connect',
                     'host'     => 'localhost',
                     'login'    => 'user',
                     'password' => 'password',
                     'database' => 'project_name',
                     'prefix'   => '');

'connect' の設定を 'pg_pconnect' とすると、持続的接続になります。


CakePHP1.2

var $default = array('driver'      => 'postgres',
                     'persistent'  => false,
                     'host'        => 'localhost',
                     'login'       => 'user',
                     'password'    => 'password!',
                     'database'    => 'project_name',
                     'prefix'      => '');

'persistent' の設定を true とすると、持続的接続になります。

CakePHPをさらにDRYにする

パーマリンク 2008/06/13 14:03:31 著者: cakephp メール
カテゴリ: コーディング, DRY

CakePHPをさらにDRYにするCakePHPをさらにDRYにする、ドライケーキレシピ akiyan.com 秋田真宏

DRY = Don't Repeat Yourself(繰り返し書くな)

どのあたりまでやるかは問題ですが、基本的には DRY にしていくべきだと思います。

短縮形を使おう

パーマリンク 2008/06/12 15:49:56 著者: cakephp メール
カテゴリ: コーディング

CakePHP では標準で、色々な関数の短縮形が用意されています。
開発スピードとソースコードの見やすさを向上してくれます。

短縮形 基本形
a() array()
am() array_merge()
e() echo()
low() strtolower()
up() strtoupper()
r() str_replace()
h() htmlspecialchars()
pr() print_r()

※pr() は DEBUG が 1 以上でないと機能しません。

CakePHPで使われるパス

パーマリンク 2008/06/11 14:27:06 著者: cakephp メール
カテゴリ: コーディング

CakePHPで logs や cache など頻繁に利用するフォルダのパスは cake/config/paths.php に予め設定されています。

app/tmp/logs/ = LOGS
app/tmp/cache/ = CACHE

これを使うことで、ソースコードの見やすさが変わってきますので、ぜひ使うようにしましょう。

コンポーネントでモデルを使う方法

パーマリンク 2008/06/09 22:00:06 著者: cakephp メール
カテゴリ: モデル, コンポーネント

loadModelを使うことでモデルを呼び出すことができます。

<?php
loadModel('Model1');
loadModel('Model2');

class SamplesComponent extends Object
{
    function hoge() {
        $dbo_model1 = new model1();
        $dbo_model2 = new model2();

        $data1 = $dbo_model1->find();
        $data2 = $dbo_model2->find();
    }
}

モデルを複数呼び出す時は上記のようにloadModelを2つ並べて書きます。


find などの処理は上記の方法でも可能ですが、Model に書いたバリデーションを絡めた動きにしたい時は上記の方法ではうまくいきません。
その場合は、下記の方法で Model を呼び出します。

<?php
class SamplesComponent extends Object
{
    function startup(&$controller){
        $this->controller = $controller;
    }

    function hoge($data) {
        $this->controller->Model1->validates($data);
    }
}

afterRenderメソッドの注意点

パーマリンク 2008/06/08 14:23:50 著者: cakephp メール
カテゴリ: ビュー

afterRenderメソッドを使うと、ビューの表示を後から変更することができます。
ただし、レイアウトファイルの変更はできません。

最初に準備しておきたい項目

パーマリンク 2008/06/07 09:18:22 著者: cakephp メール
カテゴリ: 設定

CakePHPをインストールした後、開発する前にやっておきたい内容をまとめておきます。
(少しずつ加えていきます)

1.URLの最後にスラッシュを必ずつける

もちろん付けない設定も可能で、どちらかに統一させる方が良いと思います。

app/app_controller.php
    function beforeFilter()
    {
        // URLの最後に/を入れる
        if (isset($this->params['url']['url'])) {
            $uri = $this->params['url']['url'];

            if (substr($uri, -1) != '/') {
                $this->redirect($uri . '/', 301);
                exit;
            }
        }
    }

参考:CakePHPでURIの形式を統一する


2.radioボタンの各要素部分をクリックした時にも対象の項目を選択状態にする

app/config/tags.ini.php を作成し、そのファイルに下記の内容を記載します。

    radio = "<input type="radio" name="data[%s][%s]" id="%s" %s /><label for="%s">%s</label>"


そして、cake/libs/view/helpers/html.php を app/views/helpers/html.php にコピーします。
そのファイル内の下記の部分を修正します。

    //修正前
    $out[] = sprintf($this->tags['radio'], $this->model, $this->field, $individualTagName, $parsedOptions, $optTitle);
    ↓
    //修正後
    $out[] = sprintf($this->tags['radio'], $this->model, $this->field, $individualTagName, $parsedOptions, $individualTagName, $optTitle);



3.エラーログを指定したファイルに書き込むようにする

公開する前であれば、デバック情報を画面上に表示させていても問題ありませんが、公開後はそうはいきません。
ですので、予め指定したファイルにログが書き込まれるように設定しておきましょう。

webroot/index.php
    require CORE_PATH . 'cake' . DS . 'bootstrap.php';
    // 以下、追加
    error_reporting(E_ALL);
    ini_set('display_errors', 0);
    ini_set('log_errors', 1);
    ini_set('error_log', LOGS . 'error.log');

書き込みを行いたくない時は、log_errors を 0 にすれば書き込みされません。


4.実行された SQL をログに書き込む設定

CakePHP では SQL 文を直接書く機会が少なく、find などの関数を使って処理を行うことがほとんどです。
大変便利なのですが、実際にどのような SQL 文が実行されているかが分かりにくいです。
エラーログと同様に、予めファイルに書き込まれるように組み込んでおけば、公開後の対応が楽になります。

cake/libs/model/dbo/dbo_postgres_log.php を作成します。

<?php
uses ('model' . DS . 'dbo' . DS . 'dbo_postgres');  // 1.1の場合
//uses ('model' . DS . 'datasources' . DS . 'dbo' . DS . 'dbo_postgres');  // 1.2 RC2 の場合
class DboPostgresLog extends DboPostgres {
    var $queryNo = 1;

    function execute($sql) {
    $ret = parent::execute($sql);
        if (defined('LOG_SQL') && LOG_SQL) {
            $this->log(sprintf("%d. %s", $this->queryNo, $sql), LOG_DEBUG);
            $this->queryNo++;
        }
        return $ret;
    }
}


次に、データベース接続設定ファイルで上記のファイルを読み込むように設定します。

app/config/database.php
class DATABASE_CONFIG {
  var $default = array('driver' => 'postgres_log',
                       'host' => '**********',
                       'login' => '**********',
                       'password' => '**********',
                       'database' => '**********',
                       'prefix' => '');
}


最後に、ログへの出力を行うかどうかの設定をします。

app/config/core.php
define('LOG_SQL', true);

参考:CakePHP SQLをログに記録

勉強会資料

パーマリンク 2008/06/05 23:02:36 著者: cakephp メール
カテゴリ: 参考サイト
CakePHPをさらにDRYにする、ドライケーキレシピ / akiyan.com 秋田真宏 CakePHP Lightening Talk / 100SHIKI Webmaster @nifty トピックイット CakePHP勉強会資料 / nifty 寺元和彦 CakePHPで開発する時に統一しておきたいコーディング内容 / あつ


CakePHPのコンポーネントの使い方(080316) / あつ Cake Php キャッシュのやり方 / あつ Cake Php ページ送り機能 / あつ Cake Php パン屋へ行こう / あつ


addons.mozilla.org CakePHPによるハイパフォーマンスの実現 / 安藤祐介 Cake PhpでやってみようOpenID入門 / あつ CakePHP Email Component 調査報告書 / suzuki CakePHP + Oracle / s-yo-ko


CakePHP1.1 to 1.2 最新バージョンへの移行の紹介 / 安藤祐介 CakePHP 2007年大躍進のフレームワーク / 安藤祐介 CakePHPのHelperを使う Helperの使用方法とかんたんAJAX / 安藤祐介 CakePHPのModelを使う データベース関連処理をシンプルに解決 / 安藤祐介


CakePHPを使う 実装を通じて内部を見る / 安藤祐介 続・CakePHP入門 最近の状況と応用機能について / 安藤祐介 CakePHP入門 PHPでRailsライクな高速開発 / 安藤祐介 【動画】~フェイス女学園~ CakePHP を使った効率的なPC・モバイルサイト構築について / スパイスボックスラボラトリ 神部


【動画】CakePHPでの失敗談 / ブルーオーシャン 岡田佳典 【動画】CakePHPでホッテントリメーカーとか作ってみた / pha 【動画】CakePHPゆとり開発環境 / k1LoW 【動画】OpenIDをAuthComponentにトッピング / 高木(ねねとまつの小部屋)


【動画】CakeにTestがやってきた / 岸田健一郎 【動画】何が違う? CakePHP and symfony / 安藤祐介 何が違う? CakePHP and symfony / 安藤祐介 OpenIDをAuthComponentにトッピング / 高木(ねねとまつの小部屋)


CakePHPでの失敗談 / ブルーオーシャン 岡田佳典 CakePHP で Ajax 入門編 / MICK Cake Phpでの安全なサイトの作り方1(Sqlインジェクション) / あつ CakePHPゆとり開発環境 / k1LoW


CakeにTestがやってきた / 岸田健一郎 CakePHPハンズオン@Tokyo
夏ケイクをはじめよう(仮) / 安藤祐介
何が違う?CakePHP and symfony
違いのわかるbakerになる為の7つのTIP / 安藤祐介
「Tplcutter」を用いた超高速ウェブサイト開発(使い方編) / 滝下真玄(MASA-P)


管理画面のレイアウトの設定方法

パーマリンク 2008/06/05 14:30:19 著者: cakephp メール
カテゴリ: ビュー

CakePHP1.1

ユーザー画面と管理画面のレイアウトを変えたい時には、app_controller.phpで設定しておくと便利です。

app/app_controller.php

    function beforeFilter()
    {
        // 管理画面用のコントローラが呼び出された時のみレイアウト変更
        if ($this->name == "Kanris") {
            $this->layout = 'kanri';
        }
    }

スタート手順

パーマリンク 2008/06/04 12:04:25 著者: cakephp メール
カテゴリ: 設定

CakePHPのインストールから開発前までの手順は下記の通りです。

CakePHP1.1

1.ダウンロード

CakePHPから最新版をダウンロードします。

2.ファイルの設置

ダウンロードしたファイルを解凍します。
できたファイル群内のapp/webroot/配下のファイルをDocumentRoot直下に設置します。
次に、解凍してできたフォルダ配下のファイル全て(app/webroot/以外)を
DocumentRootと同階層以上にcakephpフォルダを作成し、そこに設置します。

3.パスの設定

DocumentRoot直下のindex.phpの最上部にROOTとAPP_DIRのパスを追加します。

    if (!defined('ROOT')) {
        // CakePHPのソース一式を設置したフォルダ
        define('ROOT', '/home/sample/cakephp');
    }
    if (!defined('APP_DIR')) {
        define('APP_DIR', 'app');
    }

4.テンポラリファイルを格納するフォルダのパーミッションの変更

app/tmp/以下全てのパーミッションを777に変更します。

5.トップページ(仮)を設置

cake/libs/view/templates/pages/home.thtmlをコピーして
app/views/pages/home.thtmlに設置します。

以上で準備は完了です。

6.トップページ以外のURLが見れない時は

app/webroot配下のファイルを設置したのが、DocumentRoot直下でない場合、トップページ以外のページを見ようとしても404エラーが返ってきたりします。
そのような時は、app/webroot配下のファイルを設置した場所にある.htaccessファイルに下記の部分を追加します。

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]
    RewriteBase    /sample/hoge                   // DocumentRootからのパスを追加する
</IfModule>



CakePHP1.2 RC2

基本の流れは上記と同じですので、違う部分のみ。

1.Security.saltを書き換える

app/config/core.php 内の Security.salt の値を適当に変更します。

findで条件の範囲指定をする方法

パーマリンク 2008/06/03 18:33:37 著者: cakephp メール
カテゴリ: モデル

例えば、体重が80Kg以上かつ100Kg以下の人を抽出したい時のfindAllの書き方は下記の通りです。

$conditions = array('del_flg' => '0', 'AND' => array(array('weight' => '>= 80'), array('weight' => '<= 100')));
$members = $this->Member->findAll($conditions);

「del_flg」はおまけです。

日付のセレクトボックスの作り方

パーマリンク 2008/06/02 15:23:34 著者: cakephp メール
カテゴリ: ヘルパー

CakePHP1.2 RC3

1.2 では Form ヘルパーの dateTime を利用すると簡単にセレクトボックスを作成することができます。

<?php e($form->datetime('date', 'YMD', 'NONE', '2008-10-10', array('minYear' => 2008, 'maxYear' => date('Y'), 'monthNames' => false), false)); ?>


CakePHP1.1

日付のセレクトボックスを作るには、hlmlヘルパーのdateTimeOptionTagを使えばできます。

APIドキュメント

HtmlHelper::dateTimeOptionTag (	$tagName,
		$dateFormat = 'DMY',
		$timeFormat = '12',
		$selected = null,
		$selectAttr = null,
		$optionAttr = null,
		$showEmpty = true	 
	)

Returns a set of SELECT elements for a full datetime setup: day, month and year, and then time.

Parameters:
    	string 	$tagName Prefix name for the SELECT element
    	string 	$dateFormat DMY, MDY, YMD or NONE.
    	string 	$timeFormat 12, 24, NONE
    	string 	$selected Option which is selected.
    	array 	$optionAttr Attribute array for the option elements.

Returns:
    string The HTML formatted OPTION element public 

Definition at line 688 of file html.php.

References $elements, and $pos.


使い方はViewに下記の通りに書けば表示されます。

<?php echo $html->dateTimeOptionTag('Sample/name', 'YMD', '24'); ?>

細かい設定は上記のドキュメントの通りです。


この状態だと、「2008-May-1」のように月の部分が英語で表示されるのでhtmlヘルパー内の下記の部分を変更して、日本語(数字)にします。

app/views/helpers/html.php

	function monthOptionTag($tagName, $value = null, $selected = null, $selectAttr = null, $optionAttr = null, $showEmpty = true) {
		:
		// 変更前
//		$months = array('01' => 'January', '02' => 'February', '03' => 'March', '04' => 'April', '05' => 'May', '06' => 'June', '07' => 'July', '08' => 'August', '09' => 'September', '10' => 'October', '11' => 'November', '12' => 'December');
		// 変更後
		$months = array('01' => '1', '02' => '2', '03' => '3', '04' => '4', '05' => '5', '06' => '6', '07' => '7', '08' => '8', '09' => '9', '10' => '10', '11' => '11', '12' => '12');
		:
	}


「-」も日本語に変更したい場合は、同ファイルの下記の部分を変更します。
app/views/helpers/html.php

	function dateTimeOptionTag($tagName, $dateFormat = 'DMY', $timeFormat = '12', $selected = null, $selectAttr = null, $optionAttr = null, $showEmpty = true) {
		:
			case 'YMD':
				// 変更前
/*
				$opt = $this->yearOptionTag($tagName, null, null, null, $year, $selectYearAttr, $optionAttr, $showEmpty) . '-' .
				$this->monthOptionTag($tagName, null, $month, $selectMonthAttr, $optionAttr, $showEmpty) . '-' .
				$this->dayOptionTag($tagName, null, $day, $selectDayAttr, $optionAttr, $showEmpty);
*/
				// 変更後
		                $opt = $this->yearOptionTag($tagName, null, null, null, $year, $selectYearAttr, $optionAttr, $showEmpty) . '年' .
                		$this->monthOptionTag($tagName, null, $month, $selectMonthAttr, $optionAttr, $showEmpty) . '月' .
		                $this->dayOptionTag($tagName, null, $day, $selectDayAttr, $optionAttr, $showEmpty).'日';
		:
	}

参考サイト

パーマリンク 2008/06/01 15:17:17 著者: cakephp メール
カテゴリ: 参考サイト
2008年6月
 << < 現在> >>
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30          

CakePHPに関する情報をまとめていきます。

開発スピードがアップできればうれしいです。

>>連絡はこちらへどうぞ



CakePHP最新版
CakePHP 1.2.3.8166


CakePHPの書籍

CakePHPによる実践Webアプリケーション開発

CakePHP1.2で作成する人にオススメ。
とても参考になります。

まるごとPHP!(vol.2)

安藤さんの解説が載っています。
AmazonのPagination部分は参考になります。

CakePHPによるWebアプリケーション開発

まだ読んだことありません

CakePHPポケットリファレンス
CakePHPポケットリファレンス
CakePHP1.2 でやるなら、これがあると何かと便利♪

CakePHP徹底入門
CakePHP徹底入門
CakePHP1.2 を今から始めるならここから

Fast CakePHP
Fast CakePHP
シンプルでわかりやすい CakePHP の入門書

CakePHPガイドブック
CakePHPガイドブック
CakePHP1.1 ではとても参考にした CakePHP 最初の入門書

検索

XMLフィード

16ブログ     open source blog