2009年2月アーカイブ

タイトルを表示する場所には
<title><?php echo $title_for_layout; ?></title>
を設定します

共通のレイアウトを利用する場合は
app/view/layouts/default.ctp
を作成して、ここに記述してください

$title_for_layout
はどこで設定するかというとコントローラ内で行います
何も設定しないとコントローラのクラス名が利用されると思います
<?php
class CategoryController extends AppController {

var $name = 'Category';
var $uses = array('Entry','Category','Information');
var $helpers = array('Html', 'Form','Javascript','Ajax');
var $pageTitle = "あたらしいたいとる";

このよう設定します
これをDBの値等で変更したい場合はfunction内で
$this->pageTitle = $information['title'];
のような感じで設定するとDBの結果によってタイトルを付け替えることができます




informationsのモデルではまりました

なんかbakeしたときの他のモデルの名前となんか並べてみると違うなと思いながら作っていると
Given your model named 'Information', Cake would expect a database table named information
とかいわれたけど、なんだよー当たり前のことをと思ってそのまま進んでいって
さー繋いで見るかと思ったところ
informationテーブルが見つかりませんと......

だってテーブルinformationsだからさ

悩むこと1時間
cakeの内部変数とぶつかってるのか?
とか、cakeのせいにしようとしたところ
rubyを使ったことのある人に聞いたところ
よくある話だと。。。

informationの複数形はinformationだそうです(汗
他にもperson peopleあたりも要注意です
前のエントリーで入力後の確認画面を作成する場合を書いたが
そのままadd.ctpをコピーすると当然フォームのままだったりします
テキストとかはそのまま表示に変えやすいんですけど
連動したリストボックスとかメンドクサイですよね
といっても値表示用のメソッド書けばいいんですが
さくっと逃げるためにリストの選択自体は
エラーチェックで再描画するようのままで
disabledにすることで逃げちゃいました

<?php echo $form->select('category_id',
                            $list,
                            null,
                            array('id'=>'categories','disabled'=>'disabled'),"選択してください");
?>
日本人って確認画面好きですよね~
まぁ金額大きくなればしかたないでしょうが
お金とか関係ない、かるーい項目でも入れますよね
といっていてもしかたないので確認画面つくります(笑

bakeで焼いたのをベースに変えます
        function add() {
                $this->set('list',$this->Category->getCategory());
                $this->set('options',array());
                if(@$_POST["mode"]){
                        $this->Entry->set($this->data);
                        if($this->Entry->validates()){
                                $this->render('confirm');
                        }else{
                                $this->Session->setFlash(__('The Entry could not be saved. Please, try again.', true));
                        }
                }else{
                        if (!empty($this->data)) {
                                $this->Entry->create();
                                if ($this->Entry->save($this->data)) {
                                        $this->Session->setFlash(__('The Entry has been saved', true));
                                        $this->redirect(array('action'=>'thanks'));
                                } else {
                                        $this->Session->setFlash(__('The Entry could not be saved. Please, try again.', true));
                                }
                        }
                }
        }
こんな感じでしょうか?
add.ctpには<input type=hidden name=mode value=confirm>の記述が必要です
このadd.ctpから入力をした場合modeにconfirmが入っていますので(条件判定では見てませんが)
confirm.ctpを作成してあればこれが表示されます
ここの内容はadd.ctpをコピーしてrenameすればいいと思います
そのままだと入力フォームなので表示のみにしたり、リストの値取得したりって処理は必要になって
しまいますが
これで確認画面が表示されます

顧客サーバで久々にさくらの共有を使うことになった
vimが設定されていなかったので
設定してみました

http://www.hazama.nu/t2o2/archives/002696.html
こちらのページを参考に
コンソールで入って

% mkdir local/src
% cd local/src
% wget ftp://ftp.vim.org/pub/vim/unix/vim-7.3.tar.bz2
% wget ftp://ftp.vim.org/pub/vim/extra/vim-7.3-extra.tar.gz
% wget ftp://ftp.vim.org/pub/vim/extra/vim-7.3-lang.tar.gz
% tar jxf vim-7.3.tar.bz2
% tar zxfv vim-7.3-extra.tar.gz
% tar zxfv vim-7.3-lang.tar.gz
% cd vim73
% ./configure --enable-multibyte --enable-xim --enable-fontset \
>--with-features=big --prefix=$HOME/local
% make
% make install

ちょっと使おうと思ったのでパッチは飛ばしちゃいました

% vi /~.cshrc
のpathに
$HOME/local/bin
を追加
aliasに
alias vi vim
を追加
LANGを設定
set LANG = ja_JP.UTF-8
sorch ~/.cshrc
で反映

vimrcは上記のページでも紹介されていますが
ずんWiki - vim
よりさっくりコピーさせていただきました
syntax on
を加えておけばカラー化されます

なんか自分が設定したvimrcよりも流石に反応いいので
他サーバもこのvimrcに書き換えようかなとか思ったりしてます






知り合いいっぱいいるのに
一回も参加してないPHP勉強会w

はじめの頃、乗り遅れたまんま今にいたります(笑

今回は『Delphi for PHP』の開発者であるJose Leonさんが来日しちゃって
参加したりするらしいです

勉強会なのにレベルたかっ!

ということで、興味がある方は参加してみてはいかがでしょうか

詳細はこちらから
必須項目等のエラーメッセージがデフォルト英語なので
都度、validateにメッセージを書くのも面倒だなと思っていたところ
日本語化ファイルを作成された方のblogを発見しました

以前自分でコツコツ変えてた覚えがあるんですが
どうやったか忘れちゃって。。。。。。

http://tsundere-server.net/caketrans/

このファイルを説明にあるように
CakePHPルート
  app
  ┗ locale
    ┗ jpn
      ┗ LC_MESSAGES
以下に配置したところ
メッセージが日本語化されました

ただ、フォームのエラーチェックの部分で
The Entry could not be saved. Please, try again.
とフォーム全体に対してのエラー表示があったのですが
ここも日本語化しないと。。。

本来ならじっくり調べたいところですが
なんとなくファイル書いて、やっつけで直しちゃってみました

先ほどのファイルを開いて
#:入力エラー
msgid "The Entry could not be saved. Please, try again."
msgstr "フォームの内容を正しく入力してください。"

を追加しちゃいました。

該当エラーはこれで日本語化されました
メッセージが英語だったら、ここに書いちゃえば置き換えてくれる??

また、別のエラーの日本語化が必要な時にしらべてみます(汗