Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
NewProduct.php
Go to the documentation of this file.
1 <?php
7 
8 use Magento\Customer\Model\Context as CustomerContext;
9 
16  \Magento\Framework\DataObject\IdentityInterface
17 {
22 
28  protected $_productsCount;
29 
33  protected $httpContext;
34 
41 
48 
56  public function __construct(
57  \Magento\Catalog\Block\Product\Context $context,
58  \Magento\Catalog\Model\ResourceModel\Product\CollectionFactory $productCollectionFactory,
59  \Magento\Catalog\Model\Product\Visibility $catalogProductVisibility,
60  \Magento\Framework\App\Http\Context $httpContext,
61  array $data = []
62  ) {
63  $this->_productCollectionFactory = $productCollectionFactory;
64  $this->_catalogProductVisibility = $catalogProductVisibility;
65  $this->httpContext = $httpContext;
66  parent::__construct(
67  $context,
68  $data
69  );
70  }
71 
77  protected function _construct()
78  {
79  parent::_construct();
80  $this->addColumnCountLayoutDepend('empty', 6)
81  ->addColumnCountLayoutDepend('1column', 5)
82  ->addColumnCountLayoutDepend('2columns-left', 4)
83  ->addColumnCountLayoutDepend('2columns-right', 4)
84  ->addColumnCountLayoutDepend('3columns', 3);
85 
86  $this->addData(
87  ['cache_lifetime' => 86400, 'cache_tags' => [\Magento\Catalog\Model\Product::CACHE_TAG]]
88  );
89  }
90 
96  public function getCacheKeyInfo()
97  {
98  return [
99  'CATALOG_PRODUCT_NEW',
100  $this->_storeManager->getStore()->getId(),
101  $this->_design->getDesignTheme()->getId(),
102  $this->httpContext->getValue(CustomerContext::CONTEXT_GROUP),
103  'template' => $this->getTemplate(),
104  $this->getProductsCount()
105  ];
106  }
107 
113  protected function _getProductCollection()
114  {
115  $todayStartOfDayDate = $this->_localeDate->date()->setTime(0, 0, 0)->format('Y-m-d H:i:s');
116  $todayEndOfDayDate = $this->_localeDate->date()->setTime(23, 59, 59)->format('Y-m-d H:i:s');
117 
119  $collection = $this->_productCollectionFactory->create();
120  $collection->setVisibility($this->_catalogProductVisibility->getVisibleInCatalogIds());
121 
124  )->addStoreFilter()->addAttributeToFilter(
125  'news_from_date',
126  [
127  'or' => [
128  0 => ['date' => true, 'to' => $todayEndOfDayDate],
129  1 => ['is' => new \Zend_Db_Expr('null')],
130  ]
131  ],
132  'left'
133  )->addAttributeToFilter(
134  'news_to_date',
135  [
136  'or' => [
137  0 => ['date' => true, 'from' => $todayStartOfDayDate],
138  1 => ['is' => new \Zend_Db_Expr('null')],
139  ]
140  ],
141  'left'
142  )->addAttributeToFilter(
143  [
144  ['attribute' => 'news_from_date', 'is' => new \Zend_Db_Expr('not null')],
145  ['attribute' => 'news_to_date', 'is' => new \Zend_Db_Expr('not null')],
146  ]
147  )->addAttributeToSort(
148  'news_from_date',
149  'desc'
150  )->setPageSize(
151  $this->getProductsCount()
152  )->setCurPage(
153  1
154  );
155 
156  return $collection;
157  }
158 
164  protected function _beforeToHtml()
165  {
166  $this->setProductCollection($this->_getProductCollection());
167  return parent::_beforeToHtml();
168  }
169 
176  public function setProductsCount($count)
177  {
178  $this->_productsCount = $count;
179  return $this;
180  }
181 
187  public function getProductsCount()
188  {
189  if (null === $this->_productsCount) {
190  $this->_productsCount = self::DEFAULT_PRODUCTS_COUNT;
191  }
192  return $this->_productsCount;
193  }
194 
200  public function getIdentities()
201  {
203  }
204 }
$count
Definition: recent.phtml:13
_addProductAttributesAndPrices(\Magento\Catalog\Model\ResourceModel\Product\Collection $collection)
__construct(\Magento\Catalog\Block\Product\Context $context, \Magento\Catalog\Model\ResourceModel\Product\CollectionFactory $productCollectionFactory, \Magento\Catalog\Model\Product\Visibility $catalogProductVisibility, \Magento\Framework\App\Http\Context $httpContext, array $data=[])
Definition: NewProduct.php:56
addColumnCountLayoutDepend($pageLayout, $columnCount)