2013-09-25 6 views
0

Я создал коллекцию продуктов с применением специальной цены, но я не знаю, как получить коллекцию продуктов при применении правила цены каталога.Magento: необходимо получить коллекцию продуктов по действующему праву цены каталога

Ниже приведен код, чтобы получить специальную цену продуктов,

public function getSpecialPriceProducts() 
{ 
      $categoryID = $this->getCategoryId(); 
      if($categoryID) 
      { 
       $category = new Mage_Catalog_Model_Category(); 
       $category->load($categoryID); // this is category id 
       $collection = $category->getProductCollection(); 
      } else 
      { 
       $collection = Mage::getResourceModel('catalog/product_collection'); 
      } 

      $todayDate = date('m/d/y'); 
      $tomorrow = mktime(0, 0, 0, date('m'), date('d'), date('y')); 
      $tomorrowDate = date('m/d/y', $tomorrow); 

      Mage::getModel('catalog/layer')->prepareProductCollection($collection); 
      $collection->addAttributeToSort('created_at', 'desc'); 
      $collection->addStoreFilter() 
        ->addAttributeToSelect(array('name', 'price', 'short_description','image','small_image','url_key'), 'inner'); 
      $collection->addAttributeToFilter('special_price', array('gt' => 0)); 
      $collection->addAttributeToFilter('special_to_date', array('date' => true, 'to' => $todayDate)) 
       ->addAttributeToFilter('special_from_date', array('or'=> array(
       0 => array('date' => true, 'from' => $tomorrowDate), 
       1 => array('is' => new Zend_Db_Expr('null'))) 
       ), 'left'); 

      return $collection; 
} 

может кто-нибудь пожалуйста, руководство меня, как получить список продуктов, где применяются правило каталога цены? Заранее спасибо.

ответ

2

У меня есть мой ответ.

public function getSpecialPriceProducts() 
{ 
      $categoryID = $this->getCategoryId(); 
      if($categoryID) 
      { 
       $category = new Mage_Catalog_Model_Category(); 
       $category->load($categoryID); // this is category id 
       $collection = $category->getProductCollection(); 
      } else 
      { 
       $collection = Mage::getResourceModel('catalog/product_collection'); 
      } 

      $todayDate = date('m/d/y'); 
      $tomorrow = mktime(0, 0, 0, date('m'), date('d'), date('y')); 
      $tomorrowDate = date('m/d/y', $tomorrow); 

      Mage::getModel('catalog/layer')->prepareProductCollection($collection); 
      $collection->addAttributeToSort('created_at', 'desc'); 
      $collection->addStoreFilter() 
        ->addAttributeToSelect(array('name', 'price', 'short_description','image','small_image','url_key'), 'inner'); 
      $collection->addAttributeToFilter('special_price', array('gt' => 0)); 
      $collection->addAttributeToFilter('special_to_date', array('date' => true, 'to' => $todayDate)) 
       ->addAttributeToFilter('special_from_date', array('or'=> array(
       0 => array('date' => true, 'from' => $tomorrowDate), 
       1 => array('is' => new Zend_Db_Expr('null'))) 
       ), 'left'); 

$rules = Mage::getResourceModel('catalogrule/rule_collection')->load(); 

      // read: if there are active rules 
      if($rules->getData()) { 
       $rule_ids = array(); // i used this down below to style the products according to which rule affected 
       $productIds[] = array(); // this will hold the ids of the products 

       foreach($rules as $rule) { 
        $rule_ids[] = $rule->getId(); 
        $productIds = $rule->getMatchingProductIds(); // affected products come in here 
       } 

       // merge the collections: $arr is an array and keeps all product IDs we fetched before with the special-price-stuff 
       $arr = $collection->getAllIds(); 
       if($productIds) { 
        // if there are products affected by catalog price rules, $arr now also keeps their IDs 
        $arr = array_merge($arr,$productIds); 
       } 

       // we initialize a new collection and filter solely by the product IDs we got before, read: select all products with their entity_id in $arr 
       $collection = Mage::getModel('catalog/product')->getCollection() 
        ->addAttributeToSelect(array('name', 'price', 'short_description','image','small_image','url_key'), 'inner') 
        ->addAttributeToFilter('entity_id',array('in'=>$arr)) 
        ->load(); 
      } 
return $collection; 
} 
+0

привет, спасибо за решение. В каком файле вы разместили этот код? – zekia

+0

Нет конкретного файла. Вы можете добавить это в свой файл модели/блока, и вы можете его использовать. – shyammtp

Смежные вопросы