見出し画像

掲示板の作り方#18 ページングの実装

こんにちは。Suipediaです(∩´∀`)∩。

いつかの回に#18で終わるでしょう、と言った気がしますが、まだ終わる気がしません。

あと1回は やりそうです。終わりは#19かな。

さて、今回は前回のページメッセージ表示に続きましてページング処理をしましょう。

サクサクいきたいですね。


いざ、まいりませう!


今回のゴール

今回は以下の表示ができるようにします。

12_今の状態

これができると このシステムの使い勝手がグッと向上しますね。ユーザに心地よくお使いいただくというのは非常に非常に大切なことです。


ページメッセージに表示件数を合わせる

前回、こんなキャプチャをお見せしました。

17_表示件数変わってねえ

せっかくページメッセージを実装したのに肝心の実際の表示件数が変わってないっていうね(笑)。はい、笑いごとでもないですね。


まずはこれを解消しましょうか。

ルートフォルダ(トップぺージ)のc.phpファイルを開いてください。

01_ソース

その中にこんなソースがあります。「//あとで開放する」って書いてます。ここはですね、今の17行目を消して(コメントアウトでもいいです)16行目のコメントアウトを解除してください。


なんとそれをするだけで・・・

02_正常件数表示

じゃじゃ~ん!最終ページが3件だけの表示になりました。もちろん他のページも5件の表示になります。


さて、ソースを解説しましょう。

/* 今のページに描画する分の情報を切り出す */
$array = array_slice($result,$displayStartNumber,$displayNumber);

ズバリこの1行ですね。ここで代入されてる$array

	/** 1件ずつスレッドを出力する */
	foreach($array as $cItem){
		outThreadList($cItem);
	}

このように出力のループ処理で使われるので、この流れからして$arrayに入るのは表示対象のスレッドリストということが分かります。

そして、array_slice()ですが、これはPHPの標準関数で3つの引数を渡しています。

array_slice($result,$displayStartNumber,$displayNumber);

これは、第一引数のリストの中から第二引数番目から第三引数件数分を抽出し配列で返す、という働きをします。

文章で説明されると意味不明ですね(笑)。

まず、第一引数の$result!これはトップページのc.php(13行目)

	/** スレッド情報を全件取得 */
	$result = getFullThread();

誕生しています。全件取得の結果を保持していますね。

で、お次に第二引数の$displayStartNumber。彼はというと・・・前回おつくりいただきましたpagingMessage.phpの20行目辺り、

	if($currentPageNumber == ""){
		/* ページが指定されていないとき(初訪問時) */
		$currentPageNumber = 1;
		/* コンテンツ配列内のいくつ目から取り出すかを指定する数字 */
		$displayStartNumber = 0;
	}else{
		/* ページの指定があったとき(ページングリンクからの遷移) */
		$displayStartNumber = ($currentPageNumber -1) * $displayNumber;
   }

分岐の中で代入されています。今アクセスされたページではスレッドリストの何件目から表示するのか?という開始番号ですね。


そして第三引数の$displayNumber。彼女も同じくpagingMessage.phpの中で誕生しています。

	/* 1ページ当たりの表示数 */
   $displayNumber = 5 ;

6行目でダイレクトに決めていますね。これはコメントの通り、1ページに何件表示するか?という設定です。


つまり!アクセスされたページが1ページ目だったとしたら・・・

array_slice($result,0,5);

という処理になりますし、3ページ目だったら・・・

array_slice($result,10,5);

という処理ですし、はたまた最後のページだとしたら・・・

array_slice($result,25,5);

という処理になります。最後に紹介したケースは25件目から5件取得することで28件をオーバーするのですが、これで大丈夫です。エラー等は起きません。

この関数もarray_slice(あれいすらいす)言うてるんで、リストをスライスしてその1つを抽出するんですね。なんとな~くイメージしやすいかと。

本当、関数の命名って重要ですね(;´∀`)。


これで表示は整いました!次行きましょう。



ページリンクのファイルを用意!

ページ毎の表示件数制御はできました。

これまでは動作確認時、直接ブラウザのURLバーに

http://localhost/3/ とか http://localhost/5/

と入力してたんですが、当然ユーザにそれをお願いするかというとしませんよね。

ボタンクリックひとつで遷移していただけるようにします。


引き続き、ルートフォルダのc.phpを見てみてください。

10行目辺りに

	/** ページング */
	//include($webroot."/src/parts/paging.php");

こんなのがあるでしょうか。

コメントアウトを解除し、このファイルを用意しましょう。

03_ファイル追加

partsフォルダの選択状態で新しいファイルボタンをクリックします。

04_ファイル名入力

ファイル名を入力します。paging.php


ファイルできました!!


仕様のおさらい

早速実装していきたいのですが、どんなふうにロジックを組むのだ?という点が不明瞭かと思います。

このページ送り部分の仕様がどんなもので、それをどのように実装するかを先にさらいましょう。

まず、表示パターンですが、大きく分けて3つあります。

ここから先は

11,308字 / 15画像
この記事のみ ¥ 200

この記事が気に入ったらサポートをしてみませんか?