2012-08-27 30 views
7

Tôi đang cố gắng lấy tất cả các sản phẩm được liên kết cho một sản phẩm có thể định cấu hình bằng cách sử dụng API SOAP của Magento v2. Cuộc gọi catalogProductLink trông gần nhưng không xử lý các loại có thể định cấu hình. Tôi không thấy bất kỳ cuộc gọi nào khác có chứa sản phẩm liên quan và thông tin loại có thể định cấu hình cho một sản phẩm. Những người khác đã giải quyết vấn đề này như thế nào?Làm cách nào để truy xuất sản phẩm được liên kết cho sản phẩm có thể định cấu hình với Magento SOAP API2?

Tôi đang sử dụng Magento phiên bản 1.6 và API SOAP V2 với Java.

+0

Theo như tôi biết cho v1.6 Magento Community nó không có xử lý để lấy lại những gì bạn muốn. Bạn phải tạo API tùy chỉnh v2 cho trường hợp này. –

+0

Josua Marcel - xin ông có thể xây dựng? Nếu có thể sử dụng API tùy chỉnh, mã PHP sẽ trông như thế nào? Tôi đã thử một ứng dụng Java API tương tự như trên, với cả 'liên quan' và 'được nhóm' cả hai đều trả về danh sách trống mặc dù tôi có thể thấy các sản phẩm trong ứng dụng khách quản trị. – mikesalera

Trả lời

1

Tôi đã xem xét kỹ hơn giải pháp này và nhận ra rằng bạn có thể cần ghi đè mô hình API (Mage_Catalog_Model_Product_Api) để đạt được kết quả bạn đang tìm kiếm.

Trong mục chức năng (khoảng dòng 90), bạn có thể làm một cái gì đó như thế này:

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

Bạn đã thử cái này chưa? Điều này có phù hợp với bạn không? – Muk

1
  • tạo ứng dụng thư mục/code/local/Mage/Catalogue/mẫu/Sản phẩm/Link
  • sao chép ứng dụng/mã/lõi/Mage/Danh mục/Mẫu/Sản phẩm/Liên kết/Api.php vào thư mục này và chỉnh sửa nó. (Tôi đã chỉ làm thay đổi cho V1 nhưng tôi khá chắc chắn nó cũng dễ dàng trong V2)
  • thay thế nội dung của các mục() chức năng như sau

    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; 
    
  • sau đó bạn có thể gọi API như sau:

    $ client-> call ($ sessionId, 'product_link.list', array ('associated', $ id_of_your_configurable_product));

Về cơ bản mã của tôi đang kiểm tra loại được cung cấp và nếu nó “liên kết”, nó sẽ trả về sản phẩm dành cho trẻ em. Tôi khá chắc chắn có cách làm tốt hơn nhưng tôi nghĩ rằng API liên kết sản phẩm là nơi phù hợp nhất để thực hiện điều đó.

Tận hưởng!

(xin lưu ý: mã này là không phải của tôi, tôi chỉ cần điều chỉnh nó và nghĩ rằng nó sẽ là một ý tưởng tốt đẹp để giúp bạn guys ra)

Các vấn đề liên quan