ラベル cakephp の投稿を表示しています。 すべての投稿を表示
ラベル cakephp の投稿を表示しています。 すべての投稿を表示

2012年6月21日木曜日

$this->Html と $html の違い

ヘルパーを使う際に$html->link~のように記述していたところ、$this->Htmlのように記述するように、と言われた。

$thisなんかなくたって動くんだから、短い方がいいじゃねえか、市内にいる時に市外局番いらねえだろ、とも思ったのだけども、師匠が「携帯のご時世だからな」と言うので、今後は$thisから記述することにする。

話によると、今後のバージョンでは$thisありで統一なんだとか(未確認)。

なお、ヘルパーの最初の文字は大文字にすること。

$this->Html->link();
$this->Form->input();

2012年6月15日金曜日

スタイルシートにrelやtitleを追加する CakePHP

CakePHPでタグの属性を設定する方法。

■Alternateを追加する
default.cssを読み込む際、alternateも指定する場合、下記の様に記述する

Html->css('default', 'stylesheet alternate');
?>

下記の様に出力される


■title
title属性にmasterを設定する

Html->css('default', 'stylesheet alternate', array('title'=>'master'));
?>

下記の様に出力される


2012年5月25日金曜日

CakePHPでHTMLヘルパーを利用してリンクを記述する場合、ページの途中へリンクを設定する方法。(CakePHP1.3)
name(アンカー)にリンクを張るには、urlを指定する際、#に指定すればいいらしい。
例)/shop/area#westarea にリンクを張りたい場合
リンク元Viewファイル
 $html->link('ページの途中へのリンク',array(
 'controller'=>'shop',
 'action'=>'area',
 '#'=>'westarea'
));

下記のように表示される
おすすめ物件
リンク先viewファイル

2012年5月8日火曜日

CakePHPで使えないテーブル名

CakePHPでベイク中にエラーが表示された。 内容は次の様なもの。 PHP Parse error: syntax error, unexpected T_LIST, expecting T_STRING in /(中略)/cakephp/app/models/list.php on line 2 Parse error: syntax error, unexpected T_LIST, expecting T_STRING in /(中略)/cakephp/app/models/list.php on line 2 このときベイクしようとしていたのはlistsというテーブルなのだけども、どうやらこのlistsというテーブル名が問題だったらしい。 既に予約されているのかな? というわけで、問題を引き起こす避けるべきテーブル名を発見次第列挙。 ■予約語? lists ■複数形が特殊なために面倒なテーブル名 aquarium

2012年5月2日水曜日

SSHが使えないサーバでシンボリックリンクを作る

廉価なレンタルサーバの場合、SSHが使えないサービスプランだったりする。
このような場合、PHPを使って、シンボリックリンクを作る。

link.php

<?php
symlink('実体へのフルパス','シンボリックリンクを設置する場所へのフルパス');

?>


フルパスで書く必要があるので、不明な場合は

<?php echo __FILE__; ?>

とでもしてフルパスを確認しておく。

SSHは使えないけども、高機能&低価格のサーバ。
予備環境として重宝してる↓

2012年4月12日木曜日

CakePHP 携帯ライブラリの設置

CakePHP1.3での携帯ライブラリの設置。覚え書き。

https://github.com/MASA-P/KtaiLibrary
https://github.com/MASA-P/ktai-dev


1.ecwディレクトリをまるごとvendorsディレクトリにコピー
※サイト全体にやるならappやcakeと同じディレクトリのvendorsでok。

2.app_controller.phpに追記
var $components = array('Ktai',・・・・);


//----------------------------------------------------------
//Redirect override.
//If iMODE access or use_redirect_session_id is true,
// adding session id to url param.
//----------------------------------------------------------
function __redirect_url($url){

 if(isset($this->Ktai)){
  if($this->Ktai->_options['enable_ktai_session'] &&
   ($this->Ktai->_options['use_redirect_session_id'] || $this->Ktai->is_imode())){
   if(!is_array($url)){
    if(preg_match('|^http[s]?://|', $url)){
     return $url;
    }
   $url = Router::parse($url);
   }
   if(!isset($url['?'])){
    $url['?'] = array();
   }
   $url['?'][session_name()] = session_id();
  }
 }
 return $url;
}

function redirect($url, $status = null, $exit = true){
 return parent::redirect($this->__redirect_url($url), $status, $exit);
}

 //「Ktai Library」の設定
 //
var $ktai = array(
 'enable_ktai_session' => true,
 'use_redirect_session_id' => false,
 'imode_session_name' => 'csid',
 'use_img_emoji' => true,
 'input_encoding' => 'UTF-8',//KTAI_ENCODING_UTF8
 'output_encoding' => 'UTF-8',//'SJIS-WIN',// KTAI_ENCODING_SJISWIN
 'output_auto_encoding' => true,
 'use_binary_emoji' => false,
 'output_auto_convert_emoji' => false,
);

3.コンポーネントにktai.phpをつっこむ
/app/controllers/components に ktai.php をコピーする


