Skip to content

Commit 42072dd

Browse files
committed
solve the toolbar problem when this is removed from the layout, code format on construcor of the product list block class
1 parent 08ec8ce commit 42072dd

File tree

1 file changed

+54
-20
lines changed

1 file changed

+54
-20
lines changed

app/code/Magento/Catalog/Block/Product/ListProduct.php

Lines changed: 54 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,18 @@
77
namespace Magento\Catalog\Block\Product;
88

99
use Magento\Catalog\Api\CategoryRepositoryInterface;
10+
use Magento\Catalog\Block\Product\Context;
1011
use Magento\Catalog\Block\Product\ProductList\Toolbar;
12+
use Magento\Catalog\Helper\Product\ProductList;
1113
use Magento\Catalog\Model\Category;
14+
use Magento\Catalog\Model\Layer\Resolver;
1215
use Magento\Catalog\Model\Product;
1316
use Magento\Catalog\Model\ResourceModel\Product\Collection;
1417
use Magento\Eav\Model\Entity\Collection\AbstractCollection;
18+
use Magento\Framework\Data\Helper\PostHelper;
1519
use Magento\Framework\DataObject\IdentityInterface;
1620
use Magento\Framework\Exception\NoSuchEntityException;
21+
use Magento\Framework\Url\Helper\Data;
1722

1823
/**
1924
* Product list
@@ -33,7 +38,7 @@ class ListProduct extends AbstractProduct implements IdentityInterface
3338
/**
3439
* Product Collection
3540
*
36-
* @var AbstractCollection
41+
* @var \Magento\Eav\Model\Entity\Collection\AbstractCollection
3742
*/
3843
protected $_productCollection;
3944

@@ -55,30 +60,39 @@ class ListProduct extends AbstractProduct implements IdentityInterface
5560
protected $urlHelper;
5661

5762
/**
58-
* @var CategoryRepositoryInterface
63+
* @var \Magento\Catalog\Api\CategoryRepositoryInterface
5964
*/
6065
protected $categoryRepository;
6166

6267
/**
63-
* @param Context $context
68+
* @var \Magento\Catalog\Helper\Product\ProductList
69+
*/
70+
protected $productListHelper;
71+
72+
/**
73+
*
74+
* @param \Magento\Catalog\Helper\Product\ProductList $productListHelper
75+
* @param \Magento\Catalog\Block\Product\Context $context
6476
* @param \Magento\Framework\Data\Helper\PostHelper $postDataHelper
6577
* @param \Magento\Catalog\Model\Layer\Resolver $layerResolver
66-
* @param CategoryRepositoryInterface $categoryRepository
78+
* @param \Magento\Catalog\Api\CategoryRepositoryInterface $categoryRepository
6779
* @param \Magento\Framework\Url\Helper\Data $urlHelper
6880
* @param array $data
6981
*/
7082
public function __construct(
71-
\Magento\Catalog\Block\Product\Context $context,
72-
\Magento\Framework\Data\Helper\PostHelper $postDataHelper,
73-
\Magento\Catalog\Model\Layer\Resolver $layerResolver,
83+
ProductList $productListHelper,
84+
Context $context,
85+
PostHelper $postDataHelper,
86+
Resolver $layerResolver,
7487
CategoryRepositoryInterface $categoryRepository,
75-
\Magento\Framework\Url\Helper\Data $urlHelper,
88+
Data $urlHelper,
7689
array $data = []
7790
) {
7891
$this->_catalogLayer = $layerResolver->get();
7992
$this->_postDataHelper = $postDataHelper;
8093
$this->categoryRepository = $categoryRepository;
8194
$this->urlHelper = $urlHelper;
95+
$this->productListHelper = $productListHelper;
8296
parent::__construct(
8397
$context,
8498
$data
@@ -137,7 +151,12 @@ public function getLoadedProductCollection()
137151
*/
138152
public function getMode()
139153
{
140-
return $this->getChildBlock('toolbar')->getCurrentMode();
154+
if ($this->getChildBlock('toolbar')) {
155+
return $this->getChildBlock('toolbar')->getCurrentMode();
156+
}
157+
// if toolbar is removed from layout, use the general configuration for product list mode
158+
// - config path catalog/frontend/list_mode
159+
return $this->productListHelper->getDefaultViewMode($this->getModes());
141160
}
142161

143162
/**
@@ -148,27 +167,43 @@ public function getMode()
148167
protected function _beforeToHtml()
149168
{
150169
$collection = $this->_getProductCollection();
151-
$this->configureToolbar($this->getToolbarBlock(), $collection);
170+
171+
$this->addToobarBlock($collection);
172+
152173
$collection->load();
153174

154175
return parent::_beforeToHtml();
155176
}
156177

178+
/**
179+
* Add toolbar block to product listing
180+
*
181+
* @param \Magento\Catalog\Model\ResourceModel\Product\Collection $collection
182+
*/
183+
private function addToobarBlock(Collection $collection)
184+
{
185+
$toolbar = $this->getToolbarBlock();
186+
if ($toolbar) {
187+
$this->configureToolbar($toolbar, $collection);
188+
}
189+
}
190+
157191
/**
158192
* Retrieve Toolbar block
159193
*
160-
* @return Toolbar
194+
* @return Toolbar|false
161195
*/
162196
public function getToolbarBlock()
163197
{
198+
$block = false;
199+
164200
$blockName = $this->getToolbarBlockName();
165-
if ($blockName) {
166-
$block = $this->getLayout()->getBlock($blockName);
167-
if ($block) {
168-
return $block;
169-
}
201+
if (!$blockName) {
202+
return $block;
170203
}
171-
$block = $this->getLayout()->createBlock($this->_defaultToolbarBlock, uniqid(microtime()));
204+
205+
$block = $this->getLayout()->getBlock($blockName);
206+
172207
return $block;
173208
}
174209

@@ -386,9 +421,8 @@ private function initializeProductCollection()
386421
if ($origCategory) {
387422
$layer->setCurrentCategory($origCategory);
388423
}
389-
390-
$toolbar = $this->getToolbarBlock();
391-
$this->configureToolbar($toolbar, $collection);
424+
425+
$this->addToobarBlock($collection);
392426

393427
$this->_eventManager->dispatch(
394428
'catalog_block_product_list_collection',

0 commit comments

Comments
 (0)