質問 > フロント機能 > 商品一覧ページにレビュー数を表示とリンク |
フロント機能
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | 下へ |
投稿者 | スレッド |
---|---|
metan |
投稿日時: 2014/4/30 21:14
対応状況: −−−
|
一人前 登録日: 2013/3/4 居住地: 投稿: 112 |
商品一覧ページにレビュー数を表示とリンク いつもお世話になっております。
この度、商品一覧ページに商品のレビュー数を表示したく http://xoops.ec-cube.net/modules/newbb/viewtopic.php?topic_id=13126&forum=10&post_id=60205#forumpost60205 を参考に行っていたのですが、システムエラーになってしまい、四苦八苦しております。 商品一覧ページに下記の文言をレビューがある商品にだけ表示して商品ページにリンクしたいと思っております。 この商品の口コミ:{レビュー数}件 ← 該当の商品ページにリンク どなたかご教授頂けませんでしょうか? よろしくお願い致します。 EC-CUBEバージョン 2.12.2 PHPバージョン PHP 5.3.3 DBバージョン MySQL 5.0.95 |
metan |
投稿日時: 2014/5/3 11:36
対応状況: −−−
|
一人前 登録日: 2013/3/4 居住地: 投稿: 112 |
Re: 商品一覧ページにレビュー数を表示とリンク 追記です。
data/class/pages/products/LC_Page_Products_List.php 下記コードを追加して function lfGetReviewData() { //レビューの件数取得 $objQuery =& SC_Query_Ex::getSingletonInstance(); $linemax[$product_id] = $objQuery->count("dtb_review", "del_flg = 0 AND status = 1 AND product_id = ?", array($product_id)); $this->tpl_linemax = $linemax; //商品ごとのレビュー情報を取得する $col = "t1.create_date, t1.reviewer_url, t1.reviewer_name, t1.recommend_level, t1.title, t1.comment, t2.product_id, t2.name, t2.main_list_image"; $from = "dtb_review as t1 left join dtb_products as t2 using (product_id)"; $where = "t1.del_flg = 0 AND t1.status = 1 AND product_id = ? ORDER BY t1.create_date DESC"; $arrval[] = $product_id; $this->arrReview = $objQuery->select($col, $from, $where, $arrval); } data/Smarty/templates/XXX/products/list.tpl に下記のコードを追加 <!--{$tpl_linemax[$id]}--> したのですが、うまく表示されませんでした。 お分かりの方ご教授頂けませんでしょうか? よろしくお願いいたします。 EC-CUBEバージョン 2.12.2 PHPバージョン PHP 5.3.3 DBバージョン MySQL 5.0.95 |
tommy0714 |
投稿日時: 2014/5/8 11:11
対応状況: −−−
|
半人前 登録日: 2014/5/1 居住地: 投稿: 30 |
Re: 商品一覧ページにレビュー数を表示とリンク レビュー件数用のテンプレート変数を作るのが良いと思います。
例えば、 data/class/pages/products/LC_Page_Products_List.phpの lfGetProductsList関数のreturn直前に
のように追加しておいて、 data/Smarty/templates/XXX/products/list.tpl
といった感じで追加すればよいのではないでしょうか。 ※この例だと、ループでSQLを回しているので、商品数が増えるとSQLのパフォーマンスが悪くなります。その場合、SQLのチューニングが必要になるでしょう。(あくまで、表示方法の一例ということでお願いします)
|
metan |
投稿日時: 2014/5/9 12:01
対応状況: −−−
|
一人前 登録日: 2013/3/4 居住地: 投稿: 112 |
Re: 商品一覧ページにレビュー数を表示とリンク tommy0714様
ご返信頂きまして誠にありがとうございます。 先ほどご教授頂きましたコードで試してみたのですが、システムエラーになってしいます。 foreach($arrProductId as $product_id) { $arrProducts['productReviewCnt'][$product_id] = $objQuery->count("dtb_review", "del_flg = 0 AND status = 1 AND product_id = ?", array($product_id)); } 上記コードですが、 /* 商品一覧の表示 */ function lfGetProductsList の末尾付近に追加という事でよろしいのでしょうか? 御手数お掛けします。よろしくお願いいたします。 |
tommy0714 |
投稿日時: 2014/5/9 12:28
対応状況: −−−
|
半人前 登録日: 2014/5/1 居住地: 投稿: 30 |
Re: 商品一覧ページにレビュー数を表示とリンク システムエラーはどのような内容でしょうか?
提示したコードはアイデアベースですので、 お手持ちの環境に適合するかどうかは内容次第となります。
|
metan |
投稿日時: 2014/5/9 12:38
対応状況: −−−
|
一人前 登録日: 2013/3/4 居住地: 投稿: 112 |
Re: 商品一覧ページにレビュー数を表示とリンク ご返信ありがとうございます。
先ほど、下記の場所にコードを追加致しましてシステムエラーは出なかったのですが、 // 商品一覧データの取得 $arrSearchCondition = $this->lfGetSearchCondition($this->arrSearchData); $this->tpl_linemax = $this->lfGetProductAllNum($arrSearchCondition); $urlParam = "category_id={$this->arrSearchData['category_id']}&pageno=#page#"; // モバイルの場合に検索条件をURLの引数に追加 if (SC_Display_Ex::detectDevice() === DEVICE_TYPE_MOBILE) { $searchNameUrl = urlencode(mb_convert_encoding($this->arrSearchData['name'], 'SJIS-win', 'UTF-8')); $urlParam .= "&mode={$this->mode}&name={$searchNameUrl}&orderby={$this->orderby}"; } $this->objNavi = new SC_PageNavi_Ex($this->tpl_pageno, $this->tpl_linemax, $this->disp_number, 'fnNaviPage', NAVI_PMAX, $urlParam, SC_Display_Ex::detectDevice() !== DEVICE_TYPE_MOBILE); $this->arrProducts = $this->lfGetProductsList($arrSearchCondition, $this->disp_number, $this->objNavi->start_row, $this->tpl_linemax, $objProduct); foreach($arrProductId as $product_id) { $arrProducts['productReviewCnt'][$product_id] = $objQuery->count("dtb_review", "del_flg = 0 AND status = 1 AND product_id = ?", array($product_id)); } ←ここに追加 そして、 data/Smarty/templates/XXX/products/list.tpl に <a href="<!--{$smarty.const.P_DETAIL_URLPATH}--><!--{$arrProduct.product_id|u}-->"><!--{$arrProducts.productReviewCnt[$id]}-->件のレビュー</a> を追加し致したところ 一覧ページには 件のレビュー のみ表示されている状態です。 追加する場所が間違っているのでしょうか? |
tommy0714 |
投稿日時: 2014/5/9 13:33
対応状況: −−−
|
半人前 登録日: 2014/5/1 居住地: 投稿: 30 |
Re: 商品一覧ページにレビュー数を表示とリンク どこに追加してシステムエラーが起こったのか分かりませんが、
ひとまず、lfGetProductsList関数のreturn直前に追加してみてください。
|
metan |
投稿日時: 2014/5/9 16:58
対応状況: −−−
|
一人前 登録日: 2013/3/4 居住地: 投稿: 112 |
Re: 商品一覧ページにレビュー数を表示とリンク tommy0714様
ご返信ありがとうございます。 下記の箇所に追加し、data/Smarty/templates/XXX/products/list.tpl にも該当のコードを追加したのですが 件のレビュー としか表示されませんでした。 追加する場所が間違っておりますでしょうか? /* 商品一覧の表示 */ function lfGetProductsList($searchCondition, $disp_number, $startno, $linemax, &$objProduct) { $arrOrderVal = array(); $objQuery =& SC_Query_Ex::getSingletonInstance(); // 表示順序 switch ($this->orderby) { // 販売価格が安い順 case 'price': $objProduct->setProductsOrder('price02', 'dtb_products_class', 'ASC'); break; // 新着順 case 'date': $objProduct->setProductsOrder('create_date', 'dtb_products', 'DESC'); break; default: if (strlen($searchCondition['where_category']) >= 1) { $dtb_product_categories = '(SELECT * FROM dtb_product_categories WHERE '.$searchCondition['where_category'].')'; $arrOrderVal = $searchCondition['arrvalCategory']; } else { $dtb_product_categories = 'dtb_product_categories'; } $order = <<< __EOS__ ( SELECT T3.rank * 2147483648 + T2.rank FROM $dtb_product_categories T2 JOIN dtb_category T3 ON T2.category_id = T3.category_id WHERE T2.product_id = alldtl.product_id ORDER BY T3.rank DESC, T2.rank DESC LIMIT 1 ) DESC ,product_id DESC __EOS__; $objQuery->setOrder($order); break; } // 取得範囲の指定(開始行番号、行数のセット) $objQuery->setLimitOffset($disp_number, $startno); $objQuery->setWhere($searchCondition['where']); // 表示すべきIDとそのIDの並び順を一気に取得 $arrProductId = $objProduct->findProductIdsOrder($objQuery, array_merge($searchCondition['arrval'], $arrOrderVal)); $objQuery =& SC_Query_Ex::getSingletonInstance(); $arrProducts = $objProduct->getListByProductIds($objQuery, $arrProductId); // 規格を設定 $objProduct->setProductsClassByProductIds($arrProductId); $arrProducts['productStatus'] = $objProduct->getProductStatus($arrProductId); foreach($arrProductId as $product_id) { $arrProducts['productReviewCnt'][$product_id] = $objQuery->count("dtb_review", "del_flg = 0 AND status = 1 AND product_id = ?", array($product_id)); } return $arrProducts; } |
tommy0714 |
投稿日時: 2014/5/9 17:30
対応状況: −−−
|
半人前 登録日: 2014/5/1 居住地: 投稿: 30 |
Re: 商品一覧ページにレビュー数を表示とリンク プログラムは問題ないと思います。
テンプレート側の追加位置に問題があるのでは。 コード例では、$idという値を使っていましたが、 これは、
以降に追加した場合のみ有効です。
|
metan |
投稿日時: 2014/5/9 18:01
対応状況: −−−
|
一人前 登録日: 2013/3/4 居住地: 投稿: 112 |
Re: 商品一覧ページにレビュー数を表示とリンク お手数おかけしております。
プログラムの記述位置に問題ないとのことで安心致しました。 テンプレート側ですが。確認致しましたところ、 <!--{assign var=id value=$arrProduct.product_id}--> 以降に追加しておりました。 もう少し試してみます。 |
(1) 2 » |
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | トップ |