9
9
use Magento \Catalog \Api \CategoryRepositoryInterface ;
10
10
use Magento \Catalog \Block \Product \Context ;
11
11
use Magento \Catalog \Block \Product \ProductList \Toolbar ;
12
- use Magento \Catalog \Helper \Product \ProductList ;
13
12
use Magento \Catalog \Model \Category ;
14
13
use Magento \Catalog \Model \Layer \Resolver ;
15
14
use Magento \Catalog \Model \Product ;
@@ -65,13 +64,6 @@ class ListProduct extends AbstractProduct implements IdentityInterface
65
64
protected $ categoryRepository ;
66
65
67
66
/**
68
- * @var \Magento\Catalog\Helper\Product\ProductList
69
- */
70
- protected $ productListHelper ;
71
-
72
- /**
73
- *
74
- * @param \Magento\Catalog\Helper\Product\ProductList $productListHelper
75
67
* @param \Magento\Catalog\Block\Product\Context $context
76
68
* @param \Magento\Framework\Data\Helper\PostHelper $postDataHelper
77
69
* @param \Magento\Catalog\Model\Layer\Resolver $layerResolver
@@ -80,7 +72,6 @@ class ListProduct extends AbstractProduct implements IdentityInterface
80
72
* @param array $data
81
73
*/
82
74
public function __construct (
83
- ProductList $ productListHelper ,
84
75
Context $ context ,
85
76
PostHelper $ postDataHelper ,
86
77
Resolver $ layerResolver ,
@@ -92,7 +83,6 @@ public function __construct(
92
83
$ this ->_postDataHelper = $ postDataHelper ;
93
84
$ this ->categoryRepository = $ categoryRepository ;
94
85
$ this ->urlHelper = $ urlHelper ;
95
- $ this ->productListHelper = $ productListHelper ;
96
86
parent ::__construct (
97
87
$ context ,
98
88
$ data
@@ -154,9 +144,31 @@ public function getMode()
154
144
if ($ this ->getChildBlock ('toolbar ' )) {
155
145
return $ this ->getChildBlock ('toolbar ' )->getCurrentMode ();
156
146
}
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 ());
147
+
148
+ return $ this ->getDefaultListingMode ();
149
+ }
150
+
151
+ /**
152
+ * Get listing mode for products if toolbar is removed from layout.
153
+ * Use the general configuration for product list mode from config path catalog/frontend/list_mode as default value
154
+ // or mode data from block declaration from layout.
155
+ *
156
+ * @return string
157
+ */
158
+ private function getDefaultListingMode ()
159
+ {
160
+ // default Toolbar when the toolbar layout is not used
161
+ $ defaultToolbar = $ this ->getToolbarBlock ();
162
+ $ availableModes = $ defaultToolbar ->getModes ();
163
+
164
+ // layout config mode
165
+ $ mode = $ this ->getData ('mode ' );
166
+ if (!$ mode && !isset ($ availableModes [$ mode ])) {
167
+ // default config mode
168
+ $ mode = $ defaultToolbar ->getCurrentMode ();
169
+ }
170
+
171
+ return $ mode ;
160
172
}
161
173
162
174
/**
@@ -168,41 +180,49 @@ protected function _beforeToHtml()
168
180
{
169
181
$ collection = $ this ->_getProductCollection ();
170
182
171
- $ this ->addToobarBlock ($ collection );
183
+ $ this ->addToolbarBlock ($ collection );
172
184
173
185
$ collection ->load ();
174
186
175
187
return parent ::_beforeToHtml ();
176
188
}
177
189
178
190
/**
179
- * Add toolbar block to product listing
191
+ * Add toolbar block from product listing layout
180
192
*
181
193
* @param \Magento\Catalog\Model\ResourceModel\Product\Collection $collection
182
194
*/
183
- private function addToobarBlock (Collection $ collection )
195
+ private function addToolbarBlock (Collection $ collection )
184
196
{
185
- $ toolbar = $ this ->getToolbarBlock ();
186
- if ($ toolbar ) {
187
- $ this ->configureToolbar ($ toolbar , $ collection );
197
+ $ toolbarLayout = false ;
198
+
199
+ $ blockName = $ this ->getToolbarBlockName ();
200
+
201
+ if ($ blockName ) {
202
+ $ toolbarLayout = $ this ->getLayout ()->getBlock ($ blockName );
203
+ }
204
+
205
+ if ($ toolbarLayout ) {
206
+ $ this ->configureToolbar ($ toolbarLayout , $ collection );
188
207
}
189
208
}
190
209
191
210
/**
192
- * Retrieve Toolbar block
211
+ * Retrieve Toolbar block from layout or a default Toolbar
193
212
*
194
- * @return Toolbar|false
213
+ * @return Toolbar
195
214
*/
196
215
public function getToolbarBlock ()
197
216
{
198
- $ block = false ;
199
-
200
217
$ blockName = $ this ->getToolbarBlockName ();
201
- if (!$ blockName ) {
202
- return $ block ;
218
+
219
+ if ($ blockName ) {
220
+ $ block = $ this ->getLayout ()->getBlock ($ blockName );
203
221
}
204
222
205
- $ block = $ this ->getLayout ()->getBlock ($ blockName );
223
+ if (!$ block ) {
224
+ $ block = $ this ->getLayout ()->createBlock ($ this ->_defaultToolbarBlock , uniqid (microtime ()));
225
+ }
206
226
207
227
return $ block ;
208
228
}
@@ -422,7 +442,7 @@ private function initializeProductCollection()
422
442
$ layer ->setCurrentCategory ($ origCategory );
423
443
}
424
444
425
- $ this ->addToobarBlock ($ collection );
445
+ $ this ->addToolbarBlock ($ collection );
426
446
427
447
$ this ->_eventManager ->dispatch (
428
448
'catalog_block_product_list_collection ' ,
0 commit comments