Webアプリ養成読本の実践(3)のつづき2
Webアプリエンジニア養成読本[しくみ、開発、環境構築・運用…全体像を最新知識で最初から! ] (Software Design plus)
- 作者: 和田裕介,石田絢一(uzulla),すがわらまさのり,斎藤祐一郎
- 出版社/メーカー: 技術評論社
- 発売日: 2014/03/11
- メディア: 大型本
- この商品を含むブログ (5件) を見る
投稿の表示
ルーティング追記
$ pwd /vagrant/work/app $ vim lib/Tinitter/Route.php
以下を追記
$app->get('/page/:page_num', '\Tinitter\Controller\TimeLine:show');
showメソッド修正
$ vim lib/Tinitter/Controller/TimeLine.php
<?php namespace Tinitter\Controller; use \Tinitter\Model\Post as M_Post; class TimeLine { public function show($page_num = 1) { $app = \Slim\Slim::getInstance(); list($post_list, $next_page_is_exist) = M_Post::getByPage(10, $page_num); $app->render( 'TimeLine/show.twig', [ 'post_list' => $post_list, 'page_num' => $page_num, 'next_page_is_exist' => $next_page_is_exist ] ); } }
getByPageメソッド実装
$ vim lib/Tinitter/Model/Post.php
<?php namespace Tinitter\Model; class Post extends \Illuminate\Database\Eloquent\Model { static function getByPage($per_page, $page_num) { // スキップする件数を計算 $offset = $per_page * ($page_num - 1); // 投稿を取得、次ページの存在判定用に1件多く取得 $post_list = static::orderBy('id', 'DESC') ->take($per_page+1) ->skip($offset) ->get()->all(); // 次ページの存在をチェック if (count($post_list) > $per_page) { array_pop($post_list); // 確認用の1件を捨てる $next_page_is_exist = true; } else { $next_page_is_exist = false; } return [$post_list, $next_page_is_exist]; } }
投稿を繰り返し表示
ページャーテンプレート作成
$ vim templates/_Parts/Pager.twig
{% autoescape true %} <div class="text-center"> <ul class="pagination pagination-lg"> {% if page_num > 1 %} {% if (page_num - 1) == 1 %} <li class="active"> <a href="/" class="prev">«</a> </li> {% else %} <li class="active"> <a href="/page/{{page_num - 1}}" class="prev">«</a> </li> {% endif %} {% endif %} <li><span class="page-num">{{page_num}}</span></li> {% if next_page_is_exist %} <li class="active"> <a href="/page/{{page_num + 1}}" class="next">«</a> </li> {% endif %} </ul> </div> {% endautoescape %}
show.twig修正
$ vim templates/TimeLine/show.twig
{% extends "frame.twig" %} {% block content %} {% autoescape true %} {% if page_num == 1 %} {% include "_Parts/Form.twig" %} {% endif %} {% include "_Parts/Pager.twig" %} {% for post in post_list %} <div class="postcell"> <div class="body">{{ post.body|nl2br }}</div> <div class="info"> post by <span class="nickname"> {{ post.nickname }}</span> <span class="date">({{ post.created_at }})</span> </div> </div> {% endfor %} {% include "_Parts/Pager.twig" %} {% endautoescape %} {% endblock %}
トップページへの最新投稿表示
http://localhostへアクセス 下部に最新リスト10件が表示された。