ホーム > CakePHP > CakePHPでオレ専用ブログを作ってみる vol.2

CakePHPでオレ専用ブログを作ってみる vol.2

ビューアクションを定義する

エントリの記事本体のデータを取得するためのアクションを定義する。

既に作成済みの/app/controllers/entries_controller.phpに、view()として追記していく。

app/controllers/entries_controller.php

    function view($id = null) {
        // Entryモデルからレコードのidを取得して変数$idに代入
        $this->Entry->id = $id;
        // idにひもづく一件だけ取得すればいいのでread()
        $this->set('post', $this->Entry->read());
    }

ビューアクションのためのビューファイルを用意する

Entriesコントローラのview()アクションが実行された際に必要なビューファイルを用意する。

app/views/entries/view.ctp


投稿日時:


これでエントリ自体を表示することが出来た。

でも、これだとトップページ(本ブログの場合は、エントリ一覧を表示するページ/cblog/entries/がトップということになっている)へのリンクがなくて不便なので、コンテンツ上部にリンクテキストを配置する。(h1タグ部分が追記部分)

app/views/entries/view.ctp

オレ専用ブログHomeへ

投稿日時:

カテゴリ分け

次は新規投稿機能の実装だと思ったら、そうだ、カテゴリ分け出来るようにしたいんだったって思い出したので、テーブル「entries」にそれ用の「category」フィールドを追加した。これでいいんだよな?多分。

mysql> alter table entries add category varchar(255) after content;

新規投稿機能の実装

Entriesコントローラ(entries_controller.php)に新規投稿機能を実現するための新しいアクション「add()アクション」を追加する。

app/controllers/entries_controller.php

    function add() {
        if(!empty($this->data)) {
            $this->Entry->save($this->data);
        }
    }

そして、このadd()アクションを実行した際に利用されるビューファイルをapp/views/entries/add.ctpとして用意する。このビューファイルには投稿フォームの内容が表示されることになる。

app/views/entries/add.ctp

Home

新規投稿

create(null, array('type'=>'POST', 'action'=>'')) ?> タイトル:text('Entry.title') ?> 内容:textarea('Entry.content') ?> カテゴリ:text('Entry.category') ?> end("投稿する") ?>

この新規投稿画面にはブラウザでhttp://IPアドレス/cblog/entries/add/でアクセス出来るようになる。

テスト投稿してみると無事投稿出来た。でも、投稿後も投稿フォームページに留まっているので、これを投稿後はエントリ一覧ページへ遷移するようにリダイレクトの処理を追加することにする。

app/controllers/entries_controller.php

    function add() {
        if(!empty($this->data)) {
            $this->Entry->save($this->data);
            $this->redirect('.');
        }
    }

これで投稿後はエントリ一覧ページに遷移するようになった。でも、よく見るとエントリ一覧が「昇順」になっていたので、やっぱり新しい投稿が上に来るのが良いから、これを「降順」に変更する。find(‘all’)にオプションをつけてfind(‘all’, array(‘order’ => ‘Entry.id desc’))にする。

app/controllers/entries_controller.php

    function index() {
        $data = $this->Entry->find('all', array('order' => 'Entry.id desc'));
        $this->set('data', $data);
    }

でも、これまでに書いてきたコードだとビューファイルにおいてエラーが出るので、内容をけっこう大幅に書き換えた。

app/views/entries/index.ctp

ブログエントリ一覧

"; echo "
  • " . $html->link($arr['Entry']['title'], '/entries/view/' . $arr['Entry']['id']) . "
  • "; echo "
  • " . mb_substr($arr['Entry']['content'], 0, 100) . "… … " . "
  • "; echo "
  • " . $arr['Entry']['created'] . "
  • "; echo " "; }

    これまでは$postからデータを取り出していたのを(これはCakePHPのサイトにあったチュートリアルをまんま真似ていた)$data[$i]に変更して、これを$arrに代入し、出力させたい所で$arr['モデル名']['データフィールド名']で取り出している。

    あ、昨日追加した「カテゴリ」フィールドを表示してなかったので、これも追加して表示するようにする。次の一行を追加。

    app/views/entries/index.ctp

    echo "
    
  • {$arr['Entry']['category']}
  • ";

    ここまでの段階でエントリ一覧ページはこんな感じ。

    エントリ一覧その4

    オープンソース徹底活用 CakePHPによるWebアプリケーション開発
    掌田 津耶乃
    秀和システム
    売り上げランキング: 174026
    おすすめ度の平均: 5.0

    5 初心者向け
    5 深く書かれていて便利である

    コメント:0

    コメントフォーム
    入力した情報を記憶する

    トラックバック:1

    この記事のトラックバック URL
    http://showzine.info/blog/2009/08/cakephp%e3%81%a7%e3%82%aa%e3%83%ac%e5%b0%82%e7%94%a8%e3%83%96%e3%83%ad%e3%82%b0%e3%82%92%e4%bd%9c%e3%81%a3%e3%81%a6%e3%81%bf%e3%82%8b-vol-2.html/trackback
    トラックバックの送信元リスト
    CakePHPでオレ専用ブログを作ってみる vol.2 - SHOWJIN*BLOG より
    pingback - akiyan連載のCakePHPチュートリアルのコードを直してみる - O2 Project より 2010年5月17日

    [...] 参考にしたサイト一覧 CakePHPでオレ専用ブログを作ってみる vol.2 – SHOWJIN*BLOG [...]

    ホーム > CakePHP > CakePHPでオレ専用ブログを作ってみる vol.2

    検索
    フィード

    ページの上部に戻る