รับชุดผลิตภัณฑ์จากรหัสหมวดหมู่


18

ฉันพยายามรับชุดผลิตภัณฑ์จากรหัสหมวดหมู่ มีบางสิ่งที่ฉันลองอยู่ในบล็อก:

 $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('*');

ก็ลองทำมันจาก phtml

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

ไม่มีการทำงานนี้ แต่ฉันไม่เห็นข้อผิดพลาดใด ๆ ฉันเห็นโพสต์อื่นที่ดูเหมือนคำถามเดียวกัน: วีโอไอพี - รับผลิตภัณฑ์จากหมวดหมู่เฉพาะแต่วิธีการนั้นไม่ได้ผลสำหรับฉันเช่นกัน ขอบคุณสำหรับความช่วยเหลือใด ๆ !

คำตอบ:


32

ลองสิ่งนี้:

$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

ที่มา: http://overlycaffeinated.com/blog/2011/02/get-all-sale-products-from-a-category-in-magento/

สิ่งนี้ควรใช้งานได้เพราะจะเพิ่มตัวกรองหมวดหมู่สำหรับคุณโดยอาศัยการโหลดหมวดหมู่ไว้แล้ว:

Mage_Catalog_Model_Category

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

เดี๋ยวก่อนมันยังใช้งานไม่ได้!

ตกลงดังนั้นคุณอาจมีปัญหาที่ใหญ่กว่าอาจเป็นสิ่งที่เขียนทับgetProductCollectionได้ ดังนั้นลองหลีกเลี่ยงวิธีการอำนวยความสะดวกนั้น:

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

ขอบคุณสำหรับความช่วยเหลือของคุณ! ฉันรู้สึกใกล้ชิด แต่ก็ยังดิ้นรน ใช้วิธีสุดท้ายของคุณฉันเพิ่ม foreach ($products as $product) { echo $product->getId(); }และฉันจะได้รับรหัสชุด อย่างไรก็ตามเมื่อฉันลองทำecho $product->getName();อะไร ฉันพยายามเพิ่ม->addAttributeToSelect('*')แต่ไม่ ขอบคุณสำหรับความช่วยเหลือเพิ่มเติม
Zac

@philwinkle มีวิธีการรับผลิตภัณฑ์ทั้งหมดสำหรับประเภทหรือไม่ ฉันมีปัญหาในการรับสิ่งที่ถูกปิดใช้งาน ฉันกำลังใช้Mage::getResourceModel('catalog/product_collection')->setStoreId(Mage::app()->getStore()->getId())->addCategoryFilter($category)->addAttributeToSelect('sku');
Nick Rolando

9

วิธีโหลดชุดผลิตภัณฑ์พร้อมข้อมูลทั้งหมดที่คุณต้องการสำหรับรายการผลิตภัณฑ์ในส่วนหน้า:

$_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();

นี่เป็นการเตรียมการรวบรวมผลิตภัณฑ์เพื่อโหลดข้อมูลที่จำเป็นเพื่อแสดงราคาลิงก์ผลิตภัณฑ์และแอตทริบิวต์ใด ๆ ที่กำหนดค่าเป็น "ใช้ในรายการผลิตภัณฑ์" แต่ไม่มาก


ฉันจะ จำกัด ผลลัพธ์ได้อย่างไร ->limit(5)ไม่ทำงาน
Pedram Behroozi

->setPageSize(5)
Fabian Schmengler

@fschmengler คุณพลาด;หลังจาก$category = Mage::getModel('catalog/category')->load(123)รหัส
Murtuza Zabuawala

5

รหัสด้านล่างนี้จะให้การรวบรวมผลิตภัณฑ์จาก id หมวดหมู่ 10

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

3

รหัสเพื่อรับผลิตภัณฑ์จาก id หมวดหมู่เฉพาะ:

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

ที่สมบูรณ์แบบ !!! +1 :)
SagarPPanchal

ที่ $ category = $ categoryId อยู่ที่ไหน
lorakeen

2

โค้ดด้านล่างนั้นง่ายกว่าและมีประสิทธิภาพมากกว่าการโหลดชุดผลิตภัณฑ์และตัวกรองโดยใช้คุณสมบัติ

$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

ใน Magento 2 ลองใช้การลืมหมวดหมู่โดยใช้ ID หมวดหมู่

  $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 } ?>

รับชุดผลิตภัณฑ์พร้อมรายละเอียด หวังว่ามันจะเป็นประโยชน์


1
ฉันคิดว่าไม่จำเป็นต้องมีการทำลายล้างเพราะมีคำตอบสำหรับคำถามนี้เพียงพอ นอกจากนี้การใช้งานของคุณnew Mage_Catalog_Model_Category()เป็นที่น่าสงสัย
Julien Lachal
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.