我在首页上有一个自定义块加载产品,用于加载四个具有自定义产品图片属性的最新产品:
$_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')
是这样做的方式,但什么也没有产生。我做错了什么?
谢谢!
滓
答案 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();
}