質問編集履歴

1

問題となる部分が変わったことによる内容の修正

2018/05/07 06:17

投稿

zvub1123
zvub1123

スコア230

test CHANGED
@@ -1 +1 @@
1
- ec-cube2.12.6 のカスタマイズによる項目追加で、配列を追加した
1
+ ec-cube2.12.6 のカスタマイズによる規格の追加につ
test CHANGED
@@ -2,154 +2,144 @@
2
2
 
3
3
  EC-Cube 2.12.6 にて商品に延長保証の項目を追加しております。
4
4
 
5
+ (PHP: 5.3.3, MySQL:5.1.73)
5
6
 
6
7
 
8
+
7
- また、追加する項目は配列にしたいと考えております。
9
+ 追加する項目(延長保証)について商品規格の一つとて扱いたいと考えております。
10
+
11
+
12
+
13
+ それに伴い、商品一覧ページ(list.tpl)および商品詳細ページ(detail.tpl)にて
14
+
15
+ ラジオボタンを表示し、「選択可能な延長保証年数」を確認できるようにしたいです。
8
16
 
9
17
 
10
18
 
11
19
  例)
12
20
 
21
+ dtb_product_class
22
+
13
- |商品ID|名前|ステータス|延長保証(warranty_period_id)|
23
+ |商品ID|商品ID|名前|ステータス|規格カテゴリID1|
24
+
25
+ |:--:|:--:|:--:|:--:|:--:|
26
+
27
+ |1|1|name|status|X|
28
+
29
+
30
+
31
+ dtb_classcategory
32
+
33
+ |規格カテゴリID|規格名|規格ID|
34
+
35
+ |:--:|:--:|--:|
36
+
37
+ |6|3年|X|
38
+
39
+ |7|5年|X|
40
+
41
+ |8|6年|X|
42
+
43
+
44
+
45
+ また、商品の金額に応じて同じ保証でも値段が変わる場合や
46
+
47
+ 保証料金が商品の金額に左右されず一律となる場合もあるため、
48
+
49
+ 新たに以下のようなテーブルを追加しています。
50
+
51
+
52
+
53
+ 例)
54
+
55
+ dtb_warranty
56
+
57
+ |商品ID|規格カテゴリID|保証料金|保証料率(%)|
14
58
 
15
59
  |:--:|:--:|:--:|:--:|
16
60
 
17
- |1|name|status|[1年,2年,3年...]|
61
+ |1|6||5|
18
62
 
19
-
20
-
21
- 新規レコードに配列の要素として追加する値は、
22
-
23
- 新たに追加するテーブルの主キーとしたいです。
24
-
25
-
26
-
27
- 以下のURLなどを参考にしながら追加を行なっていたのですが、躓いてしまったので
28
-
29
- 詳しい方がいらっしゃれば諸々お伺いしたく。
30
-
31
- https://ecnomikata.com/column/8959/
32
-
33
-
34
-
35
- 現状:
36
-
37
- 商品登録画面(product.tpl)
38
-
39
- 登録情報確認画面(confirm.tpl)
40
-
41
- では正常に項目の追加が確認できております。
42
-
43
-
44
-
45
- 参考①
46
-
47
- ![イメージ説明](1a7e4024de25bab9b6527ad8324d8111.png)
48
-
49
-
50
-
51
- 参考②:5年及び7年を選択した場合
63
+ |1|7|1,500||
52
-
53
- ![5年及び7年を選択した場合](2b57e8dcdec392439a382cb35df22bbc.png)
54
-
55
-
56
-
57
- 上記の状態で[この内容で登録する]を押下した場合、画面上は
58
-
59
- 「登録が完了致しました。」と表示されるのですが
60
-
61
- phpmyadmin経由でMySQLの該当レコードを確認すると、「0」となっております。
62
-
63
-
64
-
65
- 改修したソースは以下となります。(...は略を表します)
66
-
67
-
68
-
69
- data/class/pages/admin/products/LC_Page_Admin_Products_Product.php
70
-
71
- ```PHP
72
-
73
-
74
-
75
- function lfInitFormParam(&$objFormParam, $arrPost) {
76
-
77
- ...
78
-
79
- $objFormParam->addParam('延長保証期間', 'warranty_period_id', STEXT_LEN, 'n', array('MAX_LENGTH_CHECK'));
80
-
81
- ...
82
-
83
- }
84
-
85
-
86
-
87
- function lfRegistProduct(&$objUpFile, &$objDownFile, $arrList) {
88
-
89
-
90
-
91
- $objQuery =& SC_Query_Ex::getSingletonInstance();
92
-
93
- $objDb = new SC_Helper_DB_Ex();
94
-
95
-
96
-
97
- // 配列の添字を定義
98
-
99
- $checkArray = array('name', 'status',
100
-
101
- ...
102
-
103
- 'sale_limit', 'deliv_date_id', 'maker_id', 'note',
104
-
105
- //追加項目(延長保証情報)
106
-
107
- 'warranty_period_id' );
108
-
109
- $arrList = SC_Utils_Ex::arrayDefineIndexes($arrList, $checkArray);
110
-
111
-
112
-
113
- // INSERTする値を作成する。
114
-
115
- ...
116
-
117
-
118
-
119
- // 追加項目(保証期間)
120
-
121
- $sqlval['warranty_period_id'] = $arrList['warranty_period_id'];
122
-
123
-
124
-
125
- $arrRet = $objUpFile->getDBFileList();
126
-
127
- $sqlval = array_merge($sqlval, $arrRet);
128
-
129
- ...
130
-
131
- }
132
64
 
133
65
 
134
66
 
135
67
 
136
68
 
137
- ```
69
+ 商品一覧ページ及び商品詳細ページでは、ラジオボタンにより延長保証の項目を表示し、
138
70
 
