Magento:在类别列表页面显示层级价格

时间:2011-08-03 14:51:25

标签: magento

我正在尝试在类别列表页面(catalog / product / list.phtml)上显示所有层级价格,但只获得单个产品的基本价格。

print_r($_product->getTierPrice());

返回:

Array
(
    [0] => Array
        (
            [price] => 0.5000
            [website_price] => 0.5000
            [price_qty] => 1
            [cust_group] => 32000
        )

)

每种产品。在产品信息页面上,它没有问题。请指教。

版本。 1.5.0.1

更新

这是问题的解决方案,其灵感来自以下答案:

$resource = Mage::getSingleton('core/resource');
$query = 'SELECT * FROM ' . $resource->getTableName('catalog/product') . '_tier_price';
$_tier_prices = $resource->getConnection('core_read')->fetchAll($query);
var_dump($_tier_prices);

7 个答案:

答案 0 :(得分:6)

这是获得等级价格的另一种方法

Mage::getResourceModel('catalog/product_attribute_backend_tierprice')
            ->loadPriceData($product_id,Mage::app()->getWebsite()->getId());

响应是价格

的数组
[0] => Array
    (
        [price_id] => 7
        [website_id] => 0
        [all_groups] => 1
        [cust_group] => 0
        [price] => 32.0000
        [price_qty] => 6.0000
    )

[1] => Array
    (
        [price_id] => 8
        [website_id] => 0
        [all_groups] => 1
        [cust_group] => 0
        [price] => 31.0000
        [price_qty] => 12.0000
    )

答案 1 :(得分:5)

如果您正在寻找Magento方式:

 $attribute = $_product->getResource()->getAttribute('tier_price');

    if ($attribute) {
       $attribute->getBackend()->afterLoad($_product);
       $tierPrices = $_product->getTierPrice();
    }

来自/app/code/core/Mage/Catalog/Model/Product/Type/Price.php getTierPrice()

答案 2 :(得分:3)

已经有一段时间了,因为这是被问及/回答的,但我只需要这样做并找到更好的方法,以便不使用直接数据库访问。

如前所述,$ _product对象默认情况下不包含产品列表页面上的$ _tierPrices ...但是如果将tier_price值设置为null,它将从数据库中检索实际值并填充对象。因此,无论您需要等级价格,请添加:

$_product->setData('tier_price',null);
$_tierPrices = $this->getTierPrices($_product); 

这应确保在对象中填充层级价格,因此您可以在任何页面上使用它。

请记住,这仍然会产生与直接数据库访问相同的性能损失。

答案 3 :(得分:1)

Magento中的所有对象都可能在不同页面上以不同方式创建,并且其中包含不同的数据。起初看起来似乎不直观。碰巧将数据加载到Item页面上的$ _product对象中的db查询几乎包含了所有数据。但是出于优化目的,类别页面上使用的$ _product只有一些数据 - 如果我没记错的话,它甚至会从不同的数据库表中提取。例如,类别页面上的查询与catalogindex *表连接,以获取通常从常规eav表中检索的一些数据。

我没有任何细节可以提供给您,但您可以直接查看具有所有等级定价的catalog_product_entity_tier_price表进行查询。至少那是我的magento版本中的表名,不是1.5。副作用是由于额外的查询/查询,类别页面加载时间会更长。

答案 4 :(得分:1)

我已经尝试了上面的答案和其他一些在线工作,但没有一个工作,所以我把几个黑客放在一起,这就是你如何让它在任何地方工作。我甚至有一个定制的主页旋转木马就像这样拉动它。

<强> 1。首先,在循环外部顶部附近建立连接

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

<强> 2。获取客户ID

$wh_customer = Mage::getSingleton('customer/session')->getCustomer();
$wh_id = $wh_customer->getGroupId();

第3。接下来,我们进入您有价格回声的循环

注意:下面我使用2的硬编码因为批发默认为2。你可以建立自己的if / else&amp;查询

if($wh_id == 2){
//get id
$_eid = $_helper->productAttribute($_product, $_product->getId(), 'entity_id');
$wh_query = 'SELECT * FROM catalog_product_entity_group_price WHERE entity_id = '.$_eid.' LIMIT 1';
$wh_results = $wh_readConnection->fetchAll($wh_query);
//var_dump($wh_results);
/* var dump would look like this
array(1) { [0]=> 
    array(6) { 
    ["value_id"]=> string(1) "1" 
    ["entity_id"]=> string(1) "3" 
    ["all_groups"]=> string(1) "0" 
    ["customer_group_id"]=> string(1) "2" 
    ["value"]=> string(6) "9.5000" 
    ["website_id"]=> string(1) "0" 
    } 
}
*/
$wh_price = substr($wh_results[0]["value"], 0, -2); // this damn database gives us extra 00
echo '<div class="price-box"><span class="regular-price"><span class="price">$'.$wh_price.'</span></span></div>';
} else {
//not wholesale
echo $this->getPriceHtml($_product, true);
}
  

嗯,这就是我做到的。如果您需要任何帮助,请随时与我联系

答案 5 :(得分:1)

内部app / design / frontend / your_theme / default / template / catalog / product / list.phtml 在foreach循环中添加这个以用于网格和/或列表

<?php $this->setProduct(Mage::getModel('catalog/product')->setStoreId(Mage::app()->getStore()->getId())->load($_product->getId()))?>
<?php echo $this->getTierPriceHtml() ?> 

答案 6 :(得分:0)

转到“管理属性”并编辑要显示的属性。

也许这些产品没有出现在产品列表中,因为它们没有配置为这样做,因此,在编辑属性页面中,检查是否已激活:

用于商品详情