料理コーナー 生徒名検索機能追加 ソースと解説

料理コーナーのレコード件数が2019年8月28日現在で90件となりました。少ないうちは検索機能があってもほとんど役に立ちませんが、そろそろあってもいい頃合いですね。そこで、まずは生徒名で検索する機能を作ってみました。

毎回、実習生は2名から3名です。これを検索する為の文字列を手入力するのはめんどうですから、画面から選択する方式にします。それには生徒名を登録しておくテーブルが必要ですね。

そこで、テキスト・エディタに画面からコピペして生徒名を入力し、一人一人に分解してから、OpenOfficeのCalcに貼り付けて、ソートして連番を付けました。(左の図)

さらにこれをCSV形式でとりだして、テキスト・エディタで文字コードをWindowsのShiftJISからUTF-8に変換し、MySQLデータベースに新たに作ったテーブルに入れ込みました。

新たに作ったテーブルは以下のように単純な構造です。

テーブル名gno_ryori_seito
フィールド名型・長さ
id数値型
seito_name文字型・30バイト

phpソース

実際の文字コードはUTF-8ですが、ここではShift-JISにして表示します。

MVCfile name概要
Controllergno_ryori.phpプログラムの本体
今回はfunction kensaku_seito($seito='')を追加
Modelgno_ryori_model.phpデータベース関連関数の定義
今回はfunction get_seito_list()とfunction get_seito_ryori($seito)を追加
View gno_ryori_list.php料理の一覧を表示(検索結果を表示する場合の検索文字列表示を追加)
gno_ryori_main.php料理映像を表示(変更なし)
gno_ryorisubmenu.php左側の検索枠(新規作成)
gno_ryori_tmpl.phpWebブラウザに送るhtmlを構成する枠組(デフォルトCSSにしてレイアウトを変更)
header.phpAvocadoMix共通ヘッダー(変更なし)
footer.phpAvocadoMix共通フッター(変更なし)

controllers/gno_ryori.php (関数を1個追加など)

今回追加したのは、function kensaku_seito($seito='')ですが、最初に表示するときに検索用生徒名一覧を表示する為にindex()内で生徒名テーブルから生徒名一覧データを読み出す処理を追加しています。

生徒名の検索をして結果を表示するのが、function kensaku_seito($seito='')です。前の画面でクリックして渡された生徒名(URLの最後に表示される)、これをパラメータとして受け取り、モデル内の関数から結果を受け取り、一覧を表示します。そのときに検索文字列(生徒名)を連想配列のmsg変数に格納して、画面に引き渡しています。

views/gno_ryori_model.php (関数を2個追加)

function get_seito_list()では、生徒名全レコードを返します。

function get_seito_ryori($seito)では、受け取ったパラメータ文字列(生徒名)がseitoフィールドに含まれるレコードを検索して返します。

views/gno_ryori_submenu.php (新規作成)

この部分が一番苦心したところです。単に動作させるだけなら簡単なのですが、デザイン的には他のコーナーと同じにそろえたいので、あれこれと試行錯誤をくりかえしてやっとできました。そのまま書くとカギ括弧がネストしてしまうので、Aタグ部分をまるごと$s_urlという変数に格納してしまうという方式にしました。

表示例

生徒を選択したときの実行例です。

検索された一覧から、さらに「視聴」ボタンを押すと動画が再生されます。

実際の動作はこちらから確認してください。

2019年8月29日 記