2011-02-15 38 views
32

Tôi đang cố gắng thêm product_type vào sản phẩm Magento Google Base của mình dựa trên các danh mục của sản phẩm, nhưng dường như tôi không thể. Tôi có đoạn mã sau:Làm cách nào để lấy các danh mục cho một sản phẩm trong Magento

// Get categories from product to include as product_type 
$categoryIds = $object->getCategoryIds(); 
foreach($categoryIds as $categoryId) { 
    $category = Mage::getModel('catalog/category')->load($categoryId); 
    $this->_setAttribute('product_type', $category->getName(), 'text'); 
} 

Vấn đề là nó trả tất cả các loại, không chỉ là những sản phẩm được Bất cứ ai cũng có một giải pháp.?

+0

Câu hỏi này được hỏi thích hợp hơn trong Stack Overflow. – Christopher

Trả lời

40

này hoàn toàn không được kiểm tra ..

//load the product 

$product = Mage::getModel('catalog/product')->load($productId); 

//load the categories of this product 

$categoryCollection = $product->getCategoryCollection(); 

Bạn có thể sau đó lặp qua $categoryCollection như thông qua một mảng.

source

+1

Đây phải là giải pháp đúng - bằng cách sử dụng bộ sưu tập, bạn sử dụng truy vấn thay vì (ít nhất) 1 cho mỗi Danh mục. (xem: 'Mage_Catalog_Model_Resource_Product :: getCategoryCollection') –

+0

' getCategoryCollection() 'không chứa tên danh mục như một phần của nó được chọn. – dchayka

+1

Nó có thể làm, tuy nhiên, bộ sưu tập có thể mở rộng. Hãy thử 'getCategoryCollection() -> addAttributeToSelect ('name')' (lưu ý: chưa được kiểm tra) –

55

Sử dụng liên kết nguồn giảm Rao trên, chúng tôi thực sự tìm thấy một câu trả lời tốt hơn:

$product = Mage::getModel('catalog/product')->load($productId); 

$cats = $product->getCategoryIds(); 
foreach ($cats as $category_id) { 
    $_cat = Mage::getModel('catalog/category')->load($category_id) ; 
    echo $_cat->getName(); 
} 
+0

Đây là loại câu trả lời đúng, nhưng không bao giờ được đánh dấu là chính xác. – ShaunOReilly

+0

Tôi đang tìm kiếm cùng một .. nhưng nơi tôi phải đặt mã này .. Tôi có thư mục .. u có thể cho tôi con đường ?? Tôi muốn danh sách các loại trong định dạng json. làm thế nào tôi có thể nhận được điều này? –

+14

đừng làm điều này, sử dụng giải pháp của Rao, điều này tiết kiệm rất nhiều truy vấn SQL! –

5

Nhận tất cả Categories của Sản phẩm

<?php 
    $_Product = Mage::getModel("catalog/product")->load(PRODUCT_ID); 
    $categoryIds = $_Product->getCategoryIds();//array of product categories 

    foreach($categoryIds as $categoryId) { 
     $category = Mage::getModel('catalog/category')->load($categoryId); 
     $this->_setAttribute('product_type', $category->getName(), 'text'); 
    } 
?> 
5

Bạn muốn chỉ ra rằng giải pháp của @Rao là tốt nhất nếu bạn có một đối tượng sản phẩm để lấy ID danh mục từ vì nó chỉ tạo một SQL cal l.

Nếu bạn chỉ có id thể loại, bạn có thể làm như sau:

$categories = Mage::getModel('catalog/category') 
    ->getCollection() 
    ->addAttributeToSelect('name') //you can add more attributes using this 
    ->addAttributeToFilter('entity_id', array('in'=>array(1,2,3))); 

foreach($categories as $_cat){ 
    $holder[]= $_cat->getName(); 
} 

đâu mảng (1,2,3) là danh mục của bạn. Lưu ý rằng mảng có số nguyên, không phải giá trị chuỗi, tôi thấy rằng SQL có thể được cầu kỳ về điều đó.

Cũng muốn chỉ ra rằng các giải pháp kéo một danh mục tại một thời gian rất hiệu quả vì nó làm cho một cuộc gọi SQL cho mỗi lần lặp của vòng lặp ví dụ:

foreach(..){ 
    Mage::getModel('catalog/category')->load($categoryId); 
} 
0

giải pháp Rào của cố gắng để tải tất cả các thuộc tính đó có nghĩa là nhiều truy vấn và tham gia nhưng bạn chỉ cần product_id để tải các danh mục của nó. Vì vậy, bạn có thể làm điều này:

$product = Mage::getModel("catalog/product")->setId($productId); 
    $categories = $product->getCategoryCollection(); 

Điều này sẽ không tải sản phẩm và sẽ cung cấp cho bạn các danh mục.

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