私自身の質問に答えるために、これが私がしたことでした。
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%
同じ問題で立ち往生している人を助けることを願っています!