在magento中检索产品自定义媒体图像标签

时间:2012-05-07 21:09:49

标签: image magento product

我在首页上有一个自定义块加载产品,用于加载四个具有自定义产品图片属性的最新产品:

$_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(4);

我要做的是抓住后端设置的image_feature_front_right标签,但是无法这样做。这是我在前端显示产品的代码:

<?php foreach($_productCollection as $_product) : ?>
    <div class="fll frontSale">
        <div class="productImageWrap">
            <img src="<?php echo $this->helper('catalog/image')->init($_product, 'image_feature_front_right')->directResize(230,315,4) ?>" />
        </div>
        <div class="salesItemInfo">
            <a href="<?php echo $this->getUrl($_product->getUrlPath()) ?>"><p class="caps"><?php echo $this->htmlEscape($_product->getName());?></p></a>
            <p class="nocaps"><?php echo $this->getImageLabel($_product, 'image_feature_front_right') ?></p>
        </div>
    </div>

我读到$this->getImageLabel($_product, 'image_feature_front_right')是这样做的方式,但什么也没有产生。我做错了什么?

谢谢!

2 个答案:

答案 0 :(得分:5)

似乎你在另一个帖子中问了同样的问题,所以为了帮助那些可能正在寻找答案的人,我也会在这里也是如此:

我想这是某种magento bug。问题似乎是Magento核心没有设置custom_image_label属性。而对于默认的内置图像[image,small_image,thumbnail_image],它确实设置了这些属性 - 所以你可以这样做:

$_product->getData('small_image_label');

如果您查看Mage_Catalog_Block_Product_Abstract::getImageLabel(),只需将“_label”附加到您作为第2个参数传入的$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')?>

答案 1 :(得分:-1)

您的自定义块需要从Mage_Catalog_Block_Product_Abstract继承才能访问该方法。

您也可以直接使用模板中方法的代码:

$label = $_product->getData('image_feature_front_right');
if (empty($label)) {
    $label = $_product->getName();
}