ビジュアルが大事な商品なら、商品一覧ページにも商品サブ画像が並んでいると良いかもしれませんね。
以下のような感じで、商品一覧ページにも表示させてみました。
追記: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}-->&width=80&height=80" alt="<!--{$arrProduct.$key1|h}-->" /> <!--{/if}--> <!--{/section}-->
サイズが調節しやすいように、resize_image.php で画像を呼び出しています。
width や height を変えてみてください。
テンプレートの構造は最低限しか書いていないので、いろいろアレンジしてみてくださいね。
はじめまして。
実装してみたのですがシステムエラーになってしまいます。
初心者なので何故エラーになるかわかりません。
こちらのバージョンはEC-CUBE 2.11.4です。
バージョン違いだから?。
システムエラーになった場合は、data/logs/site.log にエラーの原因が記述されている可能性があります。
ちょうどエラーが発生した日時に、何らかのエラーメッセージが出ていませんか?
お返事ありがとうございます。
下記がエラーメッセージなのでしょうか?
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’]
申し訳ありません。
見落としてました。
コメント欄にコードを挿入したい場合は、[/php] を使ってください。
ピンバック: [EC-CUBE 2.11.4] 商品一覧ページに商品サブ画像を表示したい | NAKWEB × EC-CUBE
調べてみました。
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