2012-08-27 11 views
7

Sto cercando di ottenere tutti i prodotti associati per un prodotto configurabile utilizzando l'API v2 di Magento SOAP. La chiamata catalogProductLink sembra vicina, ma non gestisce tipi configurabili. Non vedo altre chiamate che contengono il prodotto associato e informazioni sul tipo configurabile per un prodotto. In che modo gli altri hanno risolto questo problema?Come recuperare i prodotti associati per prodotto configurabile con Magento SOAP API2?

Sto usando Magento versione 1.6 e l'API SOAP V2 con Java.

+0

Per quanto ne so per v1.6 Magento comunitari non è così avere la maniglia per recuperare quello che volevi. È necessario creare l'API v2 personalizzata per questo caso. –

+0

Josua Marcel - per favore potresti elaborare? Se è possibile utilizzare un'API personalizzata, quale sarebbe il codice PHP? Ho provato un client API Java simile come sopra, con entrambi 'related' e 'grouped' entrambi restituiscono la lista vuota anche se posso vedere i prodotti nel client admin. – mikesalera

risposta

1

Ho esaminato più a fondo questa soluzione e ho capito che potrebbe essere necessario sostituire il modello API (Mage_Catalog_Model_Product_Api) per ottenere i risultati che stai cercando.

Nella funzione di elementi (intorno alla linea 90), si può fare qualcosa di simile:

foreach ($collection as $product) { 
    $childProductIds = Mage::getModel('catalog/product_type_configurable')->getChildrenIds($product->getId()); 
    $result[] = array(
     'product_id' => $product->getId(), 
     'sku'  => $product->getSku(), 
     'name'  => $product->getName(), 
     'set'  => $product->getAttributeSetId(), 
     'type'  => $product->getTypeId(), 
     'category_ids' => $product->getCategoryIds(), 
     'website_ids' => $product->getWebsiteIds(), 
     'children' => $childProductIds[0], 
    ); 
} 
+0

Hai provato questo? Funziona per te? – Muk

1
  • creare la cartella app/code/local/Mage/Catalogo/modello/prodotto/link
  • copia l'app/code/core/Mage/Catalog/Model/Product/Link/Api.php in questa cartella e modificala. (Ho fatto solo il cambiamento per il V1, ma sono abbastanza sicuro che sia così facile in V2)
  • sostituire il contenuto della funzione degli elementi() con il seguente

    if($type == "associated"){ 
        $product = $this->_initProduct($productId); 
        try 
        { 
         $result = Mage::getModel('catalog/product_type_configurable')->getUsedProducts(null,$product); 
        } 
        catch (Exception $e) 
        { 
         $this->_fault('data_invalid', Mage::helper('catalog')->__('The product is not configurable.')); 
        } 
    
    } 
    else 
    { 
        $typeId = $this->_getTypeId($type); 
    
        $product = $this->_initProduct($productId, $identifierType); 
    
        $link = $product->getLinkInstance() 
         ->setLinkTypeId($typeId); 
    
        $collection = $this->_initCollection($link, $product); 
    
        $result = array(); 
    
        foreach ($collection as $linkedProduct) { 
         $row = array(
          'product_id' => $linkedProduct->getId(), 
          'type'  => $linkedProduct->getTypeId(), 
          'set'  => $linkedProduct->getAttributeSetId(), 
          'sku'  => $linkedProduct->getSku() 
         ); 
    
         foreach ($link->getAttributes() as $attribute) { 
          $row[$attribute['code']] = $linkedProduct->getData($attribute['code']); 
         } 
    
         $result[] = $row; 
        } 
    } 
    return $result; 
    
  • allora si può chiamare l'API in questo modo:

    $ client-> call ($ sessionId, 'product_link.list', array ('associato', $ id_di_programma_configurabile));

In pratica il mio codice controlla il tipo fornito e se è "associato" restituisce i prodotti figlio. Sono abbastanza sicuro che ci sia un modo migliore per farlo, ma ho pensato che l'API Product Link fosse il posto più pertinente per farlo.

Divertiti!

(si prega di notare: questo codice non è mia, ho appena adattato e ho pensato che sarebbe stata una bella idea per aiutare voi ragazzi fuori)

Problemi correlati