Nhận danh mục sản phẩm theo ưu đãi đặc biệt


7

Làm thế nào tôi có thể nhận được danh sách các danh mục của tất cả các sản phẩm trên ưu đãi đặc biệt. Đó là một chút khó khăn. Tôi có thể lấy danh sách các sản phẩm bằng cách sử dụng:

        $collection
          ->addAttributeToFilter(
              array(
                  array('attribute' => 'news_from_date', 'is'=>new Zend_Db_Expr('not null')),
                  array('attribute' => 'news_to_date', 'is'=>new Zend_Db_Expr('not null'))
                  )
            )
          ->addAttributeToFilter('news_from_date', array('or'=> array(
              0 => array('date' => true, 'to' => $todayEndOfDayDate),
              1 => array('is' => new Zend_Db_Expr('null')))
          ), 'left')
          ->addAttributeToFilter('news_to_date', array('or'=> array(
              0 => array('date' => true, 'from' => $todayStartOfDayDate),
              1 => array('is' => new Zend_Db_Expr('null')))
          ), 'left')
          ->addAttributeToSort('news_from_date', 'desc');

Nhưng làm thế nào tôi có thể có được danh mục của họ (tốt nhất là danh mục cấp cao nhất).

Cảm ơn.


Câu hỏi logic tốt. +1 cho bạn. Hy vọng câu trả lời của tôi sẽ giải quyết vấn đề của bạn.
Ashish Jagnani

Làm thế nào bạn xác định một sản phẩm trong ưu đãi đặc biệt?
Amit Bera

Câu trả lời:


2

Vì vậy, bạn đã có các sản phẩm bên trong $collectionđối tượng.
Bạn có thể làm được việc này.

$categoryIds = array();
foreach ($collection as $product) {
   $categoryIds = array_merge($categoryIds, $product->getCategoryIds());
}
$categoryIds = array_unique($categoryIds);

Bây giờ bạn có id danh mục bạn cần.
Dưới đây là cách bạn có thể nhận được các danh mục cấp cao nhất có id trong số các danh mục bạn đã lọc ở trên.

if (count($categoryIds) > 0) {
    $categories = Mage::getModel('catalog/category')->getCollection()
        //add the attributes you need to the select. * = all.
        ->addAttributeToSelect('*')
        //filter by ids you need
        ->addAttributeToFilter('entity_id', array('in' => $categoryIds))
        //get only active categories
        ->addAttributeToFilter('is_active', 1)
        //get only top level categories: 2 means top level (1 is root catalog and 0 is root of all roots)
        ->addAttributeToFilter('level', 2)
        //sort by position if needed
        ->addAttributeToSort('position', 'ASC');
}

Bây giờ bạn có thể chỉ cần lặp qua bộ sưu tập danh mục và làm những gì bạn cần với danh mục của bạn. Bạn không cần phải gọi loadnữa cho mỗi người.


2

Như bạn đã nói bạn có bộ sưu tập sản phẩm, giả sử bộ sưu tập sản phẩm là bộ sưu tập $.

    $cat = array();
    foreach ($collection as $col) {
        foreach ($col->getCategoryIds() as $catId) {
            //check if category id exist.
            if(!in_array($catId, $cat))
            {
               //push to $cat
                array_push($cat,$catId);
            }
        }
    }

$ cat biến danh mục cửa hàng id của sản phẩm.

Bây giờ tải bộ sưu tập thể loại theo id danh mục.

    $categoryCollection = Mage::getModel('catalog/category')->getCollection()->addFieldToFilter('entity_id',array('in' => $cat));
    foreach ($categoryCollection as $catCol) {
        echo $catCol->getId();
    }

Đây là con đường dài để làm điều này.

hoặc bạn có thể đặt cờ làm thuộc tính danh mục trong khi giá đặc biệt được đặt.


1

Thử cái này :

...
// to get all categories
foreach($collection as $singleProduct)
{
    $categories = $singleProduct->getCategoryIds();
    foreach($categories as $singleCategory)
    {
        array_push($allCategories,$singleCategory);
    }
}
$allCategories = array_unique($allCategories);
...

...
// to get top level categories (which are under default category)
foreach($collection as $singleProduct)
{
    $categories = $singleProduct->getCategoryIds();

    foreach($categories as $singleCategory)
    {
        $CategoryObj = Mage::getModel('catalog/category')->load($singleCategory);
        if($CategoryObj->getLevel() == 2)       
        {
            array_push($allCategories,$singleCategory);
        }
    }
}
$allCategories = array_unique($allCategories);
...

Tôi đã nghĩ đến việc làm điều đó, nhưng nếu tôi có 500 sản phẩm được cung cấp, chúng tôi sẽ đánh db 500 lần, có cách nào khác để làm điều đó không?
Yehia A.Salam

Tôi cũng đang sử dụng cái này trên cửa hàng của tôi và tôi có hơn 3000 sản phẩm, tôi chỉ có giải pháp này. Nếu bạn tìm thấy bất kỳ cách tốt hơn xin vui lòng chia sẻ.
Vinaya Maheshwari

0
$rootCategories = array();
$intRootCategoryId = Mage::app()->getStore()->getRootCategoryId();
$category = Mage::getModel('catalog/category')->load($intRootCategoryId);
$subcats = explode(',',$category->getChildren());

foreach($subcats as $cat)
{
    $collection = Mage::getModel('catalog/category')->load($cat)->getProductCollection();
    $collection
      ->addAttributeToFilter(
          array(
              array('attribute' => 'news_from_date', 'is'=>new Zend_Db_Expr('not null')),
              array('attribute' => 'news_to_date', 'is'=>new Zend_Db_Expr('not null'))
              )
        )
      ->addAttributeToFilter('news_from_date', array('or'=> array(
          0 => array('date' => true, 'to' => $todayEndOfDayDate),
          1 => array('is' => new Zend_Db_Expr('null')))
      ), 'left')
      ->addAttributeToFilter('news_to_date', array('or'=> array(
          0 => array('date' => true, 'from' => $todayStartOfDayDate),
          1 => array('is' => new Zend_Db_Expr('null')))
      ), 'left')
      ->addAttributeToSort('news_from_date', 'desc');
    if(!empty($collection))       
    {
        array_push($rootCategories,$cat);
    }

}
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.