You can create a helper class and use it every time you need media gallery images to download for a collection of products:
class My_Package_Helper_Media extends Mage_Core_Helper_Abstract { public function addMediaGalleryAttributeToProductCollection( &$productCollection ) { $storeId = Mage::app()->getStore()->getId(); $ids = array(); foreach ( $productCollection as $product ) { $ids[] = $product->getEntityId(); } $resource = Mage::getSingleton( 'core/resource' ); $conn = Mage::getSingleton( 'core/resource' )->getConnection( 'catalog_read' ); $select = $conn->select() ->from( array( 'mg' => $resource->getTableName( 'catalog/product_attribute_media_gallery' ) ), array( 'mg.entity_id', 'mg.attribute_id', 'mg.value_id', 'file' => 'mg.value', 'mgv.label', 'mgv.position', 'mgv.disabled', 'label_default' => 'mgdv.label', 'position_default' => 'mgdv.position', 'disabled_default' => 'mgdv.disabled' ) ) ->joinLeft( array( 'mgv' => $resource->getTableName( 'catalog/product_attribute_media_gallery_value' ) ), '(mg.value_id=mgv.value_id AND mgv.store_id=' . $storeId . ')', array() ) ->joinLeft( array( 'mgdv' => $resource->getTableName( 'catalog/product_attribute_media_gallery_value' ) ), '(mg.value_id=mgdv.value_id AND mgdv.store_id=0)', array() ) ->where( 'entity_id IN(?)', $ids ); $mediaGalleryByProductId = array(); $stmt = $conn->query( $select ); while ( $gallery = $stmt->fetch() ) { $k = $gallery[ 'entity_id' ]; unset( $gallery[ 'entity_id' ] ); if ( !isset($mediaGalleryByProductId[$k]) ) { $mediaGalleryByProductId[$k] = array(); } $mediaGalleryByProductId[$k][] = $gallery; } unset( $stmt );
Sample Usage:
$coll = Mage::getResourceModel('catalog/product_collection') ->setStoreId( Mage::app()->getStore()->getId() ) ->addAttributeToFilter( 'sku', array( 'in' => array( 'AAA', 'BBB' ) ) ); Mage::helper('my_package/media')->addMediaGalleryAttributeToProductCollection( $coll );
source share