4.ついでにケータイでのアクセス時のデフォルトレイアウトを変更しておく

function beforeFilter(){
 if(!($this->Ktai->is_ktai()) ) {
  $this->layout = 'default';
 } else {
  $this->layout = 'default_mob';
 }
}

2012年3月27日火曜日

CakePHP いつもはうまくいくのにエラーになるとき見直す項目

CakePHPでサイト構築中、いつもは何も起こらない場所でエラーが発生する場合がある。
大概は、しょーもないミスが原因。でも、しょーもなさすぎると逆にどこでミスしているかわからない。

そんなしょーもないミスをおかすたびに、このコンテンツが増えますよ。

■Missing Database Table
コントローラもビューもDBにテーブルも作った。でも表示されない・・・という症状。

・テーブル名が複数形になっていない
drink → drinks

・複数形が特殊(英語的に)で接続できない

2012年3月7日水曜日

「URL rewriting is not properly configured on your server.」というエラー。mod_rewriteが原因でない場合

cakephp1.3

インストール後にdefault.ctpをアップしたらこのようなエラー表示がなされた。

URL rewriting is not properly configured on your server.

一般的にこのエラーはmod_rewriteの設定ミスであることが多い。

 エラーからはこちらに案内される
 http://book.cakephp.org/1.3/view/917/Apache-and-mod_rewrite-and-htaccess

が、しかし、今回はdefault.ctpを入れる前には問題がなかったので、mod_rewrite自体のエラーではない。

結論から言うと、このエラーは「cake.generic.css」が読めていない事が問題。
default.ctpテンプレートでcake.generic.cssを読むように変更したところエラーが表示されなくなった。

実際には、デフォルトのページのままの運用とかはしないと思うので実害はないだろうけども、目を皿のようにして.htaccessをチェックしたあげく、どこも間違っていない・・・と泥沼にハマる前に。

2012年1月25日水曜日

CakePHP 1.3 テキストボックスの横幅を指定する

CakePHP 1.3 フォームヘルパーを使ってテキストボックスを表示するときの、横幅の指定方法。

 $Form->input(string, array('style'=>'width:100px;'));

'size'=>'8'のように指定できるかと思ったのですがダメでした。
とりあえずCSSで制御できますが、もっと良い方法があれば、追記します。


郵便番号入力フォームの例(フォーム幅を120px、入力文字数を8文字に制限)

 $Form->input('zipcode', array('style'=>'width:120px;','maxlength'=>'8'));

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年2月17日木曜日

cakephpでsmarty URLの引数を渡す、受け取る [未解決→中途半端に解決]

cakephp1.2.9

cakephpでURLの含まれる引数を渡す、受け取る方法。
cakephpでは、

http://hogehoge.com/hanage.php

というようなURLは

http://hogehoge.com/hanage

としてアクセスするらしい。
じゃあ、引数を持ったURLの場合どうするのか。

http://hogehoge.com/hanage.php?nagasa=100

とか

http://hogehoge.com/hanage.php?nagasa=100&color=bk

とかはどうすんだ?

インターネッツの情報では、


http://hogehoge.com/hanage/100

こんな風にしてアクセスして、Controller内で受け取れ、とか

http://hogehoge.com/hanage/nagasa:100/color:bk

とすればOKとか書いてあるんだけど、俺の環境では値を受け取る前にエラーページが表示されてしまう。
ついでに「:」でつなぐ方法は、URLには「:」を含めてはイカンというルールがあるらしく、携帯からのアクセスで問題を起こすらしい。
そこまでたどり着いていない俺には遠い話ですけども。

追記:
あまり綺麗ではないけども、一応解決。中途半端に。

  http://hogehoge.com/hanage/?nagasa=100

  function index(){
      $this->set('nagasa', $this->params['url']['nagasa']);
      $nagasa = $this->params['url']['nagasa'];
  }

こんな感じでアクセスできる。
ちなみにindex.phpじゃない場合はURLが若干違う。
たとえばmigiana.phpだった場合はこんな感じ。


http://hogehoge.com/hanage/migiana/?nagasa=100

もうちょっと綺麗にできるようになりたいと思う今日この頃。

cakephpでsmarty 別のテンプレートをインクルードする

smartyでは、別のテンプレートをインクルードして呼び出すことができる。
こんな感じ。


{include file='menu.tpl'}

値を渡すこともできる。

{include file='head.tpl' title=$title}

cakephpではこのように別のテンプレートを呼ぶ場合、viewsのelements内にファイルを置き、

$this->element('breadcrumb')

のように記述する。
この場合、breadcrum.btpというテンプレートファイルが、views/elementsディレクトリ内にあること。

記述例)
<?php echo $this->element('breadcrumb'); ?>

cakephpでsmarty smartyに値を渡す

ネイティブのphpではsmarty値を渡す時には以下のように書く。

$smarty->assign('name', $name);


cakephpではcontroller内に次の様に書くことでテンプレートで利用できる。


 $this->set('name',$name);

テンプレートではいずれも

 {$name}

で値を表示できる。