質問編集履歴
1
問題となる部分が変わったことによる内容の修正
title
CHANGED
@@ -1,1 +1,1 @@
|
|
1
|
-
ec-cube2.12.6 のカスタマイズによる
|
1
|
+
ec-cube2.12.6 のカスタマイズによる規格の追加について
|
body
CHANGED
@@ -1,78 +1,73 @@
|
|
1
1
|
前提:
|
2
2
|
EC-Cube 2.12.6 にて商品に延長保証の項目を追加しております。
|
3
|
+
(PHP: 5.3.3, MySQL:5.1.73)
|
3
4
|
|
4
|
-
|
5
|
+
追加する項目(延長保証)については商品規格の一つとして扱いたいと考えております。
|
5
6
|
|
7
|
+
それに伴い、商品一覧ページ(list.tpl)および商品詳細ページ(detail.tpl)にて
|
8
|
+
ラジオボタンを表示し、「選択可能な延長保証年数」を確認できるようにしたいです。
|
9
|
+
|
6
10
|
例)
|
11
|
+
dtb_product_class
|
7
|
-
|商品ID|名前|ステータス|
|
12
|
+
|商品ID|商品ID|名前|ステータス|規格カテゴリID1|
|
8
|
-
|:--:|:--:|:--:|:--:|
|
13
|
+
|:--:|:--:|:--:|:--:|:--:|
|
9
|
-
|1|name|status|
|
14
|
+
|1|1|name|status|X|
|
10
15
|
|
16
|
+
dtb_classcategory
|
11
|
-
|
17
|
+
|規格カテゴリID|規格名|規格ID|
|
12
|
-
|
18
|
+
|:--:|:--:|--:|
|
19
|
+
|6|3年|X|
|
20
|
+
|7|5年|X|
|
21
|
+
|8|6年|X|
|
13
22
|
|
23
|
+
また、商品の金額に応じて同じ保証でも値段が変わる場合や
|
14
|
-
|
24
|
+
保証料金が商品の金額に左右されず一律となる場合もあるため、
|
15
|
-
|
25
|
+
新たに以下のようなテーブルを追加しています。
|
16
|
-
https://ecnomikata.com/column/8959/
|
17
26
|
|
18
|
-
|
27
|
+
例)
|
28
|
+
dtb_warranty
|
19
|
-
商品
|
29
|
+
|商品ID|規格カテゴリID|保証料金|保証料率(%)|
|
20
|
-
|
30
|
+
|:--:|:--:|:--:|:--:|
|
31
|
+
|1|6||5|
|
21
|
-
|
32
|
+
|1|7|1,500||
|
22
33
|
|
23
|
-
参考①
|
24
|
-

|
25
34
|
|
26
|
-
|
35
|
+
商品一覧ページ及び商品詳細ページでは、ラジオボタンにより延長保証の項目を表示し、
|
27
|
-
|
36
|
+
ラベルとして保証料金を(場合によっては計算して)表示したいと思っております。
|
28
37
|
|
29
|
-
上記
|
38
|
+
上記を踏まえ、以下のようにテンプレート側を変更しました。
|
30
|
-
「登録が完了致しました。」と表示されるのですが
|
31
|
-
phpmyadmin経由でMySQLの該当レコードを確認すると、「0」となっております。
|
32
39
|
|
40
|
+
①list.tpl
|
41
|
+
```smarty
|
42
|
+
<!--▼規格1-->
|
43
|
+
<h2>延長保証</h2>
|
44
|
+
<dt><!--{$tpl_class_name1[$id]|h}-->:</dt>
|
45
|
+
<dd>
|
46
|
+
<!--{foreach from=$arrProductClass item="kikaku"}-->
|
47
|
+
<!--{html_radios options=$kikaku.classcategory_id1 selected=$arrProduct.classcategory_id1}-->
|
48
|
+
<!--{if $arrErr.classcategory_id1 != ""}-->
|
49
|
+
<p class="attention">※ <!--{$tpl_class_name1[$id]}-->を入力して下さい。</p>
|
50
|
+
<!--{/if}-->
|
33
|
-
|
51
|
+
<!--{/foreach}-->
|
52
|
+
</dd>
|
53
|
+
<!--▲規格1-->
|
54
|
+
```
|
34
55
|
|
56
|
+
②detail.tpl
|
57
|
+
```smarty
|
58
|
+
<!--▼規格1-->
|
59
|
+
<h2>延長保証</h2>
|
35
|
-
|
60
|
+
<!--{foreach from=$arrProductsClass item="kikaku1" key="key"}-->
|
61
|
+
<label/><input type="radio" name="classcategory_id1" value="<!--{$kikaku1.classcategory_id1}-->" /><!--{$kikaku1.classcategory_name1}--></label>
|
62
|
+
<!--{$kikaku1.price02}-->円
|
63
|
+
<!--{/foreach}-->
|
64
|
+
<!--▲規格1-->
|
36
|
-
```
|
65
|
+
```
|
37
66
|
|
38
|
-
|
67
|
+
しかし、下図のように現状ではラジオボタンが表示されない状態となっております。
|
39
|
-
...
|
40
|
-
$objFormParam->addParam('延長保証期間', 'warranty_period_id', STEXT_LEN, 'n', array('MAX_LENGTH_CHECK'));
|
41
|
-
...
|
42
|
-
}
|
43
68
|
|
44
|
-
|
69
|
+

|
45
70
|
|
46
|
-
$objQuery =& SC_Query_Ex::getSingletonInstance();
|
47
|
-
|
71
|
+
上記問題の解決にご協力いただけないでしょうか。
|
48
72
|
|
49
|
-
// 配列の添字を定義
|
50
|
-
$checkArray = array('name', 'status',
|
51
|
-
...
|
52
|
-
'sale_limit', 'deliv_date_id', 'maker_id', 'note',
|
53
|
-
//追加項目(延長保証情報)
|
54
|
-
'warranty_period_id' );
|
55
|
-
$arrList = SC_Utils_Ex::arrayDefineIndexes($arrList, $checkArray);
|
56
|
-
|
57
|
-
// INSERTする値を作成する。
|
58
|
-
...
|
59
|
-
|
60
|
-
// 追加項目(保証期間)
|
61
|
-
$sqlval['warranty_period_id'] = $arrList['warranty_period_id'];
|
62
|
-
|
63
|
-
$arrRet = $objUpFile->getDBFileList();
|
64
|
-
$sqlval = array_merge($sqlval, $arrRet);
|
65
|
-
...
|
66
|
-
}
|
67
|
-
|
68
|
-
|
69
|
-
```
|
70
|
-
登録情報確認画面(confirm.tpl)からPOSTすると実際にDBへ登録する処理が走ると思うのですが、
|
71
|
-
その際、EC-CUBE側には以下のようなエラーログが出力されておりました。
|
72
|
-
|
73
|
-
Warning(E_WARNING): array_diff() [<a href='function.array-diff'>function.array-diff</a>]: Argument #1 is not an array on [/var/www/html/data/class/SC_CheckError.php(63)] from ::1
|
74
|
-
|
75
|
-
調べる限り、どうやら配列としてデータを渡すことができていないようなのですが、
|
76
|
-
どこをどのように修正したら良いのか分かりません。
|
77
|
-
|
78
|
-
|
73
|
+
よろしくお願いします。
|