Magento获取商品图片的方法

获取图片方法不重要,重要的是你要理解获取图片的整个过程,下面我就将获取图片的整个过程代码写一下:

$product = Mage::getModel('catalog/product')->load($product_id);

//直接获取商品的主图片
$mainImageUrl = (string)Mage::helper('catalog/image')->init($product, 'image')->resize(600, 600);

//获取Configurable Product下的Simple Product图片
$images = $product->getMediaGalleryImages();
foreach ($images as $image) {
    $url =  (string) Mage::helper('catalog/image')->init($product, 'image', $image->getFile())->resize(600,600);
}

$product->getMediaGalleryImages();

/**
* Retrive media gallery images
*
* @return Varien_Data_Collection
*/
public function getMediaGalleryImages()
{
    if(!$this->hasData('media_gallery_images') && is_array($this->getMediaGallery('images'))) {
        $images = new Varien_Data_Collection();
        foreach ($this->getMediaGallery('images') as $image) {
            if ($image['disabled']) {
                continue;
            }
            $image['url'] = $this->getMediaConfig()->getMediaUrl($image['file']);
            $image['id'] = isset($image['value_id']) ? $image['value_id'] : null;
            $image['path'] = $this->getMediaConfig()->getMediaPath($image['file']);
            $images->addItem(new Varien_Object($image));
        }
        $this->setData('media_gallery_images', $images);
    }

    return $this->getData('media_gallery_images');
}

$this->getMediaConfig()

/**
* Retrive product media config
*
* @return Mage_Catalog_Model_Product_Media_Config
*/
public function getMediaConfig()
{
    return Mage::getSingleton('catalog/product_media_config');
}

getMediaUrl():

public function getMediaUrl($file)
{
    $file = $this->_prepareFileForUrl($file);

    if(substr($file, 0, 1) == '/') {
        return $this->getBaseMediaUrl() . $file;
    }

    return $this->getBaseMediaUrl() . '/' . $file;
}

getMediaPath():

public function getMediaPath($file)
{
    $file = $this->_prepareFileForPath($file);

    if(substr($file, 0, 1) == DS) {
        return $this->getBaseMediaPath() . DS . substr($file, 1);
    }

    return $this->getBaseMediaPath() . DS . $file;
}

而这个方法在核心代码中存在一个init核心方法:Mage_Catalog_Helper_Image.php
初始化helper类来得到图片储存路径:

public function init(Mage_Catalog_Model_Product $product, $attributeName, $imageFile=null)
{
    $this->_reset();
    $this->_setModel(Mage::getModel('catalog/product_image'));
    $this->_getModel()->setDestinationSubdir($attributeName);
    $this->setProduct($product);

    $this->setWatermark(
        Mage::getStoreConfig("design/watermark/{$this->_getModel()->getDestinationSubdir()}_image")
    );
    $this->setWatermarkImageOpacity(
        Mage::getStoreConfig("design/watermark/{$this->_getModel()->getDestinationSubdir()}_imageOpacity")
    );
    $this->setWatermarkPosition(
        Mage::getStoreConfig("design/watermark/{$this->_getModel()->getDestinationSubdir()}_position")
    );
    $this->setWatermarkSize(
        Mage::getStoreConfig("design/watermark/{$this->_getModel()->getDestinationSubdir()}_size")
    );

    if ($imageFile) {
        $this->setImageFile($imageFile);
    } else {
        // add for work original size
        $this->_getModel()->setBaseFile($this->getProduct()->getData($this->_getModel()->getDestinationSubdir()));
    }
    return $this;
}

调整图片宽高尺寸的方法resize:

public function resize($width, $height = null)
{
    $this->_getModel()->setWidth($width)->setHeight($height);
    $this->_scheduleResize = true;
    return $this;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值