EC-CUBE2で作ったサイトのお客様から、CSV出力設定の登録が出来ないとの連絡が。
CSV出力する項目を設定しているにもかかわらず、「※ 出力設定リストが入力されていません。」とエラーになり登録出来ないという事象。
調べてみると、特定の条件(操作)を行った時のみ発生する事象で今まで気づきませんでした。
何も手を加えていないEC-CUBE2でも同じ事象が発生したので、EC-CUBE本体の潜在的な事象のようです。
この事象の修正方法を解説します。
コピペで直せるようにソースも掲載しています。
スポンサーリンク
特定の条件で発生する
事象を再現させる方法は下記の通り。
- 全ての項目を「CSV出力する項目」に設定してある状態で保存します。
- 再度、設定画面を開き「<<」ボタンで、全ての項目を「CSV出力しない項目」へ移動します。
- その状態から、適当な項目を「CSV出力する項目」へ移動します。
- 「この内容で登録する」ボタンで保存。
- 「※ 出力設定リストが入力されていません。」エラーが発生。
一旦全ての項目をCSV出力しない項目にしてから、CSV出力する項目を設定していくとエラーになるんですね。
ただし、もとからCSV出力しない項目として保存済の項目をCSV出力する項目に設定するとエラーは発生しないです。
ややこしいですね。笑
お客様から連絡をうけて再現させるまで時間がかかりました。
修正方法
調べてみるとJavaScriptで出力項目の選択の状態を変更しているんですが、POSTされたデータでは未選択になっていました。
選択状態を正しくformに反映されるように処理を追加すると正しく動作します。
修正ファイルは下記のテンプレート
/data/Smarty/templates/admin/contents/csv.tpl
scriptタグの中に下記のfunctionを追加。(53行目あたり)
1 2 3 4 5 6 7 |
function setOutputList() { var selected = new Array(); $('select[name="output_list[]"]').children('option[selected="selected"]').each(function() { selected.push($(this).val()); }); $('select[name="output_list[]"]').val(selected); } |
「この内容で登録する」ボタンのon_clickで、上記のfunctionを呼び出す。(83行目あたり)
変更前
1 |
<li><a class="btn-action" href="javascript:;" onclick="eccube.fnFormModeSubmit('form1', 'confirm', '', ''); return false;"><span class="btn-next">この内容で登録する</span></a></li> |
変更後
1 |
<li><a class="btn-action" href="javascript:;" onclick="setOutputList();eccube.fnFormModeSubmit('form1', 'confirm', '', ''); return false;"><span class="btn-next">この内容で登録する</span></a></li> |
この修正で当該エラーは解決されると思います。
お役に立てれば幸いです。
最後までお読み頂きありがとうございました!