EC-CUBE EC-CUBEのカスタマイズ・制作会社 強いネットショップ構築します|EC-Orange

EC-Orange とは

EC-CUBE カスタマイズ

EC-CUBEインストール

EC-CUBE 環境構築ノウハウ

EC-CUBE 基本構成理解

ソースコード読解

EC-CUBE カスタマイズ:初歩

EC-CUBE カスタマイズ:基礎

EC-CUBE カスタマイズ:応用

EC-CUBE 機能拡張ノウハウ

EC-CUBE カスタマイズ    データベース書き換えで新属性を追加

    EC-CUBE カスタマイズ  >  EC-CUBE カスタマイズ:応用  >  商品属性追加

カスタマイズ:応用/商品属性追加

商品に新たな属性を追加するカスタマイズを紹介します。
例えば、アルコール商品に対して、
「未成年の飲酒は法律で禁止されています」
という表示をさせるためのチェックボックスを加える場合です。

若干データベースに手を入れる必要があります。

    システム開発でお悩みの方は、ネットショップ構築パッケージ EC-Orange にお問い合わせください


データベースへカラムの追加

商品情報を格納しているテーブルは、

dtb_products

テーブルです。

こちらに新たに追加したい項目を加えます。

今回はアルコール商品に対して、
未成年の飲酒は法律で禁止されています
という表示をさせるためのチェックボックスを加えます。

テンプレートファイルの編集

フロント表示側

data/Smarty/templates/default/detail.tpl

を編集します。

  • 100行目付近
  1. <h2><!--★商品名★--><!--{$arrProduct.name|escape}--></h2>
  2. <!--以下を追加-->
  3. <!--{if $arrProduct.alcohol_flg == 1}-->
  4.     <div>
  5.         <p class="price">未成年の飲酒は法律で禁止されています</p>
  6.     </div>
  7. <!--{/if}-->
  8. <!--ここまで-->
  9. <!--★価格★-->
  10. <div><!--{$smarty.const.SALE_PRICE_TITLE}--><span class="mini">(税込)</span>
  11.     <span class="price">
  12.         <!--{if $arrProduct.price02_min == $arrProduct.price02_max}-->
  13.             <!--{$arrProduct.price02_min|sfPreTax:$arrSiteInfo.tax:$arrSiteInfo.tax_rule|number_format}-->
  14.         <!--{else}-->
  15.             <!--{$arrProduct.price02_min|sfPreTax:$arrSiteInfo.tax:$arrSiteInfo.tax_rule|number_format}--><!--{$arrProduct.price02_max|sfPreTax:$arrSiteInfo.tax:$arrSiteInfo.tax_rule|number_format}-->
  16.         <!--{/if}--></span></div>

alcohol_flgの値が1の場合に、上記のメッセージを表示させます。

管理画面側

data/Smarty/templates/default/admin/products/product.tpl

を編集します。

  • 150行目付近
  1. <tr>
  2.     <td bgcolor="#f2f1ec" width="160" class="fs12n">商品コード<span class="red"> *</span></td>
  3.     <td bgcolor="#ffffff" width="557" class="fs10n">
  4.     <span class="red12"><!--{$arrErr.product_code}--></span>
  5.     <input type="text" name="product_code" value="<!--{$arrForm.product_code|escape}-->" maxlength="<!--{$smarty.const.STEXT_LEN}-->" style="<!--{if $arrErr.product_code != ""}-->background-color: <!--{$smarty.const.ERR_COLOR}--><!--{/if}-->" size="60" class="box60" /><span class="red"> (上限<!--{$smarty.const.STEXT_LEN}-->文字)</span></td>
  6. </tr>
  7. <!--以下を挿入-->
  8. <tr class="fs12n">
  9.     <td bgcolor="#f2f1ec" width="160">お酒フラグ</td>
  10.     <td bgcolor="#ffffff" width="557">
  11.          <label><input type="checkbox" name="alcohol_flg" value="1" <!--{if $arrForm.alcohol_flg == 1}-->checked="checked"<!--{/if}--> />お酒</label>
  12.     </td>
  13. </tr>
  14. <!--ここまで-->
  15. <tr class="fs12n">
  16.     <td bgcolor="#f2f1ec" width="160"><!--{$smarty.const.NORMAL_PRICE_TITLE}--></td>
  17.     <td bgcolor="#ffffff" width="557">
  18.     <span class="red12"><!--{$arrErr.price01}--></span>
  19.     <input type="text" name="price01" value="<!--{$arrForm.price01|escape}-->" size="6" class="box6" maxlength="<!--{$smarty.const.PRICE_LEN}-->" style="<!--{if $arrErr.price01 != ""}-->background-color: <!--{$smarty.const.ERR_COLOR}--><!--{/if}-->"/><span class="red10"> (半角数字で入力)</span></td>
  20. </tr>

