PHPのdate()の返り値が9時間ずれてた

開発してる分には全然気付かなかった…
開発環境を組み立てなおしたせいで、タイムゾーンの設定を忘れてた。

php.iniで

date_timezone = 'Asia/Tokyo'

にしたら直った。

Tagged with:
 

Codaでクリップ登録

CodaをCakePHP色にするべく、スニペット的なクリップを登録中…

Codaでクリップ登録:画像
Codaでクリップ登録

変換後のプレースホルダも設定できる。(青いコロコロ)

ショートカットのメモ
文字選択してインデント Command + [
コメントアウトの切り替え Command + /

Tagged with:
 

Macでzen-coding導入

MacのNetBeansとCodaにzen-codingを入れた。

NetBeans
NetBeans→環境設定→インポート→ダウンロードしたzipを選択→すべてチェック→了解→再起動
ショートカット:Tab

Coda
ダウンロードしたzipを解凍→クリック→(起動してたら再起動)
ショートカット:Ctr + , (カンマ)

NetBeansのzen-codingはdiv#idとかに対応してない様子。
Codaはいい感じに使えた。

Tagged with:
 

JsHelperでAjaxフォーム

クックパッドみたいな意見箱を作りたかったので、既存のノーマルなフォームにJsHelperを組み合わせてみた。
(エンジンはJQueryを選択)

CakePHP 1.3.0

まずは$form->submit()部分を修正。

<?php echo $js->submit('送信', array('buffer'=>false, 'id' => 'OpinionFormSubmit', 'url' => '/opinions/ajax_add', 'update' => '#OpinionFormBox', 'beforeSend' => 'opinionFormLoading()')); ?>

  • urlは実行するアクション
  • updateは更新するボックスのid名とか
  • beforeSendは送信前に実行するJS関数とか(Loadingとか出したい時に)
  • bufferはfalseにしとかないと更新された時に動作しなくなる

後はフォーム画面とサンクス画面をelementにして、更新するボックス内で切り替えできるようにelement名を変数に。

<div id="OpinionFormBox">
<?php echo $this->element($opinionElement); ?>
</div>

さっきurlで指定したアクションではメール送信や結果に応じて読み込むelement名の変数をビューにセットしたり。
後はajaxなのでそれ用の設定を。

if (!$this->RequestHandler->isAjax()) {
$this->cakeError('error404');
exit;
}
Configure::write('debug', 0);
$this->layout = 'ajax';

これで動いたー。
エラーメッセージも普通のフォームみたいに表示されるからいい感じ。ブラウザのJSオフっても既存のフォームが普通に動いてくれる。

Tagged with:
 

virtualFields使ってみた

CakePHP1.3で開発を始めたのでさっそくvirtualFieldsを使ってみた。

CakePHP 1.3.0

以下のようにCASEも使えるっぽい。

var $virtualFields = array(
'full_title' => 'CASE WHEN info_categories_id != "" THEN CONCAT("[",InfoCategory.name,"] ",Info.title) ELSE Info.title END',
);

お知らせカテゴリが設定されている場合のみタイトルにカテゴリ名を括弧付きで付与。

これで$info['Info']['full_title']で 〜[メディア情報] どこどこで紹介されました〜 みたいな文字列が簡単に呼び出せる。
1.2系までのafterFindで長々と結合してた箇所を消してコードがすっきり!

Tagged with:
 

displayFieldではCONCATなどができない

find(‘list’)で姓・名を結合させた名前を表示させたい場合などに、displayFieldでCONCATをしてもうまくいかなかった。

CakePHP 1.2.6

var $displayField = array(‘CONCAT(Member.sei, Member .mei) as Member.name’);

Member.CONCAT〜みたいな感じでSQL内で勝手にモデル名がつけられてエラーになる様子。
しょうがないので以下のように対応。

$this->set(‘members’, Set::combine($members, ‘{n}.Member.id’, array(‘{0} {1}’, ‘{n}.Member.sei’, ‘{n}.Member.mei’)));

ちなみに、1.3だとvurtualFieldってので解決できるらしい。
(twitterで教えてもらった。感謝!)
これがあれば大分シンプルに処理できて助かる!

Tagged with: