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

Permalink2008/06/30 16:30:42
カテゴリ: ヘルパー, ビュー, コンポーネント, コントローラー

【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')); ?>


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


関連記事


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

    Permalink2008/06/26 20:19:11
    カテゴリ: ビュー, コントローラー

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

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

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

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

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


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

    $this->render('other_sample');
    



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

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

    これで呼び出せます。

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


    関連記事


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

      Permalink2008/06/24 16:47:17
      カテゴリ: モデル

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

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


      関連記事


        CakePHPの開発事例(日本)

        Permalink2008/06/23 16:26:25
        カテゴリ: 参考サイト

        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で簡単家計簿「つぶやけ~ぼ」 お出かけする時に寄り道しちゃおー「よりみち」 たまにはジャケ買いなんてどう?「ジャケ買い」

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


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


        関連記事


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

          Permalink2008/06/21 22:45:33
          カテゴリ: ビュー, コントローラー

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

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


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

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

          関連記事


            HtmlHelper::tagValue の注意点

            Permalink2008/06/20 14:21:19
            カテゴリ: ヘルパー, ビュー

            CakePHP1.1

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

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

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

            ですので、

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

            としましょう。


            関連記事


              入力チェックのやり方

              Permalink2008/06/20 13:49:11
              カテゴリ: モデル

              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の挙動の違い

                Permalink2008/06/19 14:28:38
                カテゴリ: 設定

                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 分



                関連記事


                  ログを出力する方法

                  Permalink2008/06/18 19:27:16
                  カテゴリ: コントローラー

                  ログの出力方法は

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

                  これだけで出来ます。

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


                  関連記事


                    INSERTしたIDを取得する方法

                    Permalink2008/06/17 14:28:21
                    カテゴリ: コントローラー

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

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

                    関連記事


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

                      Permalink2008/06/16 16:56:05
                      カテゴリ: ビュー

                      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 にコピーして内容を変更すれば良いです。




                      関連記事


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

                        Permalink2008/06/15 18:42:59
                        カテゴリ: モデル

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

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

                        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の持続的接続を解除する方法

                          Permalink2008/06/14 11:36:16
                          カテゴリ: データベース, 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にする

                            Permalink2008/06/13 14:03:31
                            カテゴリ: コーディング, DRY

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

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

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


                            関連記事


                              短縮形を使おう

                              Permalink2008/06/12 15:49:56
                              カテゴリ: コーディング

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

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

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


                              関連記事


                                CakePHPで使われるパス

                                Permalink2008/06/11 14:27:06
                                カテゴリ: コーディング

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

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

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


                                関連記事


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

                                  Permalink2008/06/09 22:00:06
                                  カテゴリ: モデル, コンポーネント

                                  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メソッドの注意点

                                    Permalink2008/06/08 14:23:50
                                    カテゴリ: ビュー

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


                                    関連記事


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

                                      Permalink2008/06/07 09:18:22
                                      カテゴリ: 設定

                                      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をログに記録


                                      関連記事


                                        勉強会資料

                                        Permalink2008/06/05 23:02:36
                                        カテゴリ: 参考サイト
                                        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)




                                        関連記事


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

                                          Permalink2008/06/05 14:30:19
                                          カテゴリ: ビュー

                                          CakePHP1.1

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

                                          app/app_controller.php

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

                                          関連記事


                                            スタート手順

                                            Permalink2008/06/04 12:04:25
                                            カテゴリ: 設定

                                            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で条件の範囲指定をする方法

                                              Permalink2008/06/03 18:33:37
                                              カテゴリ: モデル

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

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

                                              「del_flg」はおまけです。


                                              関連記事


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

                                                Permalink2008/06/02 15:23:34
                                                カテゴリ: ヘルパー

                                                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).'日';
                                                		:
                                                	}
                                                

                                                関連記事


                                                  参考サイト

                                                  Permalink2008/06/01 15:17:17
                                                  カテゴリ: 参考サイト

                                                  プロフィール
                                                  岐阜県中津川市加子母在住のあつ@株式会社一六社(いちろくしゃ)スタッフ

                                                  あつへのメッセージはSkypeを使ってテキストメッセージでどうぞ
                                                  あつ

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

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

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

                                                  CakePHPを中心とした勉強会を無料で開催していますので、これからCakePHPを始めるという方でもぜひお越しください。
                                                  >>詳しくはこちらへ(高蔵寺SE勉強会)


                                                  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 最初の入門書

                                                  アーカイブ

                                                   RSS2.0

                                                  powered by
                                                  b2evolution
                                                  ブログ一六社

                                                  Geo Visitors Map