3

我正在尝试在catalog/category/view.phtml中加载一个自定义类别来存档我使用的这个:

<?php
$_category = Mage::getModel('catalog/category')->load(47);
$_productCollection = $_category->getProductCollection();
if($_productCollection->count()) {
    foreach( $_productCollection as $_product ):
        echo $_product->getProductUrl();
        echo $this->getPriceHtml($_product, true);
        echo $this->htmlEscape($_product->getName());
    endforeach;
}
?>

例如,我可以加载 URL,现在我想加载自定义属性,例如颜色:

$_product->getResource()->getAttribute('color')->getFrontend()->getValue($_product)

此代码不起作用,我 100% 确定颜色属性设置为显示在类别列表中,并且此类别中的项目已填充此字段。我知道这一点,因为此代码适用于list.html

我做错了什么?我正在使用 1.7.0.2。

预期的结果是显示来自自定义类别的所有颜色属性

目录/类别/view.phtml

4

3 回答 3

3

我不敢相信我刚刚找到了答案。因为我们不在常规类别列表中,所以我们需要将自定义属性添加到集合中。

这是代码:

$_productCollection = $_category->getProductCollection()
->addAttributeToSelect('color');
于 2013-07-05T17:59:47.073 回答
2

如果“颜色”在平面表中,您应该能够

$_product->getColor();

如果此属性不在集合中,您可以通过使属性可过滤来将其添加到平面表中,将其添加到 PHP 集合调用中

$_productCollection = $_category->getProductCollection()
    ->addAttributeToSelect('color');

或者加载产品模型获取所有属性

$_product = Mage::getModel('catalog/product')->load($_product->getId());
echo $_product->getColor();
于 2013-07-05T22:23:04.233 回答
1
  1. 使该属性在列表/前端可见

  2. 运行重新索引

  3. foreach( $_productCollection as $_product ): echo $_product->getProductUrl();

在此代码中 var_dump $_product->getData(); 检查这是否var_dump会导致显示该特定属性值。

笔记:

$_product->getResource()->getAttribute('color')->getFrontend()->getValue($_product)

不是一种非常有效的调用方式。

于 2013-07-06T02:28:57.100 回答