現状「規格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

見づらい・・・。
いつか書き直すかもしれません;