2011年8月29日月曜日

CakePHP ラジオボタンやセレクタが未選択の場合のバリデーションエラー表示


formヘルパーで生成したセレクタが必須項目であった場合、テキストボックスなどと同様にエラー表示がされるのかと思いきやエラー表示がなされない。ラジオボタンでも同様。
selectの場合、これを表示するには、viewファイルに次のように記述する。

<?php
echo $form->error('selectid','エラーメッセージ');
?>


例)都道府県を選択する
■Viewファイル
<?php
echo $form->select('prefid',$pref), null, array('empty' => '選択してください'));
echo $form->error('prefid','メッセージ');
?>
$prefidには各都道府県のリストが配列で格納されているものとする

■modelファイル
var $validate = array(
'prefid' => 'notEmpty',
);


あるいは


var $validate = array(
'prefid' => array( 
'rule' => array('notEmpty'),
)
);

2011年8月25日木曜日

CakePHP 携帯などでviewとlayoutを切り替える

アクセス元の端末によって表示ファイルを変更したい場合、該当するコントローラファイルで、render()を利用して変更する。

■viewファイルを変更する

$this->render('view');

viewには表示させたいテンプレートファイル名を指定。拡張子は不要。

例)index_mob.ctpを表示させたい場合
$this->render('index_mob');

■layoutファイルを変更する
$this->layoutに指定する。

例)レイアウトファイルをlogin.ctpで表示させたい場合

$this->layout = 'login';



■view、layoutファイルを両方変更する
layoutファイル名をrender()の第二引数にファイル名を指定する。

$this->render('view','layout');

viewには表示させたいテンプレートファイル名、layoutには表示させたいレイアウトファイル名を指定。拡張子は不要。

例)index_mob.ctpをdefault_mob.cptで表示させたい場合
$this->render('index_mob','default_mob');

携帯用、PC用など、常に決まったレイアウトファイルを利用する場合は、毎回記述するのは面倒なので、別の方法で実装するほうが良さげ。
実装したら追記。

2011年8月23日火曜日

CakePHP それぞれのページにlinkタグでCSSを追加する

CakePHPでは、全てのページに読み込むCSSファイルはdefault.ctpファイルに記述すれば良いが、各ページ毎に別指定したCSSファイルを読み込む場合は次のようにする。

default.ctp

hoge.ctp
css('hogehoge', null, array('inline' => false)); ?>

以上で読み込まれるCSSにhogehoge.cssが追加される。

CSSは app/webroot/css/ 内を読み込むので、hogehoge.cssは、 app/webroot/css/hogehoge.css とする必要がある。

2011年8月22日月曜日

CakePHP URLに含まれるパラメータの受け取り方

CakePHPで生成されるURLは、

http://ドメイン.com/コントローラ名/ファンクション名/パラメータ1/パラメータ2・・・

となる。
URLに含まれるパラメータを取得するには、$this->params['pass']とする。

例)
URL
http://hanage.com/hoge/fugo/100/200

hoge_Controller.php
var_dump($this->params['pass']);

結果
array(2) { [0]=> string(3) "100" [1]=> string(3) "200" }

2011年8月10日水曜日

メニューなどのブロックを読み込む Element

CakePHPでテンプレート内にグローバルメニューやヘッダ、フッタといったパーツを読み込む場合は、elementを利用する。
テンプレートファイルに読み込むブロックを指定し、読み込まれるファイルをelementsディレクトリ内に配置する。

ctpファイル(呼び出し元のテンプレート)
<?php echo $this->element('menu'); ?>

ctpファイル(呼び出されるブロック:/app/views/elements/)
menu.ctp

呼び出される側は、コンテンツ部分のhtmlソースだけ記述。

タイトルの表示 CakePHP1.3x

CakePHP1.3xでは1.2xまでとは、表示の方法が変更になっている。

1.Controll側で記述する方法

■controllerソース
$this->set('title_for_layout', 'タイトル');

■ctpソース(/apps/views/layouts/default.ctpなど)
<?php echo $title_for_layout; ?>

同様にして、コントローラからビューにデータを受け渡すことができる。

2.Viewで記述する方法
■ctpソース
<?php
$this->set('title_for_layout', 'タイトル');
?>

エラーページなどのタイトルや、管理運用をHTMLコーダーが担当する場合は、Viewで記載する方法が簡単ですね。

2011年4月29日金曜日

Parse Time / Number of Queries / Query Time の表示/非表示 [ZenCartPro-R]

ページ最下部に表示される
Parse Time: 0.387 - Number of Queries: 326 - Query Time: 0.262912358017
という表示の表示/非表示の設定

管理画面-[一般設定]-[ログの設定]-[パースタイムの表示]

表示:true
非表示:false

2011年4月14日木曜日

メニュー(カテゴリ)ブロックの表示[ZenCartPro-R]

メニューの表示は、カテゴリブロックを表示する。


管理画面 - 追加設定・ツール - サイドボックスの表示設定 - sideboxes/categories.php

2011年4月13日水曜日

検索窓をヘッダにのみ表示したい[ZenCartPro-R]

ZenCartPro-Rではサイドボックスのtpl_search_header.phpをオンにすることで、検索窓をヘッダとサイドボックスに表示できる。

このボックスは、ヘッダもサイドも共通のパーツになるので、ヘッダ用に横長のデザインを行うとカラムからはみ出してしまうという問題がある。

ヘッダだけ表示し、サイドは表示しない場合は以下のように設定する。

管理画面 - 追加設定・ツール - サイドボックスの表示設定 - sideboxes/search.php


表示サイド(左/右) ステータスをOFF

シングルボックスステータスをON

[更新]ボタンをクリック

2011年4月12日火曜日

iSLE(アイル)専用サーバで他社SSLをインストールする

iSLE(アイル:GMO)の専用サーバに、他社(今回はベリサイン)のSSL証明書をインストール。
再起動して、パスワードを入力し、SSLも稼働しているのだが、ブラウザでhttpsでアクセスするとエラーとなってしまう。


通常通り証明書、中間証明書、鍵のパスを指定する他に、ssl.confに次の設定が必要。


SSLVerifyClient optional

あるいは、webmin管理画面の

 サーバ - ApacheWebサーバ - バーチャルサーバ(該当するもの) - SSLのオプション

 クライアントSSL証明書セレクタから[省略可]を選択。

でもOK。