前回のページャを設置した記事をおさらいを含めて、見直してみます。
前回投稿した記事https://propansystem.net/blog/?p=1022では、登録データ数の無関係にページャ表示をしていました。
この場合、1画面内に10記事のデータ数を超えている場合は問題ありませんが、10記事以内のデータの場合にもページャが1ページ分のみ表示されてしまいます。
ページャをクリックしても何も起きず、ページャを表示していまうことで余計に操作しずらくなります。
そこで、データ一覧を出力する箇所のページャ表示部分に件数制限のロジックを入れて、10件未満の場合にはページャを表示しないようにします。
データ一覧を表示する関数部分を抜粋します。
function disp()
{
//データ一覧
echo <<< EOL
<form action="" method="post">
<h2>データ一覧</h2>
<input type='submit' name='submit[regist]' class='button-primary' value='新規登録' />
<div class="wrap">
<table class="wp-list-table widefat striped posts">
<tr>
<th nowrap>ID</th>
<th nowrap>名前</th>
<th nowrap>テキスト</th>
<th nowrap>チェック</th>
<th nowrap>ラジオ</th>
<th nowrap>セレクト</th>
<th nowrap>テキストエリア</th>
<th nowrap>登録日時</th>
<th nowrap>詳細</th>
<th nowrap>編集</th>
</tr>
EOL;
//現在ページ取得
$pageid = filter_input(INPUT_GET, 'pageid');
//1ページあたりの件数
$limit = 10;
//DBオブジェクトを用意
global $wpdb;
//全件数取得
$tbl_name = $wpdb->prefix . 'sample_mst';
$sql = "SELECT count(*) AS CNT FROM {$tbl_name}";
$rows = $wpdb->get_results($sql);
$recordcount = $rows[0]->CNT;
$offset = $pageid * $limit;
//offset と limitによる画面表示用のデータ取得
$sql = "SELECT * FROM {$tbl_name} ORDER BY id limit {$offset}, {$limit};";
//通常の取得方法(SQL実行結果を、オブジェクトとして取得)
$rows = $wpdb->get_results($sql);
foreach($rows as $row) {
echo "<tr>";
echo "<td>" . $row->id . "</td>";
echo "<td>" . $row->sample_name . "</td>";
echo "<td>" . $row->sample_text . "</td>";
echo "<td>" . $row->sample_check . "</td>";
echo "<td>" . $row->sample_radio . "</td>";
echo "<td>" . $row->sample_select . "</td>";
echo "<td>" . $row->sample_textarea . "</td>";
echo "<td>" . $row->create_date . "</td>";
echo "<td>";
echo "<input type='submit' name='submit[detail][" . $row->id . "]'";
echo " class='button-primary' value='詳細' />";
echo "</td>";
echo "<td>";
echo "<input type='submit' name='submit[edit][" . $row->id . "]'";
echo " class='button-primary' value='編集' />";
echo "</td>";
echo "</tr>";
}
echo "</table>";
echo "</div>";
echo "</form>";
//データ数が1画面あたりの記事数を超える場合のみ、ページャを表示する
if ($recordcount > $limit) {
$args = array(
'label' => __('Per Page'),
'default' => 10,
'option' => 'disp'
);
$page_html = self::pagination($recordcount);
//ページ部分の表示
echo "<div class='admin_pagination'>";
echo "<ul>";
foreach ($page_html as $key => $value) {
echo "<li>" . $value . "</li>";
}
echo "</ul>";
}
}
関数の最後で「if ($recordcount > $limit) {」という分岐を行い、
10件に満たない場合の制御をしています。
こうすることにより、データ数が少ない場合は、以下のような表示になります。
画面表示の書き方はもっとシンプルで、わかりやすい書き方はあると思いますが、今は不恰好ですが動作しているので次に進めていきます。
wordpress流の書き方については、今後の研究課題にして追求していく予定です。
