我正在尝试在类别列表页面(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);
答案 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)
转到“管理属性”并编辑要显示的属性。
也许这些产品没有出现在产品列表中,因为它们没有配置为这样做,因此,在编辑属性页面中,检查是否已激活:
用于商品详情