kazpgmの日記

『プログラム自動作成@自動生成』作成の日記

TOOL更新_kaz_PHP自動作成◎自動生成お助けTOOL_大中小分類情報からプルダウンリスト(html select option)を作成する方法。Ajaxでやる。

TOOL更新_kaz_PHP自動作成◎自動生成お助けTOOL_大中小分類情報からプルダウンリスト(html select option)を作成する方法。Ajaxでやる。

1.プルダウンリスト(html select option)作成にAjaxを使うか、使わないかを指定するようにしました。

2.outDebugLog()を作りました。Ajaxではprint_r()使っても内容確認できないのでデバックログ出力を作りました。

3.201106191212のTOOL修正内容.txt

201106191212のTOOL修正内容.txt

【0】以下の修正を行いました。
http://d.hatena.ne.jp/kazpgm/20110609/1307577360に内容を載せました。
今回修正量が多いので、修正内容は記述しません。

■kaz_PHP自動作成◎自動生成お助けTOOL\hinagata\Library\
 修正「header.txt」
 修正「header_user.txt」

<<追加内容>>
<script type="text/javascript" src="■{BASE_DIR_ADD_SLASH}■/js/suma/jquery-1.5.2.min.js"></script>

■kaz_PHP自動作成◎自動生成お助けTOOL\hinagata\Model\
 修正「hinagata_listview20080724_user.txt」
 修正「hinagata_iUpCsv20090714.txt」
 修正「hinagata_add20110223_nondb_user.txt」
 修正「hinagata_add20080724_user.txt」
 修正「hinagata_20080229.txt」

