Labo

[EC-CUBE 2.11.2] 商品詳細ページに商品規格一覧を表示する

2011年10月15日 / 投稿者名:fukap


規格関連を調べる用があったので、ついでにやってみました。
こんな感じです。
例のごとく、配置場所やスタイルはご自分の好みに合わせて変えてください。

 

 

1.data/class/pages/products/LC_Page_Products_Detail.php の action() 内に以下のコードを挿入。
  $product_id 定義以降であればどこに配置しても良いですが、私は113行目付近(規格選択セレクトボックスの作成の後)に配置しました。

// 商品規格情報の取得
$this->arrProductsClassList = $this->lfGetProductsClass($product_id);

2.data/Smarty/templates/default/products/detail.tpl の任意の場所に以下のコードを挿入。(2011/11/27 に一部修正)

<!--{* 規格テーブル *}-->
<!--{if $arrProductsClassList|@count > 1}-->
<table style="width:auto;">
    <tr>
        <th>規格名</th>
        <th>価格</th>
    </tr>
    <!--{section name=i loop=$arrProductsClassList}-->
    <tr>
        <td><!--{$arrProductsClassList[i].classcategory_name1|h}-->
            <!--{if $arrProductsClassList[i].classcategory_name2 != ''}-->
                : <!--{$arrProductsClassList[i].classcategory_name2|h}-->
            <!--{/if}-->
        </td>
        <td>
            <!--{$arrProductsClassList[i].price02|sfCalcIncTax:$arrSiteInfo.tax:$arrSiteInfo.tax_rule|number_format}-->円
        </td>
    </tr>
    <!--{/section}-->
</table>
<!--{/if}-->

[EC-CUBE 2.11.2] 商品詳細ページに商品規格一覧を表示する への17件のコメント

  1. ken より:

    情報ありがとうございます!

    すみません、一つ確認したいのですが、
    LC_Page_Products_Detail.php
    のaction()の一番最後に、
    $this->arrProductsClassList = $this->lfGetProductsClass($product_id);
    を入力しました。

    data/Smarty/templates/default/products/detail.tpl
    も同様に行い、サーバーのプログラムを更新すると、任意の商品を選択後「カートへ」を行うと、商品詳細のままで遷移しません。
    LC_Page_Products_Detail.php
    を更新前に戻すと直るのですが、何か心当たりはありますか?

  2. fukap より:

    こんにちは。
    まだ上記カスタマイズを施したサイトが残っていたので見てみましたが、
    カートへ進めないという現象は確認できませんでした。

    コードを見ていただくとわかりますが、
    定義済みの関数 lfGetProductsClass を呼び出して、
    未使用の変数 $this->arrProductsClassList に代入しているだけなので、
    問題は発生しにくいと思うのですが。

    他のカスタマイズを実装されている場合や、
    $this->arrProductsClassList の定義場所によっては、
    問題が起こる可能性もあると思います。

    例えば、$this->arrProductsClassList の定義を、
    113行目付近(規格選択セレクトボックスの作成の後)に記述してみるとどうですか?
    それでもうまくいかない場合は、ちょっとわかりません。
    すいません。

    • ken より:

      fukap 様

      情報ありがとうございます(_ _)

      本日、原因が特定できて、無事に一覧を表示したまま「カート」に進めるようになりました!

      その原因は、現在ec-cube開発コミュニティーでも質問を流している「規格」を増やす際に、私が流れを把握するために記述した文法がどうも悪さをしていたようです。
      単純に > が抜けていたというだけなんですが・・・
      よく今まで動いていたなぁと思います。

      ご迷惑おかけしました。

  3. yasuji より:

    はじめまして!

    記事を参考にそのまま導入したものなのですが、規格の利用が規格1だけだった場合、その規格1の登録名だけが重複されるようです。

    上記の画面で言うと、抹茶:抹茶 980円 のような形になります。

    でちゃんと条件を与えれば出来ると思っていましたが、自分が疎いせいか、難しくてできませんでした・・・。

    お手数ですが、教えて頂けますとありがたいです!

    • yasuji より:

      すいません、コードを挿入したのですが、囲っていませんでした!
      ~でちゃんと条件を与えれば・・・の所に下のコードが入ります!

      <!--{if $arrProductsClassList[i].classcategory_name}-->
      
  4. fukap より:

    ご指摘ありがとうございます。
    仰る通り、規格1のみ設定した場合は重複して表示され、見づらくなっていますね。
    ちょっとdata/Smarty/templates/default/products/detail.tplのコードを変えてみましたので、
    適用してみてもらえますか?

  5. yasuji より:

    fukap様

    なりました!
    おかげですっきり致しました!

    ちょっとした修正でできたんですね、自分もこうのを事前に理解して、聞くだけではなく、修正コードまで提示できるように勉強いたします!

    ありがとうございました!

  6. fukap より:

    無事解決したようで良かったです。
    配列は中身を出力しながら試していくと、いろいろわかってきます。
    例えば、

    <pre>
    <!--{$arrProductsClassList|@var_dump}-->
    </pre>

    という感じでテンプレにコードを書くと出力されます。
    既にご存知かもしれませんが、ご参考まで。

  7. yasuji より:

    基礎的な事は知らないに等しかったので、こういう便利な知恵は助かります!

    今後も記事を見続けて勉強させていただこうと思っています!
    ありがとうございました!

  8. fukap より:

    2.11.4でも試してみましたが、問題なく表示されました。

  9. ピンバック: EC-CUBEで商品規格一覧表を表示する方法 | モンキーレンチ

  10. ピンバック: ECCUBEの小技:商品詳細ページに商品規格一覧を表示 | 戯れ問答

  11. しゅん より:

    いきなりですみませんが、質問させて下さい。

    この表は商品詳細ページのみにしか対応できないのでしょうか?
    可能であれば、商品一覧ページにも記載出来たらと思います。

    勝手を言って申し訳ありませんが、ご回答お待ちしております。

  12. fukap より:

    しゅんさん、こんにちは。
    商品一覧ページでもカートボタンは付いていますから、
    今回のようなテーブル表示は可能なはずです。
    ただ、商品一覧ページ用にコードは書き換える必要があるはずです。

  13. しゅん より:

    早々のお返事ありがとうございます。

    data/class/pages/products/LC_Page_Products_list.php
    のaction()内に入れるコードを書き換える必要があるということでしょうか?
    action()内にproduct_idが定義されていなかったので悩んでいるところです。

    list.tplは書き換えの必要はないのかなと思っているのですが…

  14. fukap より:

    本記事では、商品規格情報の取得のためのコードを、LC_Page_Products_Detail.php に挿入していますから、
    同様に、LC_Page_Products_List.php の action メソッド内も何らかのコード挿入が必要だと思います。
    ちょっと具体的なコード提供まではできませんので、ご了承ください。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

* Copy This Password *

* Type Or Paste Password Here *

*

コメント欄にコードを挿入したい場合は、[php][/php] を使ってください。