ビジュアルが大事な商品なら、商品一覧ページにも商品サブ画像が並んでいると良いかもしれませんね。
以下のような感じで、商品一覧ページにも表示させてみました。
追記:2.11.3~2.11.4をお使いの方はこちらをご参照ください。
1.data/class_extends/SC_Product_Ex.php に以下の関数を追加
1 | function lists(& $objQuery , $arrVal = array ()) { |
2 | $col = <<< __EOS__ |
3 | product_id |
4 | ,product_code_min |
5 | ,product_code_max |
6 | ,name |
7 | ,comment1 |
8 | ,comment2 |
9 | ,comment3 |
10 | ,main_list_comment |
11 | ,main_image |
12 | ,main_list_image |
13 | ,price01_min |
14 | ,price01_max |
15 | ,price02_min |
16 | ,price02_max |
17 | ,stock_min |
18 | ,stock_max |
19 | ,stock_unlimited_min |
20 | ,stock_unlimited_max |
21 | ,deliv_date_id |
22 | ,status |
23 | ,del_flg |
24 | ,update_date |
25 | ,sub_title1 |
26 | ,sub_image1 |
27 | ,sub_title2 |
28 | ,sub_image2 |
29 | ,sub_title3 |
30 | ,sub_image3 |
31 | ,sub_title4 |
32 | ,sub_image4 |
33 | ,sub_title5 |
34 | ,sub_image5 |
35 | __EOS__; |
36 | $res = $objQuery ->select( $col , $this ->alldtlSQL( $objQuery ->where), |
37 | "" , $arrVal ); |
38 | return $res ; |
39 | } |
拡張クラスファイルでlists()を再定義して、サブ画像関係の情報を取得するようにします。
拡張クラスファイルは使い慣れていない人も多いと思いますが、
継承元のクラス定義ファイル(この場合、data/class/SC_Product.php)の内容を上書きしたい時に使います。
コードは、class SC_Product_Ex extends SC_Product の { から } までの間に記述してください。
2.data/Smarty/templates/default/products/list.tpl に以下のコードを追加
サンプルでは、205行目付近(コメントの下)に配置してみました。
1 | <!--{* サブ画像 *}--> |
2 | <!--{section name=cnt loop=$smarty.const.PRODUCTSUB_MAX}--> |
3 | <!--{assign var=key1 value="sub_title`$smarty.section.cnt.iteration`"}--> |
4 | <!--{assign var=key2 value="sub_image`$smarty.section.cnt.iteration`"}--> |
5 | <!--{if $arrProduct.$key2 != ''}--> |
6 | < img src=" <!--{$smarty.const.ROOT_URLPATH}--> resize_image.php?image= <!--{$arrProduct.$key2|h|nl2br}--> &width=80&height=80" alt=" <!--{$arrProduct.$key1|h}--> " /> |
7 | <!--{/if}--> |
8 | <!--{/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