获取图片方法不重要,重要的是你要理解获取图片的整个过程,下面我就将获取图片的整个过程代码写一下:
$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;
}