1

我的首页上有一个自定义块加载产品,它通过以下方式加载具有自定义产品图片属性的四种最新产品:

$_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')是这样做的方法,但什么也没产生。我究竟做错了什么?

谢谢!

特雷

4

2 回答 2

6

您似乎在另一个线程中提出了同样的问题,因此为了帮助可能正在寻找答案的其他人,我也会在这里回答:

我想这是某种 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:59:23.457 回答
-1

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

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

$label = $_product->getData('image_feature_front_right');
if (empty($label)) {
    $label = $_product->getName();
}
于 2012-05-07T21:53:53.430 回答