質問: 前提: EC-Cube 2.12.6 にて商品に延長保証の項目を追加しております。 (PHP: 5.3.3, MySQL:5.1.73) 追加する項目(延長保証)については商品規格の一つとして扱いたいと考えております。 それに伴い、商品一覧ページ(list.tpl)および商品詳細ページ(detail.tpl)にて ラジオボタンを表示し、「選択可能な延長保証年数」を確認できるようにしたいです。 例) dtb_product_class | 商品ID | 商品ID | 名前 | ステータス | 規格カテゴリID1 | | --- | --- | --- | --- | --- | | 1 | 1 | name | status | X | dtb_classcategory | 規格カテゴリID | 規格名 | 規格ID | | --- | --- | --- | | 6 | 3年 | X | | 7 | 5年 | X | | 8 | 6年 | X | また、商品の金額に応じて同じ保証でも値段が変わる場合や 保証料金が商品の金額に左右されず一律となる場合もあるため、 新たに以下のようなテーブルを追加しています。 例) dtb_warranty | 商品ID | 規格カテゴリID | 保証料金 | 保証料率(%) | | --- | --- | --- | --- | | 1 | 6 | | 5 | | 1 | 7 | 1,500 | | 商品一覧ページ及び商品詳細ページでは、ラジオボタンにより延長保証の項目を表示し、 ラベルとして保証料金を(場合によっては計算して)表示したいと思っております。 上記を踏まえ、以下のようにテンプレート側を変更しました。 1list.tpl ``` 延長保証 : ※ を入力して下さい。 ``` 2detail.tpl ``` 延長保証 円 ``` しかし、下図のように現状ではラジオボタンが表示されない状態となっております。 ![イメージ説明](https://teratail.storage.googleapis.com/uploads/contributed_images/a47ffaf37b5e9560895b515934cf7b86.png) 上記問題の解決にご協力いただけないでしょうか。 よろしくお願いします。
回答: 商品一覧画面(list.tpl)には延長保証の情報は表示せず、商品詳細画面(detail.tpl)にのみ表示させる方法で対応しました。 具体的には、商品企画の有無の判定の直前に下のソースを追加した形になります。 ``` 延長保証 : 円 ``` ロジック側から渡ってくる $arrProductWarranty は { "延長保証プラン名":"延長保証料金(商品の購入金額に基づいて動的に変更)" } のKey, Valueを持ったペアの配列になっており、カート用のテーブル(dtb_order_detail)などにも カラムを追加する必要があったため、商品企画としては扱わず、独立した情報となっています。 以下は例です。 プラン名マスタ | id | name | | --- | --- | | 1 | 3年 | | 2 | 5年 | | 3 | 7年 | 保証プランテーブル(商品ごとに、どの保証プランを持つか) | 商品ID | プラン1 | プラン2 | | --- | --- | --- | | 123 | 0 | 1 | ※0=プランなし、1=プランあり 保証率テーブル | プランID | 商品カテゴリID | 保証料率 | | --- | --- | --- | | 1 | 7 | 5(%) | | 2 | 12 | 5 | | 3 | 23 | 8 | 保証料計算用の金額算出テーブル | ID | min_price | max_price | | --- | --- | --- | | 1 | 4,000 | 40,000 | | 2 | 40,001 | 60,000 | | 3 | 60,001 | 80,000 | | 4 | 80,001 | 100,000 | | 5 | 100,001 | 120,000 | 計算式 1商品購入金額から、(min_price ≦ 税込価格 ≧ max_price) となる行の max_price を取得 2mx_price * 保証料率 = 保証額 とする 3購入金額+保証額=合計金額