139
- 登録情報確認画面(confirm.tpl)からPOSTすると実際にDBへ登録する処理が走ると思うのですが、
140
-
141
- その際、EC-CUBE側は以下のうなエラーログが出力されておりました
71
+ ラベルとして保証料金を(場合によは計算して)表示したいと思っておりま
142
72
 
143
73
 
144
74
 
145
- 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
75
+ 上記を踏まえ、以下のようにテンプレート側を変更しました。
146
76
 
147
77
 
148
78
 
149
- 調べる限り、どうやら配列としてデータを渡すことができていないようなのですが、
79
+ ①list.tpl
150
80
 
81
+ ```smarty
82
+
83
+ <!--▼規格1-->
84
+
85
+ <h2>延長保証</h2>
86
+
87
+ <dt><!--{$tpl_class_name1[$id]|h}-->:</dt>
88
+
89
+ <dd>
90
+
91
+ <!--{foreach from=$arrProductClass item="kikaku"}-->
92
+
93
+ <!--{html_radios options=$kikaku.classcategory_id1 selected=$arrProduct.classcategory_id1}-->
94
+
95
+ <!--{if $arrErr.classcategory_id1 != ""}-->
96
+
97
+ <p class="attention">※ <!--{$tpl_class_name1[$id]}-->を入力して下さい。</p>
98
+
151
- どこをどのように修正したら良いのか分かりません。
99
+ <!--{/if}-->
100
+
101
+ <!--{/foreach}-->
102
+
103
+ </dd>
104
+
105
+ <!--▲規格1-->
106
+
107
+ ```
152
108
 
153
109
 
154
110
 
111
+ ②detail.tpl
112
+
113
+ ```smarty
114
+
115
+ <!--▼規格1-->
116
+
117
+ <h2>延長保証</h2>
118
+
119
+ <!--{foreach from=$arrProductsClass item="kikaku1" key="key"}-->
120
+
121
+ <label/><input type="radio" name="classcategory_id1" value="<!--{$kikaku1.classcategory_id1}-->" /><!--{$kikaku1.classcategory_name1}--></label>
122
+
123
+ <!--{$kikaku1.price02}-->円
124
+
125
+ <!--{/foreach}-->
126
+
127
+ <!--▲規格1-->
128
+
129
+ ```
130
+
131
+
132
+
133
+ しかし、下図のように現状ではラジオボタンが表示されない状態となっております。
134
+
135
+
136
+
137
+ ![イメージ説明](a47ffaf37b5e9560895b515934cf7b86.png)
138
+
139
+
140
+
141
+ 上記問題の解決にご協力いただけないでしょうか。
142
+
143
+
144
+
155
- ご教示よろしくお願いします。
145
+ よろしくお願いします。