0

我的首页上有一个块,它使用名为 的自定义产品图像抓取两个最新产品image_feature_front_right

我使用此代码作为查询:

$_helper = $this->helper('catalog/output');
$_productCollection = Mage::getModel("catalog/product")->getCollection();
$_productCollection->addAttributeToSelect('*');
$_productCollection->addAttributeToFilter("image_feature_front_right", array("notnull" => 1));
$_productCollection->addAttributeToFilter("image_feature_front_right", array("neq" => 'no_selection'));
$_productCollection->addAttributeToSort('updated_at', 'DESC');
$_productCollection->setPageSize(2);

我能够得到:

  • 图片:echo $this->helper('catalog/image')->init($_product, 'image_feature_front_right')->directResize(230,315,4)
  • 产品网址:echo $_product->getProductUrl()
  • 产品名称:$this->stripTags($_product->getName(), null, true)

我唯一无法获得的是自定义图像标签。我试过echo $this->getImageLabel($_product, 'image_feature_front_right')了,但这似乎无济于事。

谁能指出我正确的方向?

谢谢!

特雷

4

1 回答 1

3

我想这是某种 magento 错误。问题似乎是 Magento 核心没有设置 custom_image_label 属性。而对于默认的内置图像 [image, small_image, thumbnail_image] 它确实设置了这些属性 - 因此您可以执行以下操作:

$_product->getData('small_image_label');

如果您查看Mage_Catalog_Block_Product_Abstract::getImageLabel()它,只需将“_label”附加到$mediaAttributeCode您作为第二个参数传入的那个并调用$_product->getData().

如果您打电话$_product->getData('media_gallery'); ,您会看到自定义图像标签可用。它只是嵌套在一个数组中。所以使用这个功能:

function getImageLabel($_product, $key) {
    $gallery = $_product->getData('media_gallery');
    $file = $_product->getData($key);
    if ($file && $gallery && array_key_exists('images', $gallery)) {    
        foreach ($gallery['images'] as $image) {
            if ($image['file'] == $file)
                return $image['label'];
        }
    }
    return '';
}

扩展 Magento 核心代码是谨慎的(理想情况下Mage_Catalog_Block_Product_Abstract,但我不认为 Magento 允许您覆盖抽象类),但如果您需要快速破解 - 只需将此函数粘贴到您的 phtml 文件中,然后调用:

<?php echo getImageLabel($_product, 'image_feature_front_right')?>
于 2012-09-08T00:56:20.447 回答