2

これはシナリオです:

バックエンドに 5 つの評価を設定しました。それらは、価値、ルックス、使いやすさ、品質、移植性です。

ただし、各評価の要約投票 (平均) を取得する必要があります。例: 価値: 60% 見た目: 50% 使いやすさ: 100% 品質: 90% 携帯性: 70%

評価と投票率は、製品ページの製品に対するすべてのレビューの要約/平均です。Amazon.com も評価に同じスタイルを使用しています。

Magento はすぐに使用できるすべての投票の概要のみを提供しているように見えるため、理解できません。

誰か助けてくれませんか?私はこれでちょっと立ち往生しています。ありがとう!

4

6 に答える 6

1

私自身の質問に答えるために、これが私がしたことでした。

app\code\local\Mage\Catalog\Block\Product\View\RatingSummary.php

class Mage_Catalog_Block_Product_View_RatingSummary extends Mage_Core_Block_Template
{
    public function getRatingAverages() {
        $rating = array();

        $product_id = Mage::registry('product')->getId();

        $resource = Mage::getSingleton('core/resource');
        $cn= $resource->getConnection('core_read');

        $sql = "select rt.rating_code, 
                avg(vote.percent) as percent from ".$resource->getTableName('rating_option_vote')." as vote 
                inner join ".$resource->getTableName('rating')." as rt
                on(vote.rating_id=rt.rating_id)
                inner join ".$resource->getTableName('review')." as rr
                on(vote.entity_pk_value=rr.entity_pk_value)
                where rt.entity_id=1 and vote.entity_pk_value=$product_id and rr.status_id=1
                group by rt.rating_code";
        $rating = $cn->fetchAll($sql);

        return $rating;
    }
}

既存の Magento API を使用して個別に評価を取得する方法が見つかりません。他にも方法があるのか​​もしれませんが、私にはわかりません。そのため、データベースに対して純粋な SQL クエリを手動で実行する必要がありましたが、これは最善の方法ではありません。基本的に、上記のコードは次を返します。

rating_code => percent

Appearance => 80.6373%
Comfort => 83.2634%
Functionality => 79.7353%

したがって、私のテンプレートでは、同様のものを使用して結果を表示します。

$rating_averages = $this=>getRatingAverages();
foreach($rating_averages as $rating) {
   echo $rating['rating_code'] . " => " . $rating['percent'];
}

次を出力する必要があります。

Appearance => 80.6373%
Comfort => 83.2634%
Functionality => 79.7353%

同じ問題で立ち往生している人を助けることを願っています!

于 2011-08-16T05:16:08.080 に答える
0

次のコードを使用して評価コレクションを取得できます。

 $collection = Mage::getModel('rating/rating')
        ->getResourceCollection()
        ->addEntityFilter('product')
        ->setPositionOrder()
        ->setStoreFilter(Mage::app()->getStore()->getId())
        ->addRatingPerStoreName(Mage::app()->getStore()->getId())
        ->load();

$collection->addEntitySummaryToItem($_product->getId(), Mage::app()->getStore()->getId());

このコードは /app/code/core/Mage/Rating/Block/Entity/Detailed.php にあります。

次に、各評価を表示します。

<?php if(!empty($collection) && $collection->getSize()): ?>
<table class="ratings-table">
    <col width="1" />
    <col />
    <tbody>
        <?php foreach ($collection as $_rating): ?>
            <?php if($_rating->getSummary()): ?>
                <tr>
                    <th><?php echo $this->__($this->escapeHtml($_rating->getRatingCode())) ?></th>
                    <td>
                        <div class="rating-box">
                            <div class="rating" style="width:<?php echo ceil($_rating->getSummary()) ?>%;"></div>
                        </div>
                    </td>
                </tr>
            <?php endif; ?>
        <?php endforeach; ?>
    </tbody>
</table>
于 2014-09-15T09:10:13.030 に答える
0

その通りです。Magento は加重なしの単純な平均を使用して、全体的なレビューを計算します。これはお客様としても共感しやすいです(全体的には平均的な感じです)加重平均を使用する場合は、Magento が平均評価額の計算に使用するコードを変更する必要があります。

ある程度の努力を払ったら、そのプロセスに関する質問があればいつでも戻ってきてください。

それが役立つことを願っています!

ありがとう、ジョー

于 2011-08-10T12:58:37.070 に答える
0
I was looking for same thing.Here is my code.
<?php
$_reviewsCollection = Mage::getModel('review/review')->getCollection()
                ->addStoreFilter(Mage::app()->getStore()->getId())
                ->addStatusFilter('approved')
                ->addEntityFilter('product', $this->getProduct()->getId())
                ->setDateOrder()
                ->addRateVotes()
                ->load();
$_votesArray=array();
$_totalReview=0;
foreach ($_reviewsCollection->getItems() as $_review){   $_totalReview++;
$_votes = $_review->getRatingVotes(); 
    if (count($_votes)){
        foreach ($_votes as $_vote){
                $_votesArray[$_vote->getRatingCode()]=$_votesArray[$_vote->getRatingCode()]+$_vote->getPercent();
        }
    }
}
//print_r($_votesArray);    
?>

<ul>

<?php foreach ($_votesArray as $_key=>$_data){ ?>
                        <li><span><?php echo $_key ?>:</span>
                        <div class="rating-box">
                            <div class="rating" style="width:<?php echo $_data/$_totalReview ?>%"></div>
                        </div>
                        </li>
<?php } ?>  
</ul
于 2012-11-12T04:35:09.253 に答える