Come includere le immagini dei prodotti nel risultato del metodo di elenco dei prodotti di Magento Api

Voglio ridurre al minimo il numero di chiamate Api per un'applicazione mobile che si collega al negozio basato su Magento per visualizzare i prodotti. in questo momento dobbiamo call il metodo catalog_product_attribute_media.list per each prodotto al fine di get gli URL delle immagini e rallenta davvero l'app.

Ho scoperto in questa risposta che è ansible estendere il risultato di una chiamata Api modificando determinati script. Ho provato ad usare lo stesso approccio per includere le immagini nell'elenco dei prodotti modificando app / code / core / Mage / Catalogue / Model / Category / Api.php line 440:

 $storeId = $this->_getStoreId($store); $collection = $category->setStoreId($storeId)->getProductCollection() ->addAttributeToSelect('brand') ->addAttributeToSelect('media_gallery_images'); ($storeId == 0)? $collection->addOrder('position', 'asc') : $collection->setOrder('position', 'asc');; $result = arrays(); foreach ($collection as $product) { $result[] = arrays( 'product_id' => $product->getId(), 'type' => $product->getTypeId(), 'set' => $product->getAttributeSetId(), 'sku' => $product->getSku(), 'position' => $product->getCatIndexPosition(), 'brand' => $product->getData('brand'), 'media' => $product->getMediaGalleryImages() ); } return $result; 

Ho anche modificato html / app / code / core / Mage / Catalog / etc / wsdl.xml per includere la nuova linea di properties; 'media': 255

  <complexType name="catalogAssignedProduct"> <all> <element name="product_id" type="xsd:int"/> <element name="type" type="xsd:string"/> <element name="set" type="xsd:int"/> <element name="sku" type="xsd:string"/> <element name="position" type="xsd:int"/> <element name="brand" type="xsd:string"/> <element name="media" type="typens:catalogProductImageEntityArray"/> </all> </complexType> 

ma quando chiamo catalog_category.assignedProducts restituisce sempre null per la properties; 'media', mi chiedo perché questo non funziona? è il tipo xml o qualcos'altro?

Grazie a questa risposta ho capito come includere le immagini nei risultati: ecco come ho modificato il metodo assegnatoProdotti in app / code / core / Mage / Catalog / Model / Category / Api.php e ha funzionato:

 public function assignedProducts($categoryId, $store = null) { $category = $this->_initCategory($categoryId); $storeId = $this->_getStoreId($store); $collection = $category->setStoreId($storeId)->getProductCollection() ->addAttributeToSelect(arrays('brand','image','price','description','short_description','name')); ($storeId == 0)? $collection->addOrder('position', 'asc') : $collection->setOrder('position', 'asc'); $result = arrays(); $type = 'image'; foreach ($collection as $product) { $result[] = arrays( 'product_id' => $product->getId(), 'type' => $product->getTypeId(), 'set' => $product->getAttributeSetId(), 'sku' => $product->getSku(), 'position' => $product->getCatIndexPosition(), 'brand' => $product->getData('brand'), 'price' => $product->getData('price'), 'name' => $product->getData('name'), 'description' => $product->getData('description'), 'short_description' => $product->getData('short_description'), 'image_url' => $product-> getImageUrl() ); } return $result; } 

Vai ad app / code / core / Mage / Catalogue / Model / Product / Api.php e sostituisci la function qui sotto

  public function items($filters = null, $store = null) { $collection = Mage::getModel('catalog/product')->getCollection() ->addStoreFilter($this->_getStoreId($store)) ->addAttributeToSelect('name'); /** @var $apiHelper Mage_Api_Helper_Data */ $apiHelper = Mage::helper('api'); $filters = $apiHelper->parseFilters($filters, $this->_filtersMap); try { foreach ($filters as $field => $value) { $collection->addFieldToFilter($field, $value); } } catch (Mage_Core_Exception $e) { $this->_fault('filters_invalid', $e->getMessage()); } $result = arrays(); foreach ($collection as $product) { $_product = Mage::getModel('catalog/product')->load($product->getId()); $_image = $_product->getImageUrl(); $result[] = arrays( 'product_id' => $product->getId(), 'sku' => $product->getSku(), 'name' => $product->getName(), 'set' => $product->getAttributeSetId(), 'type' => $product->getTypeId(), 'category_ids' => $product->getCategoryIds(), 'image_url' => $_image, 'website_ids' => $product->getWebsiteIds() ); } return $result; } 

Codice: http://chandreshrana.blogspot.in/2015/05/add-image-in-product-list-api-magento.html