<<修正前 例>>
$_REQUEST['c_elements_idx'] = '■{C_ELEMENTS_IDX}■';
・・・
$db =& dbConncet(); // DB接続
■{SET_DB_ELEMENTS_PGM}■
・・・
unset($_REQUEST['KAZ_TOOL_token']);
switch($mode) {
・・・
global $ELEMENTS;

<<修正後 例>>
require_once('AppDbCdUtil.php');
・・・
$_REQUEST['c_elements_idx'] = '■{C_ELEMENTS_IDX}■';
//outDebugLog($_REQUEST); // デバックログ(コメントはずして使用してください。)
・・・
unset($_REQUEST['KAZ_TOOL_token']);
■{SET_DB_ELEMENTS_PGM}■
switch($mode) {
・・・
global $ELEMENTS,$AppDbCd;

■kaz_PHP自動作成◎自動生成お助けTOOL\hinagata\View\
 修正「hinagata_RegisterView_001_user.txt」
 修正「hinagata_ListView_001_user.txt」
 修正「hinagata_CompleteView_001_user.txt」
 修正「hinagata_AmendView_001_user.txt」
 修正「hinagata_ListView_DB_分類_中コード値.txt」
 修正「hinagata_ListView_DB_分類_大コード値.txt」
 修正「hinagata_ListView_DB_分類_小コード値.txt」
 修正「hinagata_AmendView_001.txt」
 修正「hinagata_RegisterView_001.txt」
 修正「hinagata_NewListView_001_user.txt」
 修正「hinagata_ListView_001.txt」
 修正「hinagata_iUoCsvView.txt」
 修正「hinagata_DetailView_001_user.txt」
 修正「hinagata_DetailView_001.txt」
 修正「hinagata_ConfirmView_001_user.txt」
 修正「hinagata_ListSrch_DB_大分類_大プルダウンFromTo.txt」
 修正「hinagata_ListSrch_DB_大分類_大プルダウン.txt」
 修正「hinagata_ListSrch_DB_大中小分類_小プルダウンFromTo.txt」
 修正「hinagata_ListSrch_DB_大中小分類_小プルダウン.txt」
 修正「hinagata_ListSrch_DB_大中小分類_大プルダウンFromTo.txt」
 修正「hinagata_ListSrch_DB_大中小分類_大プルダウン.txt」
 修正「hinagata_ListSrch_DB_大中小分類_中プルダウンFromTo.txt」
 修正「hinagata_ListSrch_DB_大中小分類_中プルダウン.txt」
 修正「hinagata_ListSrch_DB_大中分類_大プルダウンFromTo.txt」
 修正「hinagata_ListSrch_DB_大中分類_大プルダウン.txt」
 修正「hinagata_ListSrch_DB_大中分類_中プルダウンFromTo.txt」
 修正「hinagata_ListSrch_DB_大中分類_中プルダウン.txt」
 修正「hinagata_AmendView_DB_大分類_大プルダウン.txt」
 修正「hinagata_AmendView_DB_大中小分類_小プルダウン.txt」
 修正「hinagata_AmendView_DB_大中小分類_大プルダウン.txt」
 修正「hinagata_AmendView_DB_大中小分類_中プルダウン.txt」
 修正「hinagata_AmendView_DB_大中分類_大プルダウン.txt」
 修正「hinagata_AmendView_DB_大中分類_中プルダウン.txt」
 修正「hinagata_DetailView_DB_分類_小コード値.txt」
 修正「hinagata_DetailView_DB_分類_中コード値.txt」
 修正「hinagata_DetailView_DB_分類_大コード値.txt」

<<修正前 抜粋>>
global $ELEMENTS;

<<修正後 抜粋>>
require_once('AppDbCdUtil.php');

global $AppDbCd,$ELEMENTS;


■kaz_PHP自動作成◎自動生成お助けTOOL\.php\pear\
 追加「JSON.php」
<<内容>>
  JSONは「PEAR::Services_JSON」をWEBから落とした。これはphp4.3でも動く。

■kaz_PHP自動作成◎自動生成お助けTOOL\作成先フォルダ\.システムphpBasePgm\common\
 修正「AppCheckUtil.php」
 追加「AppDbCdUtil.php」
 修正「AppHtmlUtil.php」

■kaz_PHP自動作成◎自動生成お助けTOOL\作成先フォルダ\.システムphpBasePgm\
 修正「functions.php」

■kaz_PHP自動作成◎自動生成お助けTOOL\作成先フォルダ\システムBasePgm\admin\js\
 修正「kaz.js」
 追加「jquery-1.5.2.min.js」:WEBから落としてきた。

■kaz_PHP自動作成◎自動生成お助けTOOL\作成先フォルダ\システムBasePgm\js\
 修正「kaz.js」
 追加「jquery-1.5.2.min.js」

■kaz_PHP自動作成◎自動生成お助けTOOL\作成先フォルダ\システムBasePgm\
 追加「com_select_idx.php」

■kaz_PHP自動作成◎自動生成お助けTOOL\
 修正「PHP作成マクロ(お助けTOOL).xls」

■kaz_PHP自動作成◎自動生成お助けTOOL\
 修正「テーブル項目一覧などの定義_★お助けTOOL_Sample_110619.xls」
<<修正内容>>
「コード一覧表」シートP列「Ajaxで画面プルダウンを制御し、データチェック、
データ表示もDB直接行う場合”はい”を記述してください。」を追加した。


==<<自動作成◎自動生成後の 変更内容例 start>>==
<<修正前 例>>
creLrgMidSmlCategoryEle('ary_lrgmidsml_category',
	'm_category', 'ca', 'category', 'catname', 'catengname', 'deldt',
	'm_subcategory', 'cs', 'category', 'subcategory', 'subcatname', 'subcatengname', 'deldt',
	'm_extracategory', 'ce', 'category', 'subcategory', 'extracategory', 'excatname', 'excatengname', 'deldt');
creLrgMidSmlCategoryEle('ary_lrgmidsml_biztype',
	'm_biztype', 'bt', 'biztype', 'bizname', '', 'deldt');

<<修正後 例>>
// 大中小分類が一つになったエレメントをDBデータから作成する start
$AppDbCd = new AppDbCdUtil(); // 大中小分類が一つになったエレメントをDBデータから作成するクラス
$AppDbCd->setOptions('ajax', 'ary_lrgmidsml_category',
	'm_category', 'ca', 'category', 'catname', 'catengname', 'deldt',
	'm_subcategory', 'cs', 'category', 'subcategory', 'subcatname', 'subcatengname', 'deldt',
	'm_extracategory', 'ce', 'category', 'subcategory', 'extracategory', 'excatname', 'excatengname', 'deldt');
$AppDbCd->setOptions('', 'ary_lrgmidsml_biztype',
	'm_biztype', 'bt', 'biztype', 'bizname', '', 'deldt');
$AppDbCd->creLrgMidSmlElements (); // 「ajax区分」が''の時、DBエレメントを$ELEMENTSに直接設定する。
// modeが”elem”の場合、エレメント内容を$AppDbCdから取得してjson形式で戻す。
require_once('../../com_select_idx.php');
// 大中小分類が一つになったエレメントをDBデータから作成する end

===========
<<修正前 例>>
$valsNew[$key . '_value'] = $ELEMENTS['ary_lrgmidsml_biztype']['lrg'][$val]['0'];
$valsNew[$key . '_value'] = $ELEMENTS['ary_lrgmidsml_category']['lrg'][$val]['0'];
$valsNew[$key . '_value'] = $ELEMENTS['ary_lrgmidsml_category']['mid'][$valsBk['category']][$val]['0'];
$valsNew[$key . '_value'] = $ELEMENTS['ary_lrgmidsml_category']['sml'][$valsBk['category']][$valsBk['subcategory']][$val]['0'];

<<修正後 例>>
$valsNew[$key . '_value'] = $AppDbCd->getLrgEleVal("ary_lrgmidsml_biztype", $val, '0');
$valsNew[$key . '_value'] = $AppDbCd->getLrgEleVal("ary_lrgmidsml_category", $val, '0');
$valsNew[$key . '_value'] = $AppDbCd->getMidEleVal("ary_lrgmidsml_category", $valsBk['category'], $val, '0');
$valsNew[$key . '_value'] = $AppDbCd->getSmlEleVal("ary_lrgmidsml_category", $valsBk['category'], $valsBk['subcategory'], $val, '0');

===========
<<修正前 例>>
<?=AppHtmlUtil::getHTMLSelectLrgPlus($ELEMENTS['ary_lrgmidsml_biztype'], $o['srch_biztype'], "srch_biztype", "全て", $o['c_elements_idx'], '', $indelkbn)?>
<?=AppHtmlUtil::getHTMLSelectLrgPlus($ELEMENTS['ary_lrgmidsml_category'], $o['srch_category'], "srch_category", "全て", $o['c_elements_idx'], "onchange=\"createMidCategorySelection1(this.options[this.selectedIndex].value, srch_subcategory , srch_extracategory, '全て',ary_lrgmidsml_category, '種類・大分類', " . $o['c_elements_idx'] . ", '" . $indelkbn ."');\"", $indelkbn)?>
<?=AppHtmlUtil::getHTMLSelectMidPlus($ELEMENTS['ary_lrgmidsml_category'], $o['srch_category'], $o['srch_subcategory'], "srch_subcategory", "全て", $o['c_elements_idx'], "onchange=\"createSmlCategorySelection(srch_category.options[srch_category.selectedIndex].value, this.options[this.selectedIndex].value, srch_extracategory, '全て',ary_lrgmidsml_category, '種類・大分類', '種類・中分類', " . $o['c_elements_idx'] . ", '" . $indelkbn ."');\"", $indelkbn)?>
<?=AppHtmlUtil::getHTMLSelectSmlPlus($ELEMENTS['ary_lrgmidsml_category'], $o['srch_category'], $o['srch_subcategory'], $o['srch_extracategory'], "srch_extracategory", "全て", $o['c_elements_idx'], "", $indelkbn)?>

<<修正後 例>>
<?=AppHtmlUtil::getHTMLSelectLrgPlus($AppDbCd->getLrgElements("ary_lrgmidsml_biztype", ''), $o['srch_biztype'], "srch_biztype", "全て", $o['c_elements_idx'], '', $indelkbn)?>
<?=AppHtmlUtil::getHTMLSelectLrgPlus($AppDbCd->getLrgElements("ary_lrgmidsml_category", ''), $o['srch_category'], "srch_category", "全て", $o['c_elements_idx'], "onchange=\"createMidCategorySelection1(this.options[this.selectedIndex].value, srch_subcategory , srch_extracategory, '全て',ary_lrgmidsml_category, '種類・大分類', " . $o['c_elements_idx'] . ", '" . $indelkbn . "', '/kaz01u/admin/shohin/shohinA.php', 'ary_lrgmidsml_category', ary_lrgmidsml_ajaxKbn['ary_lrgmidsml_category']);\"", $indelkbn)?>
<?=AppHtmlUtil::getHTMLSelectMidPlus($AppDbCd->getMidElements("ary_lrgmidsml_category", $o['srch_category'], ''), $o['srch_category'], $o['srch_subcategory'], "srch_subcategory", "全て", $o['c_elements_idx'], "onchange=\"createSmlCategorySelection(srch_category.options[srch_category.selectedIndex].value, this.options[this.selectedIndex].value, srch_extracategory, '全て',ary_lrgmidsml_category, '種類・大分類', '種類・中分類', " . $o['c_elements_idx'] . ", '" . $indelkbn . "', '/kaz01u/admin/shohin/shohinA.php', 'ary_lrgmidsml_category', ary_lrgmidsml_ajaxKbn['ary_lrgmidsml_category']);\"", $indelkbn)?>
<?=AppHtmlUtil::getHTMLSelectSmlPlus($AppDbCd->getSmlElements("ary_lrgmidsml_category", $o['srch_category'], $o['srch_subcategory'], ''), $o['srch_category'], $o['srch_subcategory'], $o['srch_extracategory'], "srch_extracategory", "全て", $o['c_elements_idx'], "", $indelkbn)?>

===========
<<修正前 例>>
<?=esc($ELEMENTS['ary_lrgmidsml_category']['lrg'][$o['category']][$o['c_elements_idx']])?>
<?=esc($ELEMENTS['ary_lrgmidsml_category']['mid'][$o['category']][$o['subcategory']][$o['c_elements_idx']])?>
<?=esc($ELEMENTS['ary_lrgmidsml_category']['sml'][$o['category']][$o['subcategory']][$o['extracategory']][$o['c_elements_idx']])?>

<<修正後 例>>
<?=esc($AppDbCd->getLrgEleVal("ary_lrgmidsml_category", $o['category'], $o['c_elements_idx']))?>
<?=esc($AppDbCd->getMidEleVal("ary_lrgmidsml_category", $o['category'], $o['subcategory'], $o['c_elements_idx']))?>
<?=esc($AppDbCd->getSmlEleVal("ary_lrgmidsml_category", $o['category'], $o['subcategory'], $o['extracategory'], $o['c_elements_idx']))?>

===========
<<修正前 例>>
global $ELEMENTS;

<<修正後 例>>
require_once('AppDbCdUtil.php');

global $AppDbCd,$ELEMENTS;

==<<自動作成◎自動生成後の 変更内容例 end>>==

2011/06/09 8:00-14:30 大中小分類情報からプルダウンリスト(html select option)をver0.1(201106011930)で作ったけど、データが多いときはAjaxでやるべきだ。という思いになったので。対応することにした。
2011/06/09 14:30-19:30 ver0.1(201106011930)で作ったkaz.jsの「createMidCategorySelection2」(大分類、中分類がある(かつ、小分類がない)場合の大分類change関数)でarrayCategory['mid'][lrg]の内容だけAjaxで書き換える。「createSmlCategorySelection」(大分類、中分類、小分類がある場合の中分類change関数(小分類がある場合これを使用する))でarrayCategory['sml'][lrg][midl]の内容だけAjaxで書き換える。という方法で修正する。
「データが多いとき」というのはあやふやなので、「コード一覧表」シートの中にAjaxで取り込むという印を付けよう。
データチェック、データ表示もDB直接行うようにする。
2011/06/09 20:30-02:00 まずAjax以外の大枠を作った「creLrgMidSmlCategoryEle()」の代わりに「$AppDbCd = new AppDbCdUtil();」「$AppDbCd->setOptions()」を作った。「$elem= $AppDbCd->getLrgElements($db, "ary_lrgmidsml_biztype", $vars['srch_biztype']);」「$ELEMENTS['ary_lrgmidsml_biztype']=$elem['ary_lrgmidsml_biztype'];」のようにつど$ELEMENTSの内容を書き換える。それにより現行ロジックのままチェック、値の表示ができる。
2011/06/10 14:30-16:00 Ajax使うか使わないかのフラグひとつでハンドリングできればかなりいいという発想が浮かんだ。・・・なぜかって言うとフラグを変えるだけで両方のテストができれば「お助けTOOL」自体のデバックがしやすい。ので。
2011/06/10 17:30-19:30 AppDbCdUtil.php作り変えてる。
2011/06/11 12:30-14:00 ver0.1(201106011930)の「creLrgMidSmlCategoryEle()」を消してしまうとTOOLの継続性維持が失われる。けれど、同じようなロジックを「AppDbCdUtil();」に作るのは良くない、ということで、またまた考え中。
2011/06/11 18:30-20:00 21:00-1:00 function.phpの「creLrgMidSmlCategoryEle()」を何とかしている。またAjax以外はできた。
2011/06/12 08:00-09:00 11:00-12:00 selectのonchangeで「ajaxで変数の値を書き換えるfunction」、「その値を見てselect optionを書き換えるfunction」を書き並べたが、ajaxで値を変数に入れる前にselect optionを書き換えるfunctionが動く。・・・・fireFoxのデバックで止めながら動かすとちゃんと動く。・・・こまったこまった。
2011/06/12 13:00-18:30 $.ajaxは完了を待たずして次ロジックが走る。(非同期って、スレッドのことだったのか)。その中で「ary_lrgmidsml_category = eval('(' + サーバーからのjson値 + ')');」にしたが。書き換えていないうちに」、「その値を見てselect optionを書き換えるfunction」function走っている。。から。ダメだった。・・・・ということは、$.ajaxを完了を待つようにすればうまくいく。というか、でないとうまくいかない。JSONは「PEAR::Services_JSON」から落として「.php/pear/JSON.php」に入れた。これはphp4.3でも動く。
2011/06/12 14:00-19:30 selectのonchangeを$.ajaxの「success:」で変数の値をサーバからの値で書き換え、「complete: 」でその値を見てselect optionを書き換えるfunction」にした。ら、うまく行った。
2011/06/15 10:30-11:00 $.ajax「dataType: 'text',data: $('#form名).serializeArray(),」でやる。ajaxする前に「form名」をempty、appendしsuccess後emptyしよう。(動的にfromを作るというアイディア)<=2011/06/15 21:00にやり方変えた。・・・やっとjson形式で出てたエラーが取れたので。
2011/06/15 21:00-22:00 $.ajaxの「data: $('#form名).serializeArray(),」はやめる。「var data = {mode:"elem",fmMidSmlEleElementNm:fmMidSmlEleElementNm,・・・,fmMidSmlEleSmlKey:""};」して「data: data,」でうまく動いた。function.phpに「function outDebugLog($msg = PHP_EOL) 」を作った。XMLHttpRequestではprint_r()じゃ変数の中身を確認できないから。
2011/06/17 08:00-20:00 思ったとおりに動いたので、自動作成◎自動生成のロジックを作成している。・・・これもまた、たいへん。
2011/06/18 11:00-20:00 自動作成◎自動生成のロジック作成中。プルダウンリスト(html select option)をAjaxでとってくるやり方。自動作成◎自動生成のロジック出来上がってlocalhostで試験中。明日vectorにUPできそう。ほんと、jquery使うと簡単。
2011/06/19 8:00-11:00 ver0.1(201106191212)をvectorに登録依頼した。・・・できてみたら、javascriptjquery使った部分と、jquey使っいない部分(以前作った部分)がある。が、これはこのままにしておくことにする。
2011/06/19 17:00-21:30 自WEBデモに今回の修正を反映している。。が。スマートフォン向けのお試しロジック入れちゃってあるので。めんどうなことになっている。。やっと。自WEBデモ載せた。・・・ひとつ重要なことがわかった。「kaz.js」で「$.ajax()」使っているので「jquery-1.5.2.min.js」の後に定義しないといけない。(偶然そうなっていた。から良かった)