Magento - 在评论模块之外显示随机评论

时间:2011-06-06 09:29:46

标签: php magento

我正在使用Magento 1.5,并尝试在我的侧边栏中添加一个小方框,用于显示产品图片,产品名称,星级和评论部分的随机产品。

我设法让Magento在侧边栏中显示一个随机产品,遗憾的是我似乎找不到基于是否有评论来选择随机产品的方法,而且我也找不到加载方式的方法将摘要复习到我正在使用的侧边栏模板中。

我找到了以下一段示例代码,但它只是抛出了对非对象错误的旧调用。

<?php

$storeId    = Mage::app()->getStore()->getId();

$summaryData = Mage::getModel(‘review/review_summary’)
->setStoreId($storeId)
->load($_product->getId());

/* @var $summaryData Mage_Review_Model_Review_Summary */

/*

array(
['primary_id'] => 147
['entity_pk_value'] => 166
['entity_type'] => 1
['reviews_count'] => 1
['rating_summary'] => 80
['store_id'] => 1
)
*/

?>

如果有人有任何想法如何使这项工作,将不胜感激。

提前致谢!

3 个答案:

答案 0 :(得分:10)

您收到该错误的原因是您使用的引号。使用'代替。

为了响应您的修改,您可以继续使用以下内容加载5个随机产品进行审核:

$review = Mage::getModel('review/review');
$collection = $review->getProductCollection();
$collection
        ->addAttributeToSelect('*')
        ->getSelect()
                ->limit(5)
                ->order('rand()');
$review->appendSummary($collection);

foreach($collection as $product) {
        var_dump($product->debug());
}

显然现在你可以这样做:

$product->getRatingSummary()

提取评级数据等

当然,您需要创建一个块来将其放入(或者糟糕的方式 - &gt;只需将其放入某个模板中)。

玩得开心;)

第三次编辑以回答您的问题:

/* Getting summary title / body. */
$title = $product->getTitle();
$body  = $product->getDetail();

/* To get (what I assume is) 'star' rating. */
$ratingSummary = $product->getRatingSummary();
$starRating = $ratingSummary['rating_summary'];

答案 1 :(得分:2)

我宁愿选择评论并加载相关产品,而不是随意选择产品并显示评论。 这有两个影响: 1.您自动拥有一个有评论的产品。 2.评论较多的产品被展示的可能性增加。

但那只是我^^

答案 2 :(得分:1)

您可能正在寻找Mage_Review_Model_Review::getEntitySummary()

为简单起见,Magento已经提供了与评论交叉引用的产品集合。

$products = Mage::getResourceModel('review/review_product_collection');
$products->getSelect()->order(new Zend_Db_Expr('RAND()'));
$products->setPageSize(3);
foreach ($products as $product) {
    // Picks 3 random products with reviews.
    Mage::getSingleton('review/review')->getEntitySummary($product, $storeId);
    $summary = $product->getRatingSummary();
    // $summary->getRatingSummary() = percentage of average rating values
}