Labo

[EC-CUBE 2.11.2] 商品一覧ページに商品サブ画像を表示したい

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


ビジュアルが大事な商品なら、商品一覧ページにも商品サブ画像が並んでいると良いかもしれませんね。
以下のような感じで、商品一覧ページにも表示させてみました。
追記:2.11.3~2.11.4をお使いの方はこちらをご参照ください。

 

 

1.data/class_extends/SC_Product_Ex.php に以下の関数を追加

    function lists(&$objQuery, $arrVal = array()) {
        $col = <<< __EOS__
             product_id
            ,product_code_min
            ,product_code_max
            ,name
            ,comment1
            ,comment2
            ,comment3
            ,main_list_comment
            ,main_image
            ,main_list_image
            ,price01_min
            ,price01_max
            ,price02_min
            ,price02_max
            ,stock_min
            ,stock_max
            ,stock_unlimited_min
            ,stock_unlimited_max
            ,deliv_date_id
            ,status
            ,del_flg
            ,update_date
            ,sub_title1
            ,sub_image1
            ,sub_title2
            ,sub_image2
            ,sub_title3
            ,sub_image3
            ,sub_title4
            ,sub_image4
            ,sub_title5
            ,sub_image5
__EOS__;
        $res = $objQuery->select($col, $this->alldtlSQL($objQuery->where),
                                 "", $arrVal);
        return $res;
    }

拡張クラスファイルでlists()を再定義して、サブ画像関係の情報を取得するようにします。
拡張クラスファイルは使い慣れていない人も多いと思いますが、
継承元のクラス定義ファイル(この場合、data/class/SC_Product.php)の内容を上書きしたい時に使います。
コードは、class SC_Product_Ex extends SC_Product の { から } までの間に記述してください。

 

2.data/Smarty/templates/default/products/list.tpl に以下のコードを追加
  サンプルでは、205行目付近(コメントの下)に配置してみました。

<!--{* サブ画像 *}-->
<!--{section name=cnt loop=$smarty.const.PRODUCTSUB_MAX}-->
    <!--{assign var=key1 value="sub_title`$smarty.section.cnt.iteration`"}-->
    <!--{assign var=key2 value="sub_image`$smarty.section.cnt.iteration`"}-->
    <!--{if $arrProduct.$key2 != ''}-->
        <img src="<!--{$smarty.const.ROOT_URLPATH}-->resize_image.php?image=<!--{$arrProduct.$key2|h|nl2br}-->&amp;width=80&amp;height=80" alt="<!--{$arrProduct.$key1|h}-->" />
    <!--{/if}-->
<!--{/section}-->

サイズが調節しやすいように、resize_image.php で画像を呼び出しています。
width や height を変えてみてください。
テンプレートの構造は最低限しか書いていないので、いろいろアレンジしてみてくださいね。

