先日追加した「function sample_plugin()」には、テーブルの値をだた一覧表示しただけでしたので、今回はその一覧から詳細画面を表示する。という部分を作ってみます。
まず、sample_plugin()という関数は以下のように書いていました。
/**
* 管理画面のHTMLの生成と表示
*/
function sample_plugin()
{
echo <<< EOL
<h1>sample_plugin メインページ</h1>
ここにHTMLテンプレートを生成していきます。
EOL;
//データ一覧
echo <<< EOL
<h2>データ一覧</h2>
<table>
<tr>
<th nowrap>ID</th>
<th nowrap>名前</th>
<th nowrap>登録日時</th>
<th nowrap>詳細</th>
</tr>
EOL;
global $wpdb;
$tbl_name = $wpdb->prefix . 'sample_mst';
$sql = "SELECT * FROM {$tbl_name} ORDER BY id;";
$rows = $wpdb->get_results($sql);
foreach($rows as $row) {
echo "<tr>";
echo "<td nowrap>" . $row->id . "</td>";
echo "<td nowrap>" . $row->sample_name . "</td>";
echo "<td nowrap>" . $row->create_date . "</td>";
echo "<td nowrap>";
echo "<input type='submit' name='submit[detail][" . $row->id . "]'";
echo " class='button-primary' value='詳細' />";
echo "</tr>";
}
echo "</table>";
}
上記の部分を、別な関数に移し、ボタンによって表示する情報を切り替えるように改造します。
ボタンごとに画面を切り替える為、function sample_plugin()を以下のように変更しました。
/**
* 管理画面のHTMLの生成と表示
*/
function sample_plugin()
{
if (isset($_REQUEST["submit"]["detail"])) {
self::detail(); //詳細
} else if (isset($_REQUEST["submit"]["edit"])) {
self::edit(); //修正
} else {
self::disp(); //初期表示
}
}
「$_REQUEST[“submit”][“detail”]」という部分が、HTML上にあるボタンのname属性によって切り替えるポイントとなります。(詳細か編集か初期表示かを分けています)
もっと良い方法があるかもしれませんが、間違いなく動作するので、一旦これで進めます。
次に「詳細画面」を表示する為の関数function detail()を新規に書きます。
/**
* 詳細表示
*/
function detail()
{
//押されたボタンのIDを取得する
if (array_search("詳細", $_REQUEST["submit"]["detail"])) {
$form_id = array_search("詳細", $_REQUEST["submit"]["detail"]);
}
//データ一覧
echo <<< EOL
<form action="" method="post">
<h2>データ詳細</h2>
EOL;
global $wpdb;
$tbl_name = $wpdb->prefix . 'sample_mst';
$sql = "SELECT * FROM {$tbl_name} WHERE id = %d;";
$prepared = $wpdb->prepare($sql, $form_id);
$rows = $wpdb->get_results($prepared, ARRAY_A);
echo <<<EOL
<table border="1">
<tr>
<td>ID</td>
<td>{$rows[0]["id"]}</td>
</tr>
<tr>
<td>NAME</td>
<td>{$rows[0]["sample_name"]}</td>
</tr>
<tr>
<td>登録日時</td>
<td>{$rows[0]["create_date"]}</td>
</tr>
</table>
<input type='submit' name='submit[]' class='button-primary' value='戻る' />
EOL;
echo "</form>";
}
上記の関数を用意することで、一覧表示の「詳細」ボタンを押した後に、詳細画面へ遷移し、各データの詳細を表示することが可能になります。
応用次第では、管理画面の色々な場面で編集用の画面が作れるようになります。