あいの「1.CakePHPで掲示板#ページング機能」のまねしてかいてみるね
1.CakePHPではまだまだ実運用はまだまだ実運用はまだまだ実運用はまだまだ実運用はできたのセットアップと思いますまずはページング機能どうやらこれも簡単にできるようです参考URL:PageNatorのセットアップと思います!!
1.CakePHPで掲示板#ページング機能
だいたいの形はできたのですが、これではまだまだ実運用はできないのでちょこちょこ付加機能をつけて行きたいと思います
まずはページング機能
どうやらこれも簡単にできるようです
参考URL:CakePHPマニュアル:ページ付け(Pagination)»コントローラのセットアップ
と思ってマニュアル見たけどよくわからん。
参考URL:PageNatorの使い方
こっちのが良くわかります。
まずはコントローラを編集します
■/app/controllers/boards_controller.php■編集
<?php
class BoardsController extends AppController
{
var $name = "Boards";
var $uses = array("Board");
var $layout = 'boards';
var $paginate = array('limit' => 10,'order' => array( 'Board.created' => 'desc' ) ); //ここを追加
function index(){
// $this->set("boards",$this->Board->find('all')); ここを削除
$this->set("boards",$this->paginate('Board')); //ここを追加
}
………
var $paginate = array('limit' => 10,'order' => array( 'Board.created' => 'desc' ) );
で、「10件づつcreatedフィールド(投稿日)の降順で並び替えたもの」 と指定しています$this->set("boards",$this->paginate('Board'));
で、boards変数に一気にページ分のデータを入れています
次にビューを編集します。編集というよりページ送り機能をつけたい部分に追加といった方が正確かも
■/app /views /boards/index.ctp■追加
戻る/次へリンク
<?php e($paginator->prev('戻る')); ?>
<?php e($paginator->next('次へ')); ?>
ページング機能
<?php
e($paginator->numbers(array('separator' => ' ','modulus' => 4,)));
?>
ページング機能+α(さらに前や後ろがある時に…で表示)
<?php
if ($paginator->counter(array('format' => '%page%')) - 2 > 1) {
e('...');
}
e($paginator->numbers(array('separator' => ' ','modulus' => 4,)));
if ($paginator->counter(array('format' => '%page%')) + 2 < $paginator->counter(array('format' => '%pages%'))) {
e('...');
}
?>
これだけでページング機能が実装できます
7.書き込み後の動作確認
ようやくフォームもできた!バリデーションの設定も終わった!
さて動かしてみます
保存はうまくいきました。
しかし!文字を少なくしてエラーに引っかかるようにしても、エラーメッセージ表示せずに一覧に飛んでしまいます
ただ、データの保存はされていないようなので、どうやら検証ルールはきちんと動いている模様…
参照URL:CakePHPマニュアル:CakePHPブログチュートリアル»記事の追加
うえの記事と首っ引きで確認したところ、どうやらコントローラのSaveのあたりに問題がありそうなことに気づきました
if ($this->Post->save($this->data)) {
$this->flash('Your post has been saved.','/posts');
}
この部分です。Saveがきちんと実行されたときのみ、リダイレクトなりをさせなきゃいけないんですね。
というわけでコントローラは最終的にこうなりました
■/app/controllers/boards_controller.php■編集最後[完成]
<?php
class BoardsController extends AppController
{
var $name = "Boards";
var $uses = array("Board");
var $layout = 'boards';
function index(){
$this->set("boards",$this->Board->find('all'));
}
function write(){
if (!empty($this->data['Board'])){
$data = array();
$data["title"] = $this->data["Board"]["title"];
$data["contributor"] = $this->data["Board"]["contributor"];
$data["comment"] = $this->data["Board"]["comment"];
if ($this->Board->save($data)) {
$this->flash('保存完了したよ*:・(*-ω人)・:<br>一覧に戻るにはここをクリック','/boards');
}
}
}
}
?>
AUTHOR
Write up a little something about yourself here. Something short and sweet, or longer if you'd like.
FLICKR
- add flickr code here, or delete this and use the widget version.
TWEETS
- add twitter code here, or delete this and use the widget version.