[EC-CUBE 2.11.2] 商品一覧ページに商品サブ画像を表示したい への6件のコメント

  1. yasu より:

    はじめまして。
    実装してみたのですがシステムエラーになってしまいます。
    初心者なので何故エラーになるかわかりません。
    こちらのバージョンはEC-CUBE 2.11.4です。
    バージョン違いだから?。

  2. fukap より:

    システムエラーになった場合は、data/logs/site.log にエラーの原因が記述されている可能性があります。
    ちょうどエラーが発生した日時に、何らかのエラーメッセージが出ていませんか?

  3. yasu より:

    お返事ありがとうございます。
    下記がエラーメッセージなのでしょうか?

    FATAL Error(256) C:\xampp\htdocs\nugitate\data\class\SC_Query.php:876 https://localhost/nugitate/html/

    SERVER_ADDR: 127.0.0.1
    REMOTE_ADDR: 127.0.0.1
    USER_AGENT: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; Trident/5.0; SLCC1; .NET CLR 2.0.50727; .NET CLR 3.5.30729; OfficeLiveConnector.1.3; OfficeLivePatch.0.0; .NET CLR 3.0.30729; .NET4.0C)

    SQL: SELECT product_id ,product_code_min ,product_code_max ,name ,comment1 ,comment2 ,comment3 ,main_list_comment ,main_image ,main_list_image ,price01_min ,price01_max ,price02_min ,price02_max ,stock_min ,stock_max ,stock_unlimited_min ,stock_unlimited_max ,deliv_date_id ,status ,del_flg ,update_date ,sub_title1 ,sub_image1 ,sub_title2 ,sub_image2 ,sub_title3 ,sub_image3 ,sub_title4 ,sub_image4 ,sub_title5 ,sub_image5 FROM ( SELECT 0 ,dtb_products.product_id ,dtb_products.name ,dtb_products.maker_id ,dtb_products.status ,dtb_products.comment1 ,dtb_products.comment2 ,dtb_products.comment3 ,dtb_products.comment4 ,dtb_products.comment5 ,dtb_products.comment6 ,dtb_products.note ,dtb_products.main_list_comment ,dtb_products.main_list_image ,dtb_products.main_comment ,dtb_products.main_image ,dtb_products.main_large_image ,dtb_products.sub_title1 ,dtb_products.sub_comment1 ,dtb_products.sub_image1 ,dtb_products.sub_large_image1 ,dtb_products.sub_title2 ,dtb_products.sub_comment2 ,dtb_products.sub_image2 ,dtb_products.sub_large_image2 ,dtb_products.sub_title3 ,dtb_products.sub_comment3 ,dtb_products.sub_image3 ,dtb_products.sub_large_image3 ,dtb_products.sub_title4 ,dtb_products.sub_comment4 ,dtb_products.sub_image4 ,dtb_products.sub_large_image4 ,dtb_products.sub_title5 ,dtb_products.sub_comment5 ,dtb_products.sub_image5 ,dtb_products.sub_large_image5 ,dtb_products.sub_title6 ,dtb_products.sub_comment6 ,dtb_products.sub_image6 ,dtb_products.sub_large_image6 ,dtb_products.del_flg ,dtb_products.creator_id ,dtb_products.create_date ,dtb_products.update_date ,dtb_products.deliv_date_id ,T4.product_code_min ,T4.product_code_max ,T4.price01_min ,T4.price01_max ,T4.price02_min ,T4.price02_max ,T4.stock_min ,T4.stock_max ,T4.stock_unlimited_min ,T4.stock_unlimited_max ,T4.point_rate ,T4.deliv_fee ,T4.class_count ,dtb_maker.name AS maker_name FROM dtb_products JOIN ( SELECT product_id, MIN(product_code) AS product_code_min, MAX(product_code) AS product_code_max, MIN(price01) AS price01_min, MAX(price01) AS price01_max, MIN(price02) AS price02_min, MAX(price02) AS price02_max, MIN(stock) AS stock_min, MAX(stock) AS stock_max, MIN(stock_unlimited) AS stock_unlimited_min, MAX(stock_unlimited) AS stock_unlimited_max, MAX(point_rate) AS point_rate, MAX(deliv_fee) AS deliv_fee, COUNT(*) as class_count FROM dtb_products_class WHERE alldtl.product_id IN (?,?) AND alldtl.del_flg = 0 GROUP BY product_id ) AS T4 ON dtb_products.product_id = T4.product_id LEFT JOIN dtb_maker ON dtb_products.maker_id = dtb_maker.maker_id ) AS alldtl WHERE alldtl.product_id IN (?,?) AND alldtl.del_flg = 0

    MDB2 Error: no such field

    _doQuery: [Error message: Could not execute statement]
    [Last executed query: PREPARE mdb2_statement_mysql_19fac5ec38b69688eae5f497a17432228947f1866b FROM ‘SELECT product_id ,product_code_min ,product_code_max ,name ,comment1 ,comment2 ,comment3 ,main_list_comment ,main_image ,main_list_image ,price01_min ,price01_max ,price02_min ,price02_max ,stock_min ,stock_max ,stock_unlimited_min ,stock_unlimited_max ,deliv_date_id ,status ,del_flg ,update_date ,sub_title1 ,sub_image1 ,sub_title2 ,sub_image2 ,sub_title3 ,sub_image3 ,sub_title4 ,sub_image4 ,sub_title5 ,sub_image5 FROM ( SELECT 0 ,dtb_products.product_id ,dtb_products.name ,dtb_products.maker_id ,dtb_products.status ,dtb_products.comment1 ,dtb_products.comment2 ,dtb_products.comment3 ,dtb_products.comment4 ,dtb_products.comment5 ,dtb_products.comment6 ,dtb_products.note ,dtb_products.main_list_comment ,dtb_products.main_list_image ,dtb_products.main_comment ,dtb_products.main_image ,dtb_products.main_large_image ,dtb_products.sub_title1 ,dtb_products.sub_comment1 ,dtb_products.sub_image1 ,dtb_products.sub_large_image1 ,dtb_products.sub_title2 ,dtb_products.sub_comment2 ,dtb_products.sub_image2 ,dtb_products.sub_large_image2 ,dtb_products.sub_title3 ,dtb_products.sub_comment3 ,dtb_products.sub_image3 ,dtb_products.sub_large_image3 ,dtb_products.sub_title4 ,dtb_products.sub_comment4 ,dtb_products.sub_image4 ,dtb_products.sub_large_image4 ,dtb_products.sub_title5 ,dtb_products.sub_comment5 ,dtb_products.sub_image5 ,dtb_products.sub_large_image5 ,dtb_products.sub_title6 ,dtb_products.sub_comment6 ,dtb_products.sub_image6 ,dtb_products.sub_large_image6 ,dtb_products.del_flg ,dtb_products.creator_id ,dtb_products.create_date ,dtb_products.update_date ,dtb_products.deliv_date_id ,T4.product_code_min ,T4.product_code_max ,T4.price01_min ,T4.price01_max ,T4.price02_min ,T4.price02_max ,T4.stock_min ,T4.stock_max ,T4.stock_unlimited_min ,T4.stock_unlimited_max ,T4.point_rate ,T4.deliv_fee ,T4.class_count ,dtb_maker.name AS maker_name FROM dtb_products JOIN ( SELECT product_id, MIN(product_code) AS product_code_min, MAX(product_code) AS product_code_max, MIN(price01) AS price01_min, MAX(price01) AS price01_max, MIN(price02) AS price02_min, MAX(price02) AS price02_max, MIN(stock) AS stock_min, MAX(stock) AS stock_max, MIN(stock_unlimited) AS stock_unlimited_min, MAX(stock_unlimited) AS stock_unlimited_max, MAX(point_rate) AS point_rate, MAX(deliv_fee) AS deliv_fee, COUNT(*) as class_count FROM dtb_products_class WHERE alldtl.product_id IN (?,?) AND alldtl.del_flg = 0 GROUP BY product_id ) AS T4 ON dtb_products.product_id = T4.product_id LEFT JOIN dtb_maker ON dtb_products.maker_id = dtb_maker.maker_id ) AS alldtl WHERE alldtl.product_id IN (?,?) AND alldtl.del_flg = 0 ‘]
    [Native code: 1054]
    [Native message: Unknown column ‘alldtl.product_id’ in ‘where clause’]

  4. yasu より:

    申し訳ありません。
    見落としてました。

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

  5. ピンバック: [EC-CUBE 2.11.4] 商品一覧ページに商品サブ画像を表示したい | NAKWEB × EC-CUBE

  6. fukap より:

    調べてみました。
    2.11.3以降でr21256が適用され、SC_Product#lists の仕様が変わってしまったためのようですね。
    http://svn.ec-cube.net/open_trac/changeset/21256

    2.11.3~2.11.4用コードを書き直しましたので、以下の記事をご参照ください。
    https://ec-cube.nakweb.com/blog/870.html

コメントを残す

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

* Copy This Password *

* Type Or Paste Password Here *

*

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