エレメント内で、ページ付けされたpostモデルにアクセスできます。
最新の5つのPostをある順番で取得するには次のようにします。
<h2>最新の投稿</h2>
<?php $posts = $this->requestAction(‘posts/index/sort:created/order:asc/limit:5′); ?>
<?php foreach ($posts as $post) { ?>
~ 略 ~
エレメント内で、ページ付けされたpostモデルにアクセスできます。
最新の5つのPostをある順番で取得するには次のようにします。
<h2>最新の投稿</h2>
<?php $posts = $this->requestAction(‘posts/index/sort:created/order:asc/limit:5′); ?>
<?php foreach ($posts as $post) { ?>
~ 略 ~
FormHelperを使ってプルダウンメニューを作るときに空の値を設定するには、
$option[’empty’] に表示させたい文字列を設定してあげればOKです。
CakePHPで複数選択項目を保存するときに、
最低限1つは登録するようにvalidationを設置したときに迷ったのでメモ。
ブログの記事をPost 、 記事のタグを Tagとして
記事に PHPとか、MySQLとか復数の Tagを関連付けれるようにするとした場合に、
Post Model に
var $validate = array(
‘Tag’ => array(
‘rule’ => array(‘multiple’ => array(‘min’ => 1))
),
);
と指定すれば、未設定の場合にエラーにしてくれるようにはなった。
だがその後に、エラーメッセージが表示されないという問題がでた…
例のごとく世界中のお友達の意見を覗いてもみんなバラバラしていて、メジャーなのものが分からなかったので
以下で対応。
Modelは変更せずに、Controller と View を変更。
[Controller]
~略~
$this->data[‘Post’][‘Tag’] = $this->data[‘Tag’][‘Tag’]; // << 追加
if ($this->Post->save($this->data)) {
~略~
[View]
~略~
echo $this->Form->input(‘Tag’, array(
‘type’ => ‘select’,
‘multiple’ => ‘checkbox’,
‘error’ => false,
));
echo $this->Form->error(‘Post.Tag’);
~略~
CakePHPでのレイアウトは Contorller::$layout で指定できるのだけど
管理画面とかユーザー用ページを作る場合に、
最初はAppControllerのサブクラス作ってそれぞれ処理を分ける?って考えたけど、
Cakeっぽくなさそうだなーと思ってメジャーそうなものを調べてみた。
行き着いた結果がメジャーかどうかはわからないけど、規約どおりだったのでこんな感じで
ControllerのbeforeFilter()内で、prefixを見て判断する。
ex.)
function beforeFilter() {
if (isset($this->params[‘prefix’]) && $this->params[‘prefix’] == ‘admin’) {
$this->layout = ‘admin';
} else {
$this->layout = ‘rewanko';
}
ちなみに、$this->params[‘prefix’] の中にはコントローラーのパラメータが入っています。
MySQLで UNIQUE KEYを後から追加する場合には、
alter table [table_name] add unique ([column_name]);
上記のコマンドで追加出来ます。
HtmlHelper::link() でリンク文字列にhtmlタグを使用していると
デフォルトではエスケープされてしまいます。
これをエスケープしないで出力するには、HtmlHelper::link()の第3引数の中で ”escape” => false を渡してあげればOKです。
<< エスケープされちゃう>>
$this->Html->link(‘<span>escape sarechau</span>’, array(‘action’ => ‘index’));
<<エスケープされない>>
$this->Html->link(‘<span>escape sarenai</span>’, array(‘action’ => ‘index’), array(‘escape’ => false));
いろいろ試している中でこれが使いやすそうだった。
バージョンアップがまだまだ頻繁に行われているようでバグもあったり…
今後に期待!
最近のコメント