情弱エンジニアのなかのblog

一人前のエンジニアになる為のブログです

CakePHPで記事データをカテゴリーごとに出力する方法

1.checkboxでカテゴリーをユーザーに選択させる機能の実装

現在CakePHPで記事を投稿するアプリを制作していまして ある特定の検索条件ごとに記述を出力する方法を記載させて頂きます。

記事に付随するCategoryというデータが検索条件になっています。

2.Controllerでカテゴリー情報をセットする

Controller側から検索条件となるデータをViewに渡します。

Categoriesテーブルにカテゴリ名(name)があるとします。

$this->set('category_name', $this->Category->find('list', array('fields' => array('name'))));

これでカテゴリーのカテゴリ名をViewに渡せます。

3.Viewの設定

それでは受け取ったカテゴリーのデータを使い、検索条件を選択するチェックボックスを作っていきます。

<?php
    echo $this->Form->input('category', array(
    //複数項目をチェックさせるにはmultipleを使います
    'multiple' => 'checkbox',
    //Controller側から受け取ったカテゴリーの名前を使う
    'options' => $category_name,
    ));
?>

3.Controllerでデータを受け取る受け渡す

POSTされたデータをControllerで受け取り、Modelへ渡します。 今回紹介する機能ではチェックボックスを使っていながら、 選択された一件のデータしか受け渡すことが出来ません。

複数検索はまた別の記事で紹介いたします!

//Viewで選択されたデータを一件だけ受け取ります
$category_id = $this->request->data['Article']['category'][0];

//Modelのget_categoryにほしいカテゴリーidを渡し、記事データを受け取る
$selected_articles = $this->Article->get_category($category_id);

4.Modelで記事データを返す

Model側で受け取ったカテゴリーidに該当する記事だけをControllerに返します。

public function get_category($category_id){
    //受け取ったカテゴリーidでDBのcategory_idを検索します。
    $data = $this->find('all' , array('conditions' => array('Article.category_id' => $category_id)));

    return $data;
}

5.ビューで結果を出力する

Modelから受け取ったデータをControllerからViewに渡します。

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

最後にViewで受け取った記事のデータを出力して終了です。

<?php foreach ($selected_articles as $article): ?>
//以下記事のデータを出力する処理

という事で今回はカテゴリーごとの出力を記載致しました。 もっと細かい検索条件や複数検索など行いたいのですが、それはまた別の記事で

それでは