2012-03-29 36 views
6

Tôi đang cố gắng đọc danh sách các sản phẩm từ Magento qua API SOAP (V2) và cố gắng thực hiện một số/bất kỳ loại phân trang nào.Danh sách sản phẩm API SOFA của Magento Phân trang

kịch bản đơn giản:

var filters = new filters(); 
var products = catalogProductList(out pe, Connection.Session, filters, null); 

này bị treo Magento với: "Allowed memory size of 1073741824 bytes exhausted (tried to allocate 72 bytes."

Tôi đã cố gắng thêm pagination bằng cách xác định hai bộ lọc phức tạp trên product_id:

filters.complex_filter = new complexFilter[] 
{ 
    new complexFilter() 
    { 
     key = "product_id", 
     value = new associativeEntity() 
     { 
      key = "gt", 
      value = "400" 
     } 
    }, 
    new complexFilter() 
    { 
     key = "product_id", 
     value = new associativeEntity() 
     { 
      key = "lt", 
      value = "1000" 
     } 
    } 
}; 

Tuy nhiên trong này kịch bản chỉ áp dụng bộ lọc thứ hai, bộ lọc đầu tiên bị bỏ qua.

Tôi đã nghĩ đến việc đọc cây danh mục và sau đó là các sản phẩm được gán nhưng có rất nhiều sản phẩm không được gán cho bất kỳ danh mục nào hoặc nhiều danh mục, vì vậy tôi sẽ bỏ lỡ chúng hoặc nhận chúng nhiều lần.

Có cách nào để đọc danh sách sản phẩm sử dụng một số loại phân trang để tôi không đọc danh sách đầy đủ cùng một lúc không? (Lưu ý: Yêu cầu để tăng bộ nhớ là không thực sự là một lựa chọn)

+0

Ngôn ngữ nào là phía máy khách của yêu cầu của bạn? Java? – Alex

+0

Bạn đã từng thực hiện bất kỳ tiến bộ nào về điều này chưa? – ehime

+0

Có cùng vấn đề với bạn. Bộ lọc "gt" bị bỏ qua vì một lý do nào đó –

Trả lời

1

tôi đã thực hiện thành công sau trong PHP:

$filters = new StdClass(); 
$filters->complexFilter = array(
    array('key' =>'sku', 'value' => array('lt'=>'03969999')), 
    array('key' => 'sku', 'value' => array('gt'=>'03969000')), 
); 

Mặc dù, theo

<complexType name="filters"><all><element name="filter" type="typens:associativeArray" minOccurs="0"/><element name="complex_filter" type="typens:complexFilterArray" minOccurs="0"/></all></complexType> 

Có lẽ nó cần phải là "$ filters-> complex_filter = array();"? Mã đầu tiên xuất hiện đã làm việc cho tôi.

0

Ugly như là địa ngục, nhưng làm việc cho tôi:

public catalogProductEntity[] GetProducts() 
{ 
    int storeId; 
    catalogProductEntity[] catalogEntity; 
    List<catalogProductEntity> res = new List<catalogProductEntity>(); 
    Client.catalogProductCurrentStore(out storeId, SessionId, null); 

    var filters = new filters(); 
    filters.complex_filter = new complexFilter[1]; 
    filters.complex_filter[0] = new complexFilter(); 
    complexFilter filter = filters.complex_filter[0]; 
    filter.key = "name"; 
    filter.value = new associativeEntity(); 
    associativeEntity assoc = filter.value; 
    assoc.key = "like"; 

    //A to Z. 
    for (char i = 'A'; i <= 'Z'; i++) 
    {   
     assoc.value = i + "%"; 
     Client.catalogProductList(out catalogEntity, SessionId, filters, null); 
     res.AddRange(catalogEntity);        
    } 

    //Starts with #. 
    assoc.value = "#%"; 
    Client.catalogProductList(out catalogEntity, SessionId, filters, null); 
    res.AddRange(catalogEntity); 

    //0 to 9 
    for (int i = 0; i <= 9; i++) 
    {    
     assoc.value = i + "%"; 
     Client.catalogProductList(out catalogEntity, SessionId, filters, null); 
     res.AddRange(catalogEntity);     
    } 

    return res.ToArray(); 
} 
1

Dường như câu trả lời bạn cần được mô tả tại https://stackoverflow.com/a/22874035/2741137

Rõ ràng, bạn có thể tận dụng PRODUCT_ID ở một trong hai điều kiện lọc để làm việc xung quanh giới hạn của Magento ngăn cản hai điều kiện lọc trên cùng một khóa.

2

Tôi đã đưa ra một giải pháp khá tốt cho việc này. Hy vọng điều này sẽ giúp một ai đó.

$in = array(); 
for ($i = ($page * $size) - $size; $i < ($page * $size); $i++) { 
    $in[] = $i + 1; 
} 
$complexFilter = array('complex_filter' => 
    array(
     array(
      'key' => 'product_id', 
      'value' => array(
       'key' => 'in', 
       'value' => join(",", $in) 
      ) 
     ) 
    ) 
); 
Các vấn đề liên quan