Php Magento->;getSku()或getData(’;sku’;)返回空字符串
我有Magento 1.3.2,我有一个奇怪的问题: 当我在Php Magento->;getSku()或getData(’;sku’;)返回空字符串,php,magento,Php,Magento,我有Magento 1.3.2,我有一个奇怪的问题: 当我在list.phtml中,并且我尝试使用getSku()或getData('SKU')获取SKU时,我会得到空字符串getName()确实有效。但是,当我在其他页面上这样做时,效果很好 Ivar\u dump-ed它,不显示SKU 什么原因会导致这种情况?检索集合时,可能sku未添加到属性列表中。我假设您谈论的是文件/template/catalog/product/list.phtml。如果是这样,那么您需要扩展相应的代码文件(/app
list.phtml
中,并且我尝试使用getSku()
或getData('SKU')
获取SKU时,我会得到空字符串getName()
确实有效。但是,当我在其他页面上这样做时,效果很好
Ivar\u dump
-ed它,不显示SKU
什么原因会导致这种情况?检索集合时,可能sku未添加到属性列表中。我假设您谈论的是文件/template/catalog/product/list.phtml。如果是这样,那么您需要扩展相应的代码文件(/app/code/core/Mage/Catalog/Block/Product/List.php) 我认为最好的办法是将getLoadedProductCollection()方法重载为:
public function getLoadedProductCollection()
{
return $this->_getProductCollection()->addAttributeToSelect('sku');
}
这可能不起作用,我无法测试它,因为在我的商店中,可以在list.phtml模板文件中访问sku和所有其他属性。另一个选项是使用您已有的产品ID在list.phtml中重新加载产品对象。代码读起来有点像:
$sku = Mage::getModel('catalog/product')->load($_product->getId())->getSku();
请注意,$\u产品是您在集合中已经得到的,并且请注意getSku是区分大小写的(所有Magento属性getter/setter也是如此)
@Prattski的解决方案更可取,因为您不想在加载/操作对象时弄乱,但听起来好像您的集合有点混乱。SKU是基本
目录\产品\实体
表中存在的核心字段之一,因此不加载是不寻常的 我很惊讶还没有人给你最简单、最恰当的答案:
转到管理员,目录>>属性>>管理属性。然后编辑“sku”属性。将“用于产品列表”从“否”更改为“是”。然后,您可以使用
->getSku()从列表中的product对象访问它。phtml
我也有同样的问题,但尝试了$\u product['sku']
它适用于我$\u产品[“sku”];足够获取产品sku。请尝试以下操作:
<?php
$current_product = Mage::registry('current_product');
if($current_product) {
$sku = $current_product->getSku();
// output sku
echo $sku;
}
?>
好主意,只是我在Checkout中需要它。很棒的解决方案,很多时候,Magento忽略了最简单的方法。谢谢谢谢。这应该是公认的解决方案,公认的解决方案会导致过载和性能问题。这可能是一个很好的解决方案,但我建议不要扩展类,而是为此使用事件观察程序(可能是目录\块\产品\列表\集合
)。亲爱的未来读者,如果在foreach循环over集合中使用此解决方案,则会对性能产生相当大的影响。