cakephpでブックマークアプリを作る(3)
前回の記事でCakephpのWHEREである、conditionsの使い方が分かりました。さて、これを利用しつつ、カテゴリごとにページを別けたいと思います。
今回の記事でCakephpでのパラメータが分かります。
よくhttp://example.jp/?action=1というよに、?で値を渡します。私もCakephp以前はこのようにやっていたのですが、やはりこの『?=』という形はGoogle先生があまりお好きではありません。ですが、CakephpではGoogle先生が大好きなhttp://example.jp/posts/1
という、スラッシュ切りにしてくれるんです。URLもシンプルで、かつ、SEOにも効果的なURL構造にしてくれるなんて、素晴らしいですね!
これまで私の記事通り作って頂いているなら、
http://localhost/bookmark/posts/category/1
というURLでcategory = 1 のデータを呼び出せるようにしてみましょう!
新規ページ用に、function category()を追加しよう
class PostsController extends AppController に新規functionを追加します。前回までのfunction index($id = null) {}をコピーするとよいでしょう。
function category($id = null) {
$this->Post->category = $id;
$con = array('conditions'=>
array('Post.category'=>$id),
'order' => array('Post.id DESC'),
);
$post = $this->Post->find('all',$con);
$this->set('posts',$post);
}
$this->Post->category = $id;
これだけで、http://localhost/bookmark/posts/category/1がとれてしまいました。?category=1を$_GET[‘category’]の値を受け取ったのと同じです。
このコントローラーの出力用のViewも追加します。view/posts/index.ctpファイルを複製して、category.ctpという名前で保存してください。
これでばっちりページを別けることができました。view/posts/index.ctpとview/posts/category.ctpの2つのctpファイルの上の方に
<ul> <li><a href="/bookmark/posts/">トップページ</a></li> <li><a href="/posts/category/0">検索エンジン</a></li> <li><a href="/posts/category/1">ブログ</a></li> </ul>
こんな感じでリンクメニューを追加してみてはどうでしょう??
すっかりブックマークアプリっぽくなりましたね!
今回のデータをZIPファイルで固めました。コメントアウトで詳しい解説付きです。
よかったらダウンロードしてご利用ください。
ダウンロードはこちら
今日のまとめ
$this->Post->category = $id;これでhttp://localhost/bookmark/posts/category/1の、category = 1が取れます。今回はcategoryとしてとりましたが、仮にhttp://localhost/bookmark/posts/id/1とでもして、id = 1のページだけを取りたいときは、$this->Post->id = $id;として、’conditions’=>array(‘Post.id’=>$id) としてあげればid = 1にマッチしたデータが取れます。今回はさらっとしたブックマークアプリですから作りませんが、これを利用すれば各URLの詳細ページみたいなのが作れますね!