HTMLの復習からやり直し

時間が空いてしまったが、PHPのプログラムの学習を再開。
会社で、参考にししているWebの画面のソースを確認していたら、非同期で通信しているのか、と思っていた機能が、実はフレームを使っていたことがわかり、さっそく使い方を確認してみる。

HTMLのフレームなんて、ここ何年も使っていなかったので、HTMLの学習からやり直し。
HTMLの確認は簡単だったが、JavaScript を使う方法は、ちょっと調べないとやれなかった。

試し作った画面の仕様はこんなの。
親画面のボタンを押すと、フレームで作ってある子画面が出る。この子画面は、上が検索用、下が親画面にデータを送るJavaScript 付きの画面。下画面で、リンクまたはボタンを押すと、親画面のINPUTタグにテキストを書き込む。この機能は、子画面の中の下画面に設定した JavaScript で実行する。
この JavaScript は、こんなの。


function 関数名( 値 ) {
if( !parent.opener || parent.opener.close ) {
window.alert("メインウィンドウがありません");
} else {
parent.opener.document.フレーム.テキスト.value = 値;
top.close();
}
}
これを作るのに、Javascript の window をいろいろ調べてみて、もやと思って設定したところうまくいった。
「parent.opener.document 」は、今の画面の親(フレーム)を開いた画面(こっちが本当の親)という意味。
また、画面を閉じる場合は、今の画面の親(フレーム)ごと閉じるようにするため、top.close としている。
一応、これで予定の動作ができたので、フレームの下の画面を、DBを検索して Javascript を貼り付けた画面を出せばOK。

さっそく CakePHP でDBを検索させて、JavaScript で親の<INPUT>タグに貼り付けるコードを作成して試してみる。
ちょっと時間がかかったものの、うまくいきました。
こんな感じで、フレームを作って、フレーム内に CakePHP からの出力を表示するようにしたところ、予定どおりの動作ができました。





KEIYAKU_FRAME







手間取ったのは、SQLの組み立て。SQLに入れる「%」をどうしようか、とかあまり関係ないところで悩んでました。
SQLの組み立ては、今回はこんな感じで組んでみました。
BDは、数字のコードと文字列を参照対象とし、コードは、1つまたは2つで検索する。文字列は、検索文字を含むものを抽出する。

function kensaku_out() {
$k_code = $_POST['k_code1'];
$k_codeu = $_POST['k_code2'];
$k_name = $_POST['k_name'];
if(( $k_code == "" ) && ( $k_name == "" )) {
$error_msg = "検索キーワードを設定してください";
$sqls = "select * from vender where key = 0;";
$keiyakudb = $this->Keiyaku->query( $sqls );
} else {
$sqls = "select * from vender where key = 0;";
$error_msg = "";
if( $k_code != "" ) {
if( $k_codeu != "" ) {
$sqls = "select * from vender where key >= '" . $k_code . "' and key <= '" . $k_codeu . "'order by key;";
} else {
$sqls = "select * from vender where key = '" . $k_code . "' order by key;";
}
} else {
$sqls = "select * from vender where name like '%" . $k_name . "%' order by key;";
}
$keiyakudb = $this->Keiyaku->query($sqls);
}
$this->set('sqls', $sqls);
$this->set('error_msg', $error_msg);
$this->set('keiyakudb', $keiyakudb);
}
ほんとうは表示する文字列を制限して、ページ送りする機能とかつければいいんだろうけど、まだ、そこまでいけてない。