*/ class Mage_Catalog_Block_Product_New extends Mage_Catalog_Block_Product_Abstract { protected $_productsCount = null; const DEFAULT_PRODUCTS_COUNT = 5; /** * Initialize block's cache */ protected function _construct() { parent::_construct(); $this->addColumnCountLayoutDepend('empty', 6) ->addColumnCountLayoutDepend('one_column', 5) ->addColumnCountLayoutDepend('two_columns_left', 4) ->addColumnCountLayoutDepend('two_columns_right', 4) ->addColumnCountLayoutDepend('three_columns', 3); $this->addData(array( 'cache_lifetime' => 86400, 'cache_tags' => array(Mage_Catalog_Model_Product::CACHE_TAG), )); } /** * Get Key pieces for caching block content * * @return array */ public function getCacheKeyInfo() { return array( 'CATALOG_PRODUCT_NEW', Mage::app()->getStore()->getId(), Mage::getDesign()->getPackageName(), Mage::getDesign()->getTheme('template'), Mage::getSingleton('customer/session')->getCustomerGroupId(), 'template' => $this->getTemplate(), $this->getProductsCount() ); } /** * Prepare collection with new products and applied page limits. * * return Mage_Catalog_Block_Product_New */ protected function _beforeToHtml() { $todayStartOfDayDate = Mage::app()->getLocale()->date() ->setTime('00:00:00') ->toString(Varien_Date::DATETIME_INTERNAL_FORMAT); $todayEndOfDayDate = Mage::app()->getLocale()->date() ->setTime('23:59:59') ->toString(Varien_Date::DATETIME_INTERNAL_FORMAT); $collection = Mage::getResourceModel('catalog/product_collection'); $collection->setVisibility(Mage::getSingleton('catalog/product_visibility')->getVisibleInCatalogIds()); $collection = $this->_addProductAttributesAndPrices($collection) ->addStoreFilter() ->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') ->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')) ) ) ->addAttributeToSort('news_from_date', 'desc') ->setPageSize($this->getProductsCount()) ->setCurPage(1) ; $this->setProductCollection($collection); return parent::_beforeToHtml(); } /** * Set how much product should be displayed at once. * * @param $count * @return Mage_Catalog_Block_Product_New */ public function setProductsCount($count) { $this->_productsCount = $count; return $this; } /** * Get how much products should be displayed at once. * * @return int */ public function getProductsCount() { if (null === $this->_productsCount) { $this->_productsCount = self::DEFAULT_PRODUCTS_COUNT; } return $this->_productsCount; } }