「お酒フラグ」のチェックボックスを設置します。

ロジックファイルの編集

data/class/pages/admin/products/LC_Page_Admin_Products_Product.php

を編集します。

  • 390行目付近、lfRegistProductメソッドに以下を追記します。
  1. function lfRegistProduct($arrList) {
  2.     $objQuery = new SC_Query();
  3.     $objDb = new SC_Helper_DB_Ex();
  4.     $objQuery->begin();
  5.  
  6.     // 配列の添字を定義
  7.     $checkArray = array("name", "status", "product_flag","alcohol_flg"      //alcohol_flgを追加
  8.                         "main_list_comment", "main_comment", "point_rate",
  9.                         "deliv_fee", "comment1", "comment2", "comment3",
  10.                         "comment4", "comment5", "comment6", "main_list_comment",
  11.                         "sale_limit", "sale_unlimited", "deliv_date_id");
  12.     $arrList = SC_Utils_Ex::arrayDefineIndexes($arrList, $checkArray);
  13.  
  14.     // INSERTする値を作成する。
  15.     $sqlval['name'] = $arrList['name'];
  16.     $sqlval['status'] = $arrList['status'];
  17.     $sqlval['product_flag'] = $arrList['product_flag'];
  18.     $sqlval['main_list_comment'] = $arrList['main_list_comment'];
  19.     $sqlval['main_comment'] = $arrList['main_comment'];
  20.     $sqlval['point_rate'] = $arrList['point_rate'];
  21.     $sqlval['deliv_fee'] = $arrList['deliv_fee'];
  22.     $sqlval['comment1'] = $arrList['comment1'];
  23.     $sqlval['comment2'] = $arrList['comment2'];
  24.     $sqlval['comment3'] = $arrList['comment3'];
  25.     $sqlval['comment4'] = $arrList['comment4'];
  26.     $sqlval['comment5'] = $arrList['comment5'];
  27.     $sqlval['comment6'] = $arrList['comment6'];
  28.     $sqlval['main_list_comment'] = $arrList['main_list_comment'];
  29.     $sqlval['sale_limit'] = $arrList['sale_limit'];
  30.     $sqlval['sale_unlimited'] = $arrList['sale_unlimited'];
  31.     $sqlval['deliv_date_id'] = $arrList['deliv_date_id'];
  32.     $sqlval['update_date'] = "Now()";
  33.     $sqlval['creator_id'] = $_SESSION['member_id'];
  34.     $arrRet = $this->objUpFile->getDBFileList();
  35.     $sqlval = array_merge($sqlval, $arrRet);
  36.     $sqlval['alcohol_flg'] = $arrList['alcohol_flg'];     //追加

  • 500行目付近、lfConvertParamメソッドに以下を追加します。
  1. function lfConvertParam($array) {
  2.     /*
  3.      *  文字列の変換
  4.      *    K :  「半角(ハンカク)片仮名」を「全角片仮名」に変換
  5.      *    C :  「全角ひら仮名」を「全角かた仮名」に変換
  6.      *    V :  濁点付きの文字を一文字に変換。"K","H"と共に使用します
  7.      *    n :  「全角」数字を「半角(ハンカク)」に変換
  8.      */
  9.  
  10.     // スポット商品
  11.     $arrConvList['name'] = "KVa";
  12.     $arrConvList['main_list_comment'] = "KVa";
  13.     $arrConvList['main_comment'] = "KVa";
  14.     $arrConvList['price01'] = "n";
  15.     $arrConvList['price02'] = "n";
  16.     $arrConvList['stock'] = "n";
  17.     $arrConvList['sale_limit'] = "n";
  18.     $arrConvList['point_rate'] = "n";
  19.     $arrConvList['product_code'] = "KVna";
  20.     $arrConvList['alcohol_flg'] = "n";     //追加
  21.     $arrConvList['comment1'] = "a";
  22.     $arrConvList['deliv_fee'] = "n";

ビューの追加

最後に値を取り出すために、

vw_products_allclass_detail

  • カラム:alcohol_flg
  • データ型:smallint

を追加してください。

スクリーンショット