2009/10/17

CakePHPのPaginateで条件を指定する

ET withwithとかわいらしい愛称をつけた僕専用WEBサービスですが、ちょっと色々カスタマイズを始めております。昨日から悩んでいたのが、カテゴリやクライアントの値をクリックすると、それぞれのカテゴリやクライアントの個別のビューが表示されていたのですが、これをカテゴリやクライアントで絞り込んだテーブルの一覧を表示するように変えたいなあと。

通常はこんな感じで呼び出してますね。

contents_controller.php

function index() {
$this->Content->order = "date DESC";
$this->set(‘contents’, $this->paginate());
}

これだと全部取ってくるので条件を指定して、別のfunctionを作りました。

contents_controller.php

function view_category($id = null) {
$this->Content->order = "date DESC";
$this->paginate = array("conditions" => array("Content.category_id" => $id));
$this->set(‘contents’, $this->paginate());
}

で、index.ctpなどで呼び出すところに、

index.ctp

<?php echo $html->link($content[‘Category’][‘category’], array(‘controller’ => ‘contents’, ‘action’ => ‘view_category’, $content[‘Category’][‘id’])); ?>

として、view_categoryを呼び出し、その時渡されるcategory_idを使って、contents_controllerで条件で絞り込みしているわけです、はい。とりあえず、view_category_ctpの内容はindex.ctpの内容まるまるコピーで大丈夫(後でカスタマイズするかもなので別ファイルにしました)。以上はこちらを参考にしました。

[cakePHP1.2] paginateで条件文にLIKE,ORを指定する方法: PHPを使ったWebサイト構築 備忘録

なんかどこぞのサイトで書いてありましたが、プログラミングをしているというより、パズルのピースを組み合わせているような感じですね、CakePHP。

加藤 康祐 / 企画・設計

プランナー、デザイナー。加藤康祐企画設計代表。Webデザインを入り口に、2005年よりフリーランスとしてのキャリアスタート。主な仕事としてベンチャー企業でのサービスのUXデザイン、独法との防災メディアの運営、社会的養護の子どもたちの自立を支援するNPOのサポート。ラグビーと料理、最近イラスト。

加藤康祐企画設計

是非、フォローしてください!
Twitter / Instagram

(2012-10-5)
売り上げランキング: 14,705
100円