[EC-CUBE] 2.13 商品詳細ページの項目追加(MySQL)

商品ページに項目を増やすプラグインが既にあるのですが、他にどうしても利用したいプラグインとコンフリクトしてしまいました。また、CSVで出力・登録もできないと先々問題になりそうなので、データベースをいじってカスタマイズするのは初めてでしたが、まだ製作中のサイトという事もあり自分でやってみることにしました。素人なので、各部の名前(テーブル・カラム・レコード)の呼び方が間違っているかもしれません。

【参考ページ】
デザインオフィス マジリのブログ:EC-CUBE 2.12系で商品情報の項目を追加する
ちびくうのめも:EC-CUBE 商品登録に項目を追加する
EC-Orange:カスタマイズ:応用/商品属性追加
ウップス!!なかわけ:EC-CUBE商品の登録項目内容の追加
EC-CUBE | 役立ち情報:EC-CUBE:商品項目追加 おまけ

今回、商品詳細ページに追加した項目
  • 注意書き(管理画面で入力したテキストを表示)
  • プレゼント包装 可(管理画面でチェックボックスにチェックすると「プレゼント包装 可」と表示)

 

データベースの「dtb_products」に「comment7」「pre_flg」という名前のカラム追加

  1. phpMyAdminにログイン
  2. データベース名を選択
  3. dtb_productsの行の「構造」をクリック
  4. 構造画面に移動したら画面を下までスクロール
  5. 「指定のカラムの後に」をチェックして、任意のカラムを選択(今回はcomment6の後に追加)
  6. 左の「×個のフィールドを追加する」に、任意の数を入力(今回は2)
  7. 「実行する」をクリック

 

空のフィールドが2行表示されるので、項目・種別・ヌルの項目を設定
  1. 追加したい項目名「comment7」を入力
  2. 種別を選択で(TEXT)を選択。
  3. ヌル(NULL)の項目を「null」を選択して設定
  4. 下の「保存する」をクリック

2行目「pre_flg」もすべて1行目と同じでOKでした。(種別も(TEXT)でOKでした。)

 

カスタマイズファイル
  • /data/class/pages/admin/products/LC_Page_Admin_Products_Product.php
  • /data/class/SC_Product.php
  • /data/Smarty/templates/admin/products/product.tpl
  • /data/Smarty/templates/admin/products/confirm.tpl
  • /data/Smarty/templates/default/products/detail.tpl

 

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

(1)358行目辺り「//項目追加 カスタマイズ」のコメント文以降が追加コード


[php highlight=”10″]
for ($cnt = 1; $cnt <= PRODUCTSUB_MAX; $cnt++) {
$objFormParam->addParam(‘詳細-サブタイトル’ . $cnt, ‘sub_title’ . $cnt, STEXT_LEN, ‘KVa’, array(‘SPTAB_CHECK’, ‘MAX_LENGTH_CHECK’));
$objFormParam->addParam(‘詳細-サブコメント’ . $cnt, ‘sub_comment’ . $cnt, LLTEXT_LEN, ‘KVa’, array(‘SPTAB_CHECK’, ‘MAX_LENGTH_CHECK’));
$objFormParam->addParam(‘save_sub_image’ . $cnt, ‘save_sub_image’ . $cnt, ”, ”, array());
$objFormParam->addParam(‘save_sub_large_image’ . $cnt, ‘save_sub_large_image’ . $cnt, ”, ”, array());
$objFormParam->addParam(‘temp_sub_image’ . $cnt, ‘temp_sub_image’ . $cnt, ”, ”, array());
$objFormParam->addParam(‘temp_sub_large_image’ . $cnt, ‘temp_sub_large_image’ . $cnt, ”, ”, array());
//項目追加 カスタマイズ
$objFormParam->addParam(‘注意書き’, ‘comment7’, STEXT_LEN, ‘KVa’, array(‘SPTAB_CHECK’, ‘MAX_LENGTH_CHECK’));
$objFormParam->addParam(‘プレゼント包装の可否’, ‘pre_flg’, STEXT_LEN, ‘n’, array(‘SPTAB_CHECK’, ‘MAX_LENGTH_CHECK’));
}
[/php]

プレゼント包装の可否の部分は、他の行を複製して利用ているので、この書き方は多分間違っています。
「kva」の部分を「n」に変更(必要かどうかは不明)。「array」の部分は空でOKかもしれませんが、とりあえずこのままでも大丈夫でした。

【文字列の変換】
K : 「半角(ハンカク)片仮名」を「全角片仮名」に変換
C : 「全角ひら仮名」を「全角かた仮名」に変換
V : 濁点付きの文字を一文字に変換。”K”,”H”と共に使用します
n : 「全角」数字を「半角(ハンカク)」に変換

 

(2)1000行目付近「// 配列の添字を定義」の部分に追加


「//項目追加 カスタマイズ」のコメント文の下が追加している部分
[php]
// 配列の添字を定義
$checkArray = array(‘name’, ‘status’,
‘main_list_comment’, ‘main_comment’,
‘deliv_fee’, ‘comment1’, ‘comment2’, ‘comment3’,
‘comment4’, ‘comment5’, ‘comment6’,
                 //項目追加 カスタマイズ
‘comment7’, ‘pre_flg’,
‘sale_limit’, ‘deliv_date_id’, ‘maker_id’, ‘note’);
$arrList = SC_Utils_Ex::arrayDefineIndexes($arrList, $checkArray);

