9
9
use Magento \Framework ;
10
10
use Magento \Framework \App \Response \HttpInterface as HttpResponseInterface ;
11
11
use Magento \Framework \View ;
12
+ use Magento \Framework \View \Element \Template \Context ;
13
+ use Magento \Framework \View \LayoutFactory ;
14
+ use Magento \Framework \View \Layout \ReaderPool ;
15
+ use Magento \Framework \Translate \InlineInterface ;
16
+ use Magento \Framework \View \Layout \BuilderFactory ;
17
+ use Magento \Framework \View \Layout \GeneratorPool ;
18
+ use Magento \Framework \View \Page \Config \RendererInterface as PageConfigRendererInterface ;
19
+ use Magento \Framework \View \Page \Config \RendererFactory as PageConfigRendererFactory ;
20
+ use Magento \Framework \View \Page \Layout \Reader as PageLayoutReader ;
21
+ use Magento \Framework \App \RequestInterface as AppRequestInterface ;
22
+ use Magento \Framework \View \Asset \Repository as AssetRepository ;
23
+ use Psr \Log \LoggerInterface ;
24
+ use Magento \Framework \UrlInterface ;
25
+ use Magento \Framework \View \Page \Config as PageConfig ;
26
+ use Magento \Framework \View \FileSystem as ViewFileSystem ;
27
+ use Magento \Framework \App \ObjectManager ;
28
+ use Magento \Framework \View \EntitySpecificHandlesList ;
12
29
13
30
/**
14
- * A "page" result that encapsulates page type, page configuration
31
+ * Class Page represents a "page" result that encapsulates page type, page configuration
15
32
* and imposes certain layout handles.
16
33
*
17
34
* The framework convention is that there will be loaded a guaranteed handle for "all pages",
@@ -35,27 +52,27 @@ class Page extends Layout
35
52
protected $ pageLayout ;
36
53
37
54
/**
38
- * @var \Magento\Framework\View\Page\Config
55
+ * @var PageConfig
39
56
*/
40
57
protected $ pageConfig ;
41
58
42
59
/**
43
- * @var \Magento\Framework\View\Page\Config\RendererInterface
60
+ * @var PageConfigRendererInterface
44
61
*/
45
62
protected $ pageConfigRenderer ;
46
63
47
64
/**
48
- * @var \Magento\Framework\View\Page\Config\RendererFactory
65
+ * @var PageConfigRendererFactory
49
66
*/
50
67
protected $ pageConfigRendererFactory ;
51
68
52
69
/**
53
- * @var \Magento\Framework\View\Page\Layout\Reader
70
+ * @var PageLayoutReader
54
71
*/
55
72
protected $ pageLayoutReader ;
56
73
57
74
/**
58
- * @var \Magento\Framework\View\FileSystem
75
+ * @var ViewFileSystem
59
76
*/
60
77
protected $ viewFileSystem ;
61
78
@@ -70,61 +87,59 @@ class Page extends Layout
70
87
protected $ template ;
71
88
72
89
/**
73
- * @var Framework\App\RequestInterface
90
+ * @var AppRequestInterface
74
91
*/
75
92
protected $ request ;
76
93
77
94
/**
78
- * Asset service
79
- *
80
- * @var \Magento\Framework\View\Asset\Repository
95
+ * @var AssetRepository
81
96
*/
82
97
protected $ assetRepo ;
83
98
84
99
/**
85
- * @var \Psr\Log\ LoggerInterface
100
+ * @var LoggerInterface
86
101
*/
87
102
protected $ logger ;
88
103
89
104
/**
90
- * @var Framework\ UrlInterface
105
+ * @var UrlInterface
91
106
*/
92
107
protected $ urlBuilder ;
93
108
94
109
/**
95
- * @var View\ EntitySpecificHandlesList
110
+ * @var EntitySpecificHandlesList
96
111
*/
97
112
private $ entitySpecificHandlesList ;
98
113
99
114
/**
100
115
* Constructor
101
116
*
102
- * @param View\Element\Template\ Context $context
103
- * @param View\ LayoutFactory $layoutFactory
104
- * @param View\Layout\ ReaderPool $layoutReaderPool
105
- * @param Framework\Translate\ InlineInterface $translateInline
106
- * @param View\Layout\ BuilderFactory $layoutBuilderFactory
107
- * @param View\Layout\ GeneratorPool $generatorPool
108
- * @param View\Page\Config\RendererFactory $pageConfigRendererFactory
109
- * @param View\Page\Layout\Reader $pageLayoutReader
117
+ * @param Context $context
118
+ * @param LayoutFactory $layoutFactory
119
+ * @param ReaderPool $layoutReaderPool
120
+ * @param InlineInterface $translateInline
121
+ * @param BuilderFactory $layoutBuilderFactory
122
+ * @param GeneratorPool $generatorPool
123
+ * @param PageConfigRendererFactory $pageConfigRendererFactory
124
+ * @param PageLayoutReader $pageLayoutReader
110
125
* @param string $template
111
126
* @param bool $isIsolated
112
- * @param View\ EntitySpecificHandlesList $entitySpecificHandlesList
127
+ * @param EntitySpecificHandlesList $entitySpecificHandlesList
113
128
*
114
129
* @SuppressWarnings(PHPMD.ExcessiveParameterList)
115
130
*/
116
131
public function __construct (
117
- View \ Element \ Template \ Context $ context ,
118
- View \ LayoutFactory $ layoutFactory ,
119
- View \ Layout \ ReaderPool $ layoutReaderPool ,
120
- Framework \ Translate \ InlineInterface $ translateInline ,
121
- View \ Layout \ BuilderFactory $ layoutBuilderFactory ,
122
- View \ Layout \ GeneratorPool $ generatorPool ,
123
- View \ Page \ Config \ RendererFactory $ pageConfigRendererFactory ,
124
- View \ Page \ Layout \ Reader $ pageLayoutReader ,
132
+ Context $ context ,
133
+ LayoutFactory $ layoutFactory ,
134
+ ReaderPool $ layoutReaderPool ,
135
+ InlineInterface $ translateInline ,
136
+ BuilderFactory $ layoutBuilderFactory ,
137
+ GeneratorPool $ generatorPool ,
138
+ PageConfigRendererFactory $ pageConfigRendererFactory ,
139
+ PageLayoutReader $ pageLayoutReader ,
125
140
$ template ,
126
141
$ isIsolated = false ,
127
- View \ EntitySpecificHandlesList $ entitySpecificHandlesList = null
142
+ EntitySpecificHandlesList $ entitySpecificHandlesList = null
128
143
) {
129
144
$ this ->request = $ context ->getRequest ();
130
145
$ this ->assetRepo = $ context ->getAssetRepository ();
@@ -136,7 +151,7 @@ public function __construct(
136
151
$ this ->pageConfigRendererFactory = $ pageConfigRendererFactory ;
137
152
$ this ->template = $ template ;
138
153
$ this ->entitySpecificHandlesList = $ entitySpecificHandlesList
139
- ?: \ Magento \ Framework \ App \ ObjectManager::getInstance ()->get (View \ EntitySpecificHandlesList::class);
154
+ ?: ObjectManager::getInstance ()->get (EntitySpecificHandlesList::class);
140
155
parent ::__construct (
141
156
$ context ,
142
157
$ layoutFactory ,
@@ -203,7 +218,7 @@ public function addDefaultHandle()
203
218
/**
204
219
* Return page configuration
205
220
*
206
- * @return \Magento\Framework\View\Page\Config
221
+ * @return PageConfig
207
222
*/
208
223
public function getConfig ()
209
224
{
@@ -220,7 +235,7 @@ public function getConfig()
220
235
*/
221
236
public function addPageLayoutHandles (array $ parameters = [], $ defaultHandle = null , $ entitySpecific = true )
222
237
{
223
- $ handle = $ defaultHandle ? $ defaultHandle : $ this ->getDefaultLayoutHandle ();
238
+ $ handle = $ defaultHandle ?: $ this ->getDefaultLayoutHandle ();
224
239
$ pageHandles = [$ handle ];
225
240
foreach ($ parameters as $ key => $ value ) {
226
241
$ handle = $ value ['handle ' ] ?? $ handle ;
@@ -237,19 +252,28 @@ public function addPageLayoutHandles(array $parameters = [], $defaultHandle = nu
237
252
}
238
253
239
254
/**
255
+ * Render the page.
256
+ *
240
257
* {@inheritdoc}
258
+ *
259
+ * @param HttpResponseInterface $response The HTTP response object.
260
+ * @return $this
261
+ * @throws \Exception If the template file is not found.
241
262
*/
242
263
protected function render (HttpResponseInterface $ response )
243
264
{
244
265
$ this ->pageConfig ->publicBuild ();
245
266
if ($ this ->getPageLayout ()) {
246
267
$ config = $ this ->getConfig ();
247
268
$ this ->addDefaultBodyClasses ();
269
+ $ addCritical = $ this ->getLayout ()->getBlock ('head.critical ' );
248
270
$ addBlock = $ this ->getLayout ()->getBlock ('head.additional ' ); // todo
249
271
$ requireJs = $ this ->getLayout ()->getBlock ('require.js ' );
250
272
$ this ->assign ([
251
273
'requireJs ' => $ requireJs ? $ requireJs ->toHtml () : null ,
252
274
'headContent ' => $ this ->pageConfigRenderer ->renderHeadContent (),
275
+ 'headCritical ' => $ addCritical ? $ addCritical ->toHtml () : null ,
276
+ 'headAssets ' => $ this ->pageConfigRenderer ->renderHeadAssets (),
253
277
'headAdditional ' => $ addBlock ? $ addBlock ->toHtml () : null ,
254
278
'htmlAttributes ' => $ this ->pageConfigRenderer ->renderElementAttributes ($ config ::ELEMENT_TYPE_HTML ),
255
279
'headAttributes ' => $ this ->pageConfigRenderer ->renderElementAttributes ($ config ::ELEMENT_TYPE_HEAD ),
@@ -284,7 +308,9 @@ protected function addDefaultBodyClasses()
284
308
}
285
309
286
310
/**
287
- * @return string
311
+ * Get the page layout.
312
+ *
313
+ * @return string The page layout.
288
314
*/
289
315
protected function getPageLayout ()
290
316
{
@@ -294,9 +320,9 @@ protected function getPageLayout()
294
320
/**
295
321
* Assign variable
296
322
*
297
- * @param string|array $key
298
- * @param mixed $value
299
- * @return $this
323
+ * @param string|array $key
324
+ * @param mixed $value
325
+ * @return $this
300
326
*/
301
327
protected function assign ($ key , $ value = null )
302
328
{
0 commit comments