Nhận bộ sưu tập sản phẩm từ một danh mục id


18

Tôi đang cố gắng để có được một bộ sưu tập các sản phẩm từ một danh mục id. Một vài điều tôi đã thử nằm trong khối:

 $category = Mage::getModel('catalog/category')->load(123)
        ->getProductCollection();

    $category = Mage::getModel('catalog/category')->load(123);
    $products = $category->getProductCollection()->addCategoryFilter($category)
                         ->addAttributeToFilter('type_id', 'simple')
                         ->addAttributeToSelect('*');

cũng đã thử làm điều đó từ phtml

$oCatId = Mage::getModel('catalog/category')->load(769); 
        $products->addCategoryFilter($oCatId);

Không ai trong số này hoạt động nhưng tôi cũng không thấy bất kỳ lỗi nào. Tôi thấy một bài đăng khác có vẻ giống câu hỏi tương tự: Magento - Nhận sản phẩm từ danh mục cụ thể nhưng phương pháp đó cũng không hiệu quả với tôi. Cảm ơn vì bất kì sự giúp đỡ!

Câu trả lời:


32

Thử đi:

$products = Mage::getModel('catalog/category')->load($category_id)
 ->getProductCollection()
 ->addAttributeToSelect('*') // add all attributes - optional
 ->addAttributeToFilter('status', 1) // enabled
 ->addAttributeToFilter('visibility', 4) //visibility in catalog,search
 ->setOrder('price', 'ASC'); //sets the order by price

Nguồn: http://overlycaffeinated.com/blog/2011/02/get-all-sale-products-from-a-c Ab-in-magento /

Điều này sẽ hoạt động vì nó thêm bộ lọc danh mục cho bạn nhờ vào việc đã tải danh mục:

Mage_Catalog_Model_Carget

public function getProductCollection()
{
    $collection = Mage::getResourceModel('catalog/product_collection')
        ->setStoreId($this->getStoreId())
        ->addCategoryFilter($this);
    return $collection;
}

Đợi đã, nó vẫn không hoạt động!

Ok, vì vậy bạn có thể có vấn đề lớn hơn, có lẽ là một cái gì đó ghi đè getProductCollection. Vì vậy, hãy thử phá vỡ phương pháp tiện lợi đó:

$category = Mage::getModel('catalog/category')->load($category_id);
$products = Mage::getResourceModel('catalog/product_collection')
        ->setStoreId(Mage::app()->getStore()->getId())
        ->addCategoryFilter($category);

Cảm ơn bạn đã giúp đỡ! Tôi cảm thấy gần gũi hơn nhưng vẫn lúng túng. Sử dụng phương pháp cuối cùng của bạn, tôi đã thêm foreach ($products as $product) { echo $product->getId(); }và tôi nhận được một loạt các id. Tuy nhiên khi tôi echo $product->getName();không thử gì cả. Tôi đã cố gắng thêm ->addAttributeToSelect('*')nhưng không. Cảm ơn vì sự giúp đỡ nhiều hơn.
Zac

@philwinkle Có cách nào để có được tất cả các sản phẩm cho một danh mục không? Tôi gặp khó khăn khi nhận được những người bị vô hiệu hóa. Tôi đang sử dụngMage::getResourceModel('catalog/product_collection')->setStoreId(Mage::app()->getStore()->getId())->addCategoryFilter($category)->addAttributeToSelect('sku');
Nick Rolando

9

Cách tải bộ sưu tập sản phẩm với tất cả dữ liệu mà bạn thường cần cho danh sách sản phẩm ở lối vào:

$_categoryId = 123;
$category = Mage::getModel('catalog/category')->load($_categoryId );
$productCollection = $category->getProductCollection();
$productCollection
        ->addStoreFilter()
        ->setVisibility(Mage::getSingleton('catalog/product_visibility')->getVisibleInCatalogIds())
        ->addMinimalPrice()
        ->addFinalPrice()
        ->addTaxPercents()
        ->addAttributeToSelect(Mage::getSingleton('catalog/config')->getProductAttributes())
        ->addUrlRewrite();

