2011-07-11 7 views
21

Tôi đang gặp một số vấn đề nghiêm trọng về Magento tại đây. Như mong đợi như sau:Magento: Lọc sản phẩm theo trạng thái

$products = Mage::getModel('catalog/category')->load($category_id) 
->getProductCollection() 
->addAttributeToSelect('*') 
->addAttributeToFilter('status', array('eq' => 1)); 

Sẽ trả lại tất cả các sản phẩm đã bật cho $ category_id của tôi. Tuy nhiên, điều này:

$products = Mage::getModel('catalog/category')->load($category_id) 
->getProductCollection() 
->addAttributeToSelect('*') 
->addAttributeToFilter('status', array('eq' => 0)); 

Không trả lại sản phẩm bị vô hiệu hóa. Tôi dường như không thể tìm ra cách để trả lại sản phẩm bị vô hiệu hóa, và tôi không biết tại sao.

Tôi đã thử điều này:

Mage::getSingleton('catalog/product_status')->addVisibleFilterToCollection($products); 

Mà có nghĩa là để làm việc, nhưng dường như có thể bị phản đối.

Có ai biết cách nhận tất cả sản phẩm trong danh mục, được bật và tắt không?

+3

Nếu bạn đang sử dụng Danh mục phẳng, bạn sẽ không có khả năng trả lại sản phẩm bị vô hiệu hóa vì danh mục phẳng tập hợp chỉ các sản phẩm được bật. –

+0

Tôi thấy, có cách nào vòng này không? Chỉnh sửa: Tìm trong cài đặt của tôi, cả Sử dụng Danh mục sản phẩm phẳng và Danh mục Danh mục phẳng được đặt thành không. Điều này có nghĩa là tôi không sử dụng một danh mục phẳng? –

+0

Thật vậy, điều đó có nghĩa là bạn không sử dụng danh mục phẳng ... –

Trả lời

42

Đừng lo lắng, bạn chỉ đơn giản là đã bị mắc kẹt bởi một định nghĩa rất khác thường liên tục ^^. Chỉ cần cố gắng:

$products = Mage::getModel('catalog/category')->load($category_id) 
->getProductCollection() 
->addAttributeToSelect('*') 
->addAttributeToFilter(
    'status', 
    array('eq' => Mage_Catalog_Model_Product_Status::STATUS_DISABLED) 
); 

Đối với bất cứ lý do Varien quyết định để xác định STATUS_DISABLED liên tục này với một giá trị của 2, thay vì giá trị trực quan hơn (và thường được sử dụng) của 0.

+1

Câu trả lời hay! Tôi không có thời gian để kiểm tra nó như nó đứng, nhưng bạn dường như biết nó sẽ làm việc. Tôi sẽ đánh dấu nó là chính xác và kiểm tra nó sau! –

+3

Lifesaver! Đã tắt = 2. Ai đã thunk nó. – Sc0ttyD

+1

Thực ra .... điều này sẽ chỉ hoạt động nếu bạn không sử dụng các bảng phẳng. Sản phẩm bị vô hiệu hóa không được bao gồm trong các bảng phẳng và do đó không thể lấy ra được từ bộ sưu tập sản phẩm. – Benubird

0

Tôi chưa tìm thấy câu trả lời cho câu hỏi của mình ở trên. Nhưng tôi đã tiết kiệm rất nhiều thời gian bằng cách sử dụng một phương pháp khác.

Tôi đã xuất CSV của tất cả các sản phẩm trong Magento của tôi, đã xóa tất cả các cột ngoại trừ ID danh mục và SKU (đây là tất cả những gì tôi cần), rồi lọc để trả lại tất cả các skus thay thế.

Nếu nó giúp mọi người ở đây là mã -

<?php 
$file = fopen('allprods.csv', 'r'); 

// You can use an array to store your search ids, makes things more flexible. 
// Supports any number of search ids. 
$id = array($_GET['id']);  
// Make the search ids safe to use in regex (escapes special characters) 
$id = array_map('preg_quote', $id); 
// The argument becomes '/id/i', which means 'id, case-insensitive' 
$regex = '/'.implode('|', $id).'/i'; 

$skus = array(); 
while (($line = fgetcsv($file)) !== FALSE) { 
    list($ids, $sku) = $line; 

    if(preg_match($regex, $ids)) { 
     $skus[] = $sku; 
    } 
} 

$count = count($skus); 
$i = 1; 

echo $category_id; 
foreach ($skus as $sku){ 
    echo $sku; 
    if($i != $count) { echo "`"; } 
    $i++; 
} 

Giải pháp này đã được tạo ra bằng cách sử dụng một chủ đề cũ hơn về CSV lọc, here

Vì vậy, bây giờ, tôi có thể sống sót. tuy nhiên - vẫn cần câu trả lời cho câu hỏi này!

2

Tôi nghĩ bạn có thể làm điều này bằng cách thiết lập cửa hàng để mặc định như

Mage::app()->setCurrentStore(Mage_Core_Model_App::ADMIN_STORE_ID); 

chắc chắn rằng bạn lưu các giá trị cửa hàng hiện tại và đặt nó trở lại sau khi thực hiện ở trên.

Hoặc bằng cách sử dụng một kịch bản từ Magento bên ngoài và gọi Mage bởi

require_once '../app/Mage.php'; 
$app = Mage::app(); 
Mage::register('isSecureArea', true); 
0

Không có gì hoạt động nếu catalog_flat_product bật trong cấu hình phụ trợ-> danh mục.

hãy thử điều này ..điều này sẽ cung cấp cho tất cả các sản phẩm được kích hoạt và vô hiệu hóa cuối cùng

$collection = Mage::getResourceModel('catalog/product_collection'); //this will give you all products 
foreach($collection as $col) 
{ 
$var = Mage::getModel('catalog/product')->loadByAttribute('sku',$col->getSku()); 
echo"<pre>";print_r($var->getData());echo"</pre>"; 
} 

của nó thực sự đơn giản và sau này bạn có thể dễ dàng lọc sản phẩm theo tình trạng

0
$products = Mage::getModel('catalog/category')->load($category_id) 
     ->getProductCollection() 
     ->addAttributeToSelect('*') 
     ->addAttributeToFilter('status', 1) 
     ->addAttributeToFilter('visibility', 4) 
     ->setOrder('price', 'ASC');