バージョン選択

フォーラム

メニュー

オンライン状況

47 人のユーザが現在オンラインです。 (40 人のユーザが フォーラム を参照しています。)
登録ユーザ: 0
ゲスト: 47
もっと...

サイト内検索

質問 > フロント機能 > 商品一覧ページにレビュー数を表示とリンク

フロント機能

新規スレッドを追加する

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
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直前に

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>

といった感じで追加すればよいのではないでしょうか。

※この例だと、ループで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という値を使っていましたが、
これは、

<!--{assign var=id value=$arrProduct.product_id}-->

以降に追加した場合のみ有効です。


----------------

metan
投稿日時: 2014/5/9 18:01
対応状況: −−−
一人前
登録日: 2013/3/4
居住地:
投稿: 112
Re: 商品一覧ページにレビュー数を表示とリンク
お手数おかけしております。

プログラムの記述位置に問題ないとのことで安心致しました。

テンプレート側ですが。確認致しましたところ、

<!--{assign var=id value=$arrProduct.product_id}-->

以降に追加しておりました。

もう少し試してみます。
(1) 2 »
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ


 



ログイン


EC-CUBE公式 Amazon Payプラグイン

統計情報

総メンバー数は88,885名です
総投稿数は110,000件です

投稿数ランキング

1
seasoft
7367
2
468
3217
3
AMUAMU
2712
4
nanasess
2313
5
umebius
2085
6
yuh
1819
7
h_tanaka
1646
8
red
1570
9
mcontact
1295
10
tsuji
958
11
fukap
907
12
shutta
835
13
tao_s
799
14 ramrun 789
15 karin 689
16 sumida 641
17
homan
633
18 DELIGHT 572
19
patapata
502
20
flealog
485


ネットショップの壺

EC-CUBEインテグレートパートナー

Copyright© EC-CUBE CO.,LTD. All Rights Reserved.