teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

1

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

2018/05/07 06:17

投稿

zvub1123
zvub1123

スコア230

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|名前|ステータス|延長保証(warranty_period_id)|
12
+ |商品ID|商品ID|名前|ステータス|規格カテゴリID1|
8
- |:--:|:--:|:--:|:--:|
13
+ |:--:|:--:|:--:|:--:|:--:|
9
- |1|name|status|[1年,2年,3年...]|
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
- 以下URLなどを参考がら追加を行なっていのですが躓いてしまったので
24
+ 保証料金が商品金額左右されず一律とる場合もある
15
- しい方がいらっしゃれば諸々お伺いしたく
25
+ 新たに以下のようなテーブルを追加ます
16
- https://ecnomikata.com/column/8959/
17
26
 
18
- 現状:
27
+ 例)
28
+ dtb_warranty
19
- 商品登録画面(product.tpl)
29
+ |商品ID|規格カテゴリID|保証料金|保証料率(%)|
20
- 登録情報確認画面(confirm.tpl)
30
+ |:--:|:--:|:--:|:--:|
31
+ |1|6||5|
21
- では正常に項目の追加が確認できております。
32
+ |1|7|1,500||
22
33
 
23
- 参考①
24
- ![イメージ説明](1a7e4024de25bab9b6527ad8324d8111.png)
25
34
 
26
- 参考②:5年及び7年選択た場合
35
+ 商品一覧ページ及び商品詳細ページでは、ラジオボタンにより延長保証の項目表示
27
- ![5年及び7年を選択場合](2b57e8dcdec392439a382cb35df22bbc.png)
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
- data/class/pages/admin/products/LC_Page_Admin_Products_Product.php
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
- ```PHP
65
+ ```
37
66
 
38
- function lfInitFormParam(&$objFormParam, $arrPost) {
67
+ しかし、下図のように現状ではラジオボタンが表示されない状態となっております。
39
- ...
40
- $objFormParam->addParam('延長保証期間', 'warranty_period_id', STEXT_LEN, 'n', array('MAX_LENGTH_CHECK'));
41
- ...
42
- }
43
68
 
44
- function lfRegistProduct(&$objUpFile, &$objDownFile, $arrList) {
69
+ ![イメージ説明](a47ffaf37b5e9560895b515934cf7b86.png)
45
70
 
46
- $objQuery =& SC_Query_Ex::getSingletonInstance();
47
- $objDb = new SC_Helper_DB_Ex();
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
+ よろしくお願いします。