Webプログラミングに関するメモスマートフォン専用ページを表示Webプログラミングに関するメモ主にWeb関連のプログラミングに関するメモを記録しています。次の10件>>2007年08月05日ヘルパーメソッドJavascript->object()でJSON形式を出力できる!!(CakePHP)ソースを徘徊しているとたまたま発見。ドキュメントにはまだ掲載されていない。これで、PEAR::Services_JSONもphp-jsonも使用せずフレームワークのみで完結できる。JSONからPHPオブジェクトに変換する方法は提供されていないみたいだ。これまで、PEAR::Services_JSONのencode()で行っていた処理を、Javascript->object()で動作確認してみたがとりあえず問題ないみたいだ。問題は、objectという名前が直感的にわかりずらいことだ。|2007年07月10日CakePHPでレイアウトファイル以外のビューファイルからページのタイトルにアクセスするにはページのタイトルは、$title_for_layoutに格納されている。この変数はレイアウトファイルからしかアクセスできない。その他のファイルからアクセスする場合$page_titleという変数にアクセスするとコントローラの$this->pageTitleで設定したタイトルにアクセスできるみたいだ。|2007年07月09日CakePHP:app/views/elements/配下をフォルダ分けする方法ビューファイルのブロック描画の際、$this->renderElement()を多用するとapp/views/elements配下にファイルが多数作成され見にくくなる。usersコントローラとある程度機能ごとに整理したくなる。上記のようなファイル構成でrenderElementを呼び出すことが出来るか調べてみたところ意外に簡単に出来ることがわかった。$this->renderElement('フォルダ名/エレメント');とすればOKみたいだ。app/views/elements/posts/element1.thtmlを描画したい場合$this->renderElement('posts/element1');とすれば問題なく動作する。|2007年07月08日モデルのcondition配列の展開(CakePHP)久々に更新!!最近、CakePHPを色々な案件で使用しているのだが、メモしておかないと次探すのが面倒なので書く。CakePHPでは、findAllメソッドなどの$conditionsに配列を渡せばwhere句を構築してくれる。2))としてくれるので、自分でandでつないで次、orでつないでと文字列として作成するよりプログラムが組みやすい。$model->queryでも$conditionsを配列として構築しておき、sqlを発行する直前にwhere句を構築したい。(自前で作成してもよいのだが、修正を重ねるとwhere句の直後にandがきたりしてDBに怒られるのがうっとおしいので・・・)CakePHPのソースを追っているとどうやら、DboSourceクラスのconditionsメソッドを呼び出せばよいというのがわかった。$db->conditions($conditions);と書くことでうまくいった。DataSourceを取得するのが面倒なので、AppModelあたりに共通化しておこう。|2007年04月23日CakePHP:コントローラ内でヘルパークラスを使ってみるCakePHPでヘルパーというのは、マニュアルではhttp://www.cakephp.jp/doc/helpers.htmlヘルパーは、データの整形や表示などの、ビューで一般に必要とされる関数を便利な仕方で提供する方法です。定義されており一般にビューで使用されるものだ。CakePHPの標準で提供されているヘルパークラスの中には、TimeHelperクラスのdaysAsSqlメソッドなどSQLのwhere句を作成するのを助けてくれるような、コントローラクラスでぜひとも使用したい便利なメソッドも定義されている。'field');として実行してみた。$Time変数が定義されてないというエラーで失敗。原因を調査してみると、ビューで使用する$Htmlや$Timeは、実はViewクラス(cake/libs/view/view.php)の_render(プロテクト)メソッドのローカル変数だからということが分かった。(コントローラのset関数でビューに渡される関数もこの_render関数内でextractされている。)そして、この_renderメソッドを覗いて見ると$this->_loadHelpersメソッドをコールしており、どうやらこの_loadHelpers内でヘルパークラスが作成されているというのがわかった。_loadHelpersメソッドではコントローラの$helpersフィールドに定義されたヘルパークラスたちがnewされ、'base'や'webroot'などのコントローラクラスのフィールドをヘルパークラスのフィールドにコピーしている。TimeHelper();としてみた。TimeHelperクラスが見つからないとエラー。TimeHelperクラスのファイルが読み込まれてないみたいだ。_loadHelpersメソッド内を調べてみるとloadHelper関数(グローバル)を使用し必要なヘルパークラスのファイルを読み込ませているのがわかった。23:59:59')と期待した結果が得られ、コントローラ内でへルパークラスを使用することに成功した。これで今までコントローラ内にコピペしていたのがスッキリする・・・ちなみに、loadHelper関数だが、cake/basics.phpで定義されている。このファイルには他にもe()やh()などecho()やhtmlspecialchars()などのショートカット関数も定義されているみたいだ。|2007年04月16日CakePHPでレンタルサーバでのサイト構築例(2)Windows環境(xampp)で開発していると書き込み権限を設定する必要がないが、xreaなどのレンタルサーバはlinuxなどのunix系OSなので書き込み権限を設定することが必要だ。CakePHPの場合、app/tmpフォルダにあるフォルダのいくつかに書き込み権限を与えなければならなかった。具体的には下記の2つに書き込み権限を与えている。/tmp/cache/models//tmp/logs//tmp/chache/modelsだがこれは、データベースのテーブルのカラム情報などのテーブル情報をキャッシュしている。CakePHPが実行したSQLを表示するには?などの方法でSQLを実行するとDESC命令でカラム情報を取得する場合と取得しない場合がある。コントローラに変更がない場合、キャッシュから取得するために必要なのだろう。/tmp/logs/だがこれは$this->log()でログを収集する場合に必要だ。自分の環境ではPHPのエラー情報もこのフォルダに居候させている。'120');がありこれを変更すればタイムアウト時間を変更できる。注意しなければならないのは、デフォルト値は120となっているがこれは120秒という意味ではない。CAKE_SESSION_TIMEOUTから導き出される。'high');と設定されており120*10=1200秒ということになるのだ。300書かれており、highの場合10、mediumの場合100、lowの場合300をCAKE_SESSION_TIMEOUTに掛け合わせますよと書かれているのだが見落としてしまいがちだ・・・120秒でリロードしてもまだ値が残っている。セッションタイムアウトまでの秒数。掛け算したものになります。書かれているが結構紛らわしいので要注意!!自分の場合、ブラウザのキャッシュやらPHPの設定やらあれやこれや疑って時間を浪費してしまいました。|2007年04月11日CakePHPでレンタルサーバでのサイト構築例CakePHPで下記サイトを構築してみた。http://jobrss.netフィード配信している転職サイトの新着求人情報を検索できるサイトです。定期的に巡回しているので新着求人情報がどんどん追加されていきます。(1日500件以上追加されてます。SimplePieレンタルサーバ使用ですが結構快適に動いています。(レンサバでも動くフレームワークってすごくないっすか???)cronでrssフィードを取得していますがこれもCakePHPで動いています。今後の目標1.検索機能の強化。(注目のキーワード等表示させると面白いかも・・・)2.人気順に表示(ajaxで外部リンクを追跡)3.ACLを使ってみたいメリット、デメリットを書いておきます。フレームワーク選定の参考に・・・CakePHPのメリット(選んだ点)1.言語がphp(いざとなればソースを追っかけれる。おいしい食べ方さん等参考にしました)4.軽い。