現状「規格1」「規格2」の2つまでしか使用できないですが、商品にそれ以上の項目を持たせたいときのTips
※「規格」のDBは使わずに、直接商品情報のDBにデータを追加します。
【出来ること】
- 商品詳細画面でセレクトボックスなどを利用して、ユーザーに情報を入力してもらう
- 追加項目に必須チェックをかける
- 入力した情報をカート画面で確認できる
- 入力した情報を注文確認画面で確認できる
- 入力した情報を注文確認メールに記載する
- 入力した情報を管理画面で確認できる
- 入力した情報を管理画面の通知メールに記載できる
- 管理画面の商品編集画面で、表示したい追加項目を選択できる
※追加項目を表示するか否かを判別するフラグ「add_flg」
※追加項目「add_field」
【商品詳細画面】
[eccube]/data/Smarty/templates/default/detail.tpl
([eccube]/html/user_data/packages/default/detail.tpl)
<!--{if $arrProduct.add_flg == 1}--> <dl> <dt> 追加項目 </dt> <dd> <input type="text" name="add_field" class="box54" value="<!--{$add_field}-->" style="<!--{$arrErr.add_field|sfGetErrorColor}-->" /> </dd> </dl> <!--{/if}-->
[eccube]/data/class/pages/products/LC_Page_Products_Detail.php
function process() { case 'cart': $this->add_field = false; if($this->arrCartProduct["add_flg"] == 1) { $this->add_field = true; } if(count($this->arrErr) == 0) { $add_field = $_POST['add_field']; if(!$this->add_field) { $add_field = '0'; } $objCartSess->addProduct(array($_POST['product_id'], $classcategory_id1, $classcategory_id2, $add_field), $this->objFormParam->getValue('quantity')); } } function lfInitParam() { $this->objFormParam->addParam("追加項目", "add_field", INT_LEN, "n", array("NUM_CHECK", "MAX_LENGTH_CHECK")); } function lfCheckError() { if($this->alcohol) { $objErr->doFunc(array("追加項目", "add_field"), array("EXIST_CHECK")); } }
[eccube]/data/class/db/dbfactory/SC_DB_DBFactory_MYSQL.php
viewToSubQuery関数内のSELECT文に以下を追加 dtb_products.add_flg, return vw_products_nonclassに以下を追加 T1.add_flg,
[eccube]/data/class/pages/shopping/LC_Page_Shopping_Confirm.php
process()関数内 $arrCart = $objCartSess->getCartList(); $max = count($arrCart); foreach($arrCart as $i => $row){ $this->arrProductsDetails[$i]['add_field'] = $arrCart[$i]['id'][3]; }
[eccube]/data/class/pages/shopping/LC_Page_Shopping_Complete.php
lfRegistOrderDetail関数内 // 存在する商品のみ表示する。 if($arrData != "") { $sqlval['add_field'] = $arrCart[$i]['id'][3]; array_splice($arrCart[$i]['id'],3); }
【管理画面】
[eccube]/data/Smarty/templates/default/admin/products/product.tpl
<!--フラグ設定--> <tr class="fs12n"> <td bgcolor="#f2f1ec" width="160">フラグ設定</td> <td bgcolor="#ffffff" width="557"> <label><input type="checkbox" name="add_flg" value="1" <!--{if $arrForm.add_flg == 1}-->checked="checked"<!--{/if}--> />追加項目</label> </td> </tr> <!--ここまで-->
[eccube]/data/Smarty/templates/default/admin/products/confirm.tpl
<tr> <td bgcolor="#f2f1ec" width="160" class="fs12n">フラグ設定</td> <td bgcolor="#ffffff" width="557" class="fs12n"> [追加項目]<!--{$arrDISP[$arrForm.add_flg]}--><br /> </td> </tr>
[eccube]/data/class/pages/admin/products/LC_Page_Admin_Products_Product.php
lfRegistProduct関数内 // 配列の添字を定義 $checkArray配列に"add_flg"を追加 // INSERTする値を作成する。 $sqlval['add_flg'] = $arrList['add_flg']; //追加 lfConvertParam関数内 // スポット商品 $arrConvList['add_flg'] = "n"; //追加
【注文完了メール】
[eccube]/data/Smarty/templates/default/mail_templates/order_mail.tpl
ご注文商品明細の下 <!--{section name=cnt loop=$arrOrderDetail}--> <!--{/section}--> の中に以下を追加 <!--{if $arrOrderDetail[cnt].add_field!="" }--> 追加項目: <!--{$arrOrderDetail[cnt].add_field}--> <!--{/if}-->
【DB】
dtb_products.add_flg 追加
dtb_order_detail.add_field追加
【カート】
[eccube]/data/Smarty/templates/default/cart/index.tpl
<!--{ if $arrProductsDetails[cnt].add_field!="" }--> 追加項目:<!--{$arrProductsDetails[cnt].add_field}--><br /> <!--{/if}-->
[eccube]/data/class/pages/cart/LC_Page_Cart.php
$this->arrProductsDetails[$i]['add_field'] = $arrCart[$i]['id'][3];
【受注】
/var/www/html/okurimono/data/Smarty/templates/default/shopping/confirm.tpl
<!--{ if $arrProductsDetails[cnt].add_field!="" }--> 追加項目:<!--{$arrProductsDetails[cnt].add_field}--><br /> <!--{/if}-->
[eccube]/data/Smarty/templates/default/admin/order/edit.tpl
<!--{if $arrForm.product_add_field.value[$key] !="" }--> [追加項目]<!--{$arrForm.product_add_field.value[$key]|escape}--><br /> <!--{/if}-->
[eccube]/data/class/pages/admin/order/LC_Page_Admin_Order_Edit.php
$this->objFormParam->addParam("追加項目", "product_add_field"); lfGetOrderDetail $col = "add_fieldas product_add_field
見づらい・・・。
いつか書き直すかもしれません;