2010-08-22 47 views

回答

22

另一种选择是使用您已拥有的产品的ID重新加载list.phtml中的产品对象。该代码读取的东西有点像:

$sku = Mage::getModel('catalog/product')->load($_product->getId())->getSku(); 

注意,$ _产品是你在你的收藏中得到什么已经,并注意getSku是区分大小写(因为都是Magento的属性的getter/setter方法)。

@Prattski的解决方案是可取的,因为你并不真正想要加载/操作对象,但听起来好像你的集合有点搞砸了。 SKU是表catalog_product_entity表中存在的核心字段之一,因此不常见,不会被加载。

+2

亲爱的未来读者们,如果在foreach循环中使用这个解决方案,它会对性能造成相当大的影响。 – mkutyba 2017-03-04 16:32:54

4

在检索集合时,可能不会将sku添加到属性列表中。我假设你正在讨论文件/template/catalog/product/list.phtml。如果是这样,那么你需要扩展相应的代码文件(/app/code/core/Mage/Catalog/Block/Product/List.php)。

我认为最好的方法是重载getLoadedProductCollection()方法:

public function getLoadedProductCollection() 
    { 
     return $this->_getProductCollection()->addAttributeToSelect('sku'); 
    } 

这可能不行,我一直无法对其进行测试,因为在我的商店的SKU和所有其他属性可以在list.phtml模板文件中访问。

+0

这可能是一个很好的解决方案,但我建议不要延长类,而是使用事件观察这个(也许'catalog_block_product_list_collection')。 – mkutyba 2017-03-04 16:29:08

40

我很惊讶,没有人给你最简单,最恰当的答案了:

转到您的管理员,目录>>属性>>管理属性。然后编辑'sku'属性。更改“用于产品清单”'否''是'。那么你将不得不从list.phtml产品对象访问它与->getSku()

+0

他们在那里展示。 getSku()只是不起作用。 – Himberjack 2010-08-26 06:15:38

+1

这完全是我的问题,谢谢。 – UltimateBrent 2013-04-04 19:13:52

+0

不错的想法,只是我需要它在结帐 – 2013-07-10 06:09:49

-1

我有同样的问题太多,但尝试$ _product [“SKU”] 它为我工作

-4

$ _product [“SKU”];足以获得产品sku。

0

试试这个:

<?php 
    $current_product = Mage::registry('current_product'); 
    if($current_product) { 
     $sku = $current_product->getSku(); 
     // output sku 
     echo $sku; 
    } 
?>