2013-02-26 8 views
5

Tôi cần lọc bộ sưu tập sản phẩm Magento theo tình trạng vô hiệu hóa. Magento dường như mặc định bỏ qua các sản phẩm bị vô hiệu hóa khi tải bộ sưu tập.Bộ sưu tập sản phẩm tải Magento bao gồm các sản phẩm bị vô hiệu hóa

Vì vậy, có hai phần câu hỏi của tôi:

1 - Làm thế nào tôi có thể tải một bộ sưu tập trong Magento chỉ chứa các sản phẩm khuyết tật? 2 - Tại sao Magento không tải các sản phẩm bị vô hiệu hóa trong bộ sưu tập để bắt đầu?

Tôi đang sử dụng mã tiêu chuẩn để tải bộ sưu tập:

$collction = Mage::getModel('catalog/product')->getCollection() 

này không bao giờ tải sản phẩm khuyết tật.

Trả lời

7

Nếu bạn sử dụng các sản phẩm kết cấu bằng phẳng, sau đó

$col = Mage::getModel('catalog/product')->getCollection(); 

sẽ sử dụng bảng phẳng (ví dụ. catalog_product_flat_1), và disabled sản phẩm không nằm trong bảng đó.

Thay đổi cấu hình Use Flat Catalog Product để "KHÔNG" và bạn sẽ có tất cả các sản phẩm trong bộ sưu tập: catalog-flat

Nó sẽ tải tất cả các sản phẩm theo cách này.

+0

này đã cho tôi nửa đường. Nó dừng lại bằng cách sử dụng bảng phẳng, nhưng nó vẫn tham gia vào bảng 'mage_catalog_category_product_index' thay vì' mage_catalog_category_product', vì vậy tôi vẫn không thể có được các sản phẩm bị vô hiệu hóa. –

+0

Tôi làm cho nó hoạt động bằng cách áp dụng '-> setStoreId (Mage_Core_Model_App :: ADMIN_STORE_ID)'. Đây sẽ là tất cả những gì bạn cần làm, nhưng trừ khi bạn tắt Sử dụng Sản phẩm Catalog Phẳng, Magento sẽ cố gắng sử dụng nó khi nó không được phép và ném một lỗi. Vì vậy, tôi đã phải sử dụng chúng cả hai cùng nhau –

-5

Điều này sẽ tải bộ sưu tập của bạn được lọc bởi các sản phẩm bị vô hiệu hóa.

$products = Mage::getModel('catalog/product')->getCollection() 
     ->setStoreId(Mage::app()->getStore()->getId()) 
     ->addAttributeToFilter('status', '0'); 
+4

Trước hết, tình trạng vô hiệu hóa là '2'. Thứ hai, các sản phẩm bị vô hiệu hóa không có trong bộ sưu tập để bắt đầu, vì vậy việc lọc không giúp ích gì. –

+0

Stauts sản phẩm bị vô hiệu hóa là "2" và không phải là '0' – Mohamed23gharbi

2

Nếu bạn không muốn thay đổi cấu hình của bạn trong văn phòng trở lại (để giữ cho màn trình diễn tốt), tôi thấy giải pháp này thay đổi giá trị chỉ trong khi yêu cầu của bạn được xử lý, bởi vì tôi muốn các sản phẩm khuyết tật chỉ cho một chức năng cụ thể:

Mage::app()->getStore()->setConfig('catalog/frontend/flat_catalog_product', 0); 

bạn phải thiết lập này trước khi lần đầu tiên bạn gọi:

Mage::getModel('catalog/product')->getCollection() 

tôi nhận thấy bạn không thể đặt nó trở lại 1 trong cùng một yêu cầu, chuyên nghiệp bably bởi vì các cửa hàng mô hình bộ sưu tập giữ lá cờ này trong bộ nhớ.

Bằng cách này, cấu hình trong cơ sở dữ liệu của tôi không bị thay đổi.

0

Với sản phẩm phẳng được kích hoạt, bạn nên sử dụng

$collection = Mage::getResourceModel('catalog/product_collection') 

Bạn sẽ có thể để lấy người khuyết tật và kích hoạt sản phẩm.

Xem câu trả lời này cho một lời giải thích tốt hơn: https://magento.stackexchange.com/a/40001/32179

0

Một khi bạn có được bộ sưu tập của bạn, bạn có thể tham gia bảng sử dụng -> joinTable ('cayaloginventory/stock_item', 'product_id = ENTITY_ID', array ('stock_status' = > 'is_in_stock'))

Điều này sẽ tải bảng mà bạn cần với các sản phẩm có trong kho, sau khi chỉ cần thêm -> addAttributeToFilter ('status', array ('eq' => 1)) ... this sẽ chỉ tải CÓ S .. ..nếu bạn muốn tải thay đổi trạng thái DISABLE đến 2

Để có được Collection Disabled của TẤT CẢ SẢN PHẨM

 $collection = Mage::getModel('catalog/product') 
        ->getCollection() 
        ->joinTable('cataloginventory/stock_item', 'product_id=entity_id', array("stock_status" => "is_in_stock"))   
        ->addAttributeToFilter('status', array('eq' => 2));