Việc này chuẩn bị bộ sưu tập sản phẩm để tải dữ liệu cần thiết để hiển thị giá, liên kết sản phẩm và bất kỳ thuộc tính nào được định cấu hình là "được sử dụng trong danh sách sản phẩm", nhưng không nhiều hơn.


Làm thế nào tôi có thể giới hạn kết quả? ->limit(5)đã không làm việc.
Pedram Behroozi

->setPageSize(5)
Fabian Schmengler

@fschmengler bạn bỏ lỡ ;sau $category = Mage::getModel('catalog/category')->load(123)
Murtuza Zabuawala

5

Mã dưới đây sẽ cung cấp cho bạn bộ sưu tập sản phẩm từ danh mục id 10.

$categoryId = 10;    
$products = Mage::getSingleton('catalog/category')->load($categoryId)
            ->getProductCollection()
            ->addAttributeToSelect('*');

3

Mã để nhận bộ sưu tập sản phẩm từ id danh mục cụ thể:

$productCollection = Mage::getResourceModel('catalog/product_collection')
                       ->addCategoryFilter($category);

hoàn hảo!!! +1 :)
SagarPPanchal

$ category = $ categoryId?
lorakeen

2

Bên dưới đoạn mã đơn giản và hiệu quả hơn nhiều so với việc tải bộ sưu tập và lọc sản phẩm bằng các thuộc tính của nó,

$categoryId = 32; // Replace with your category

$category = Mage::getModel('catalog/category')
                 ->setStoreId(Mage::app()->getStore()->getId())
                 ->load($categoryId);

Mage::register('current_category', $category);

$products = Mage::getSingleton('catalog/layer')->getProductCollection();

echo $products->getSize();

0

Trong Magento 2 hãy thử bộ sưu tập danh mục quên này bằng ID danh mục

  $objectManager = \Magento\Framework\App\ObjectManager::getInstance();
  $subCategory =  $objectManager->create('Magento\Catalog\Model\Category')-> 
         load('categorey_id');
  foreach($subCategory as $subcat)
   { 
        print_r($subcat->getData();
  }

-2
<?php

$categoryid = 123; // Category Id

$category = new Mage_Catalog_Model_Category();
$category->load($categoryid);
$collection = $category->getProductCollection();
$collection->addAttributeToSelect('*'); 

foreach ($_productCollection as $_product) { ?>
    <div class="pr_section">
        <div class="pr_desc">
            <a href="<?php echo $_product->getProductUrl(); ?>"><?php echo $_product->getName(); ?></a>
            <?php echo $this->getReviewsSummaryHtml($_product, false, true); // Reviews ?>
                <?php echo $this->getPriceHtml($_product, true) ?>
                <?php echo $_product->getShortDescription();?>

                <?php if(!$_product->canConfigure() && $_product->isSaleable()): ?>
                    <p><button type="button" title="<?php echo Mage::helper('core')->quoteEscape($this->__('Add to Cart')) ?>" class="button btn-cart" onclick="setLocation('<?php echo $this->getAddToCartUrl($_product) ?>')"><span><span><?php echo $this->__('Add to Cart') ?></span></span></button></p>
                <?php elseif($_product->getStockItem() && $_product->getStockItem()->getIsInStock()): ?>
                    <p><a title="<?php echo $this->__('View Details') ?>" class="button btn-cart" href="<?php echo $_product->getProductUrl() ?>"><?php echo $this->__('View Details') ?></a></p>
                <?php else: ?>
                    <p class="availability out-of-stock"><span><?php echo $this->__('Out of stock') ?></span></p>
                <?php endif; ?>
        </div>
        <div class="pr_img">
                <a href="<?php echo $_product->getProductUrl() ?>"><img src="<?php echo $this->helper('catalog/image')->init($_product, 'small_image')->resize(200); ?>" width="200" height="200" alt="" /></a> 
        </div>
<?php } ?>

Nhận bộ sưu tập sản phẩm với chi tiết. Hy vọng nó sẽ hữu ích.


1
Tôi nghĩ rằng việc hoại tử là không cần thiết vì có đủ câu trả lời cho câu hỏi này. Hơn nữa, việc sử dụng của bạn new Mage_Catalog_Model_Category()là nghi vấn.
Julien Lachal 7/12/2016
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.