[/php]

 

(3)1010行目付近「// INSERTする値を作成する。」の部分に追加


「//項目追加 カスタマイズ」のコメント文以降が追加コード
[php]
// INSERTする値を作成する。
$sqlval[‘name’] = $arrList[‘name’];
$sqlval[‘status’] = $arrList[‘status’];
$sqlval[‘main_list_comment’] = $arrList[‘main_list_comment’];
$sqlval[‘main_comment’] = $arrList[‘main_comment’];
$sqlval[‘comment1’] = $arrList[‘comment1’];
$sqlval[‘comment2’] = $arrList[‘comment2’];
$sqlval[‘comment3’] = $arrList[‘comment3’];
$sqlval[‘comment4’] = $arrList[‘comment4’];
$sqlval[‘comment5’] = $arrList[‘comment5’];
$sqlval[‘comment6’] = $arrList[‘comment6’];
//項目追加 カスタマイズ
$sqlval[‘comment7’] = $arrList[‘comment7’];
$sqlval[‘pre_flg’] = $arrList[‘pre_flg’];
[/php]

 

/data/class/SC_Product.php

625行目辺り「商品詳細の SQL を取得する」に追加

2.11以降(?)、vw_products_allclass_detailにビューを追加が不要になったようです。
代わりにSC_Product.php内に設定

[php]
,dtb_products.comment7
,dtb_products.pre_flg
[/php]

 

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

商品登録ページに入力欄を追加します。
どこでも良いと思いますが、詳細コメントの下に追加しました。

[php]
<tr>
<th>注意書き<span class="attention"> </span></th>
<td>
<span class="attention"><!–{$arrErr.comment7}–></span>
<input type="text" name="comment7" value="<!–{$arrForm.comment7|h}–>" maxlength="<!–{$smarty.const.STEXT_LEN}–>" style="<!–{if $arrErr.comment7 != ""}–>background-color: <!–{$smarty.const.ERR_COLOR}–>;<!–{/if}–>" size="60" class="box60" />
<span class="attention"> (上限<!–{$smarty.const.STEXT_LEN}–>文字)</span>
</td>
</tr>

<tr>
<th>プレゼント包装の可否<span class="attention"> </span></th>
<td>
<span class="attention"><!–{$arrErr.pre_flg}–></span>
<label><input type="checkbox" name="pre_flg" value="1" <!–{if $arrForm.pre_flg == 1}–>checked="checked"<!–{/if}–> />プレゼント包装 可</label>
</td>
</tr>
[/php]

 

/data/Smarty/templates/admin/products/confirm.tpl

確認ページにも追加します
[php]
<tr>
<th>注意書き</th>
<td><!–{$arrForm.comment7|h}–></td>
</tr>

<tr>
<th>プレゼント包装の可否</th>
<td>
<!–{if strlen($arrForm.pre_flg) >= 1}–><!–{$arrForm.pre_flg|h}–><!–{/if}–>
</td>
</tr>
[/php]

 

/data/Smarty/templates/default/products/detail.tpl

最後に、商品詳細ページに表示させるためのコードを書いて完了です
(デザイン管理 → ページ詳細設定 → 商品詳細ページ)

[php]
<!–★注意書き★–>
<!–{$arrProduct.comment7|h}–>

<!–★代引きの可否★–>
<!–{if $arrProduct.pre_flg == 1}–>プレゼント包装 可<!–{/if}–>
[/php]
※CSS省略

 

ここまで作業を終えたところで、商品登録のテストをしてみましたが・・・

慎重に進めてきたつもりだったのに、今セットしたコードの部分にデータが表示されてない。
データベースを確認したところ、ちゃんと登録されている。
四苦八苦した末、「トップページ表示を高速化するプラグイン」を中止したら何故か表示された。
原因は不明。

 

商品登録CSV(出力・登録)するためにデータベースに追加する

dtb_csvにレコードを2つ追加

  • phpMyAdminへのログイン
  • データベース名を選択
  • dtb_csvの行の「挿入」をクリック
  • 下記のように値を入れて「実行」する

 

下記は、「comment7」を登録した例です。

  1. no:(登録データの最大値を捜して+1した数字)157登録されていたので「158」と入力
  2. csv_id:1
  3. col:comment7
  4. disp_name:注意書き
  5. rank:(商品登録CSVデータの表示順)管理ページで確認すると「71」項目あるので「72」から登録
  6. update_date:カレンダーから今日の日付を選択

database20140115

 

「LC_Page_Admin_productd_UploadCSV.php」の修正

参考ページには「LC_Page_Admin_productd_UploadCSV.php」にも追加が必要とありますが、2.13.1では、カスタマイズ不要でした。

これで、思いどおりのカスタマイズ完成!パチパチパチ・・・

 

※作業の際は、必ずファイルをバックアップしてから行ってくださいね。