先日追加した「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>"; }
上記の関数を用意することで、一覧表示の「詳細」ボタンを押した後に、詳細画面へ遷移し、各データの詳細を表示することが可能になります。
応用次第では、管理画面の色々な場面で編集用の画面が作れるようになります。