99use Magento \Framework ;
1010use Magento \Framework \App \Response \HttpInterface as HttpResponseInterface ;
1111use 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 ;
1229
1330/**
14- * A "page" result that encapsulates page type, page configuration
31+ * Class Page represents a "page" result that encapsulates page type, page configuration
1532 * and imposes certain layout handles.
1633 *
1734 * The framework convention is that there will be loaded a guaranteed handle for "all pages",
@@ -35,27 +52,27 @@ class Page extends Layout
3552 protected $ pageLayout ;
3653
3754 /**
38- * @var \Magento\Framework\View\Page\Config
55+ * @var PageConfig
3956 */
4057 protected $ pageConfig ;
4158
4259 /**
43- * @var \Magento\Framework\View\Page\Config\RendererInterface
60+ * @var PageConfigRendererInterface
4461 */
4562 protected $ pageConfigRenderer ;
4663
4764 /**
48- * @var \Magento\Framework\View\Page\Config\RendererFactory
65+ * @var PageConfigRendererFactory
4966 */
5067 protected $ pageConfigRendererFactory ;
5168
5269 /**
53- * @var \Magento\Framework\View\Page\Layout\Reader
70+ * @var PageLayoutReader
5471 */
5572 protected $ pageLayoutReader ;
5673
5774 /**
58- * @var \Magento\Framework\View\FileSystem
75+ * @var ViewFileSystem
5976 */
6077 protected $ viewFileSystem ;
6178
@@ -70,61 +87,59 @@ class Page extends Layout
7087 protected $ template ;
7188
7289 /**
73- * @var Framework\App\RequestInterface
90+ * @var AppRequestInterface
7491 */
7592 protected $ request ;
7693
7794 /**
78- * Asset service
79- *
80- * @var \Magento\Framework\View\Asset\Repository
95+ * @var AssetRepository
8196 */
8297 protected $ assetRepo ;
8398
8499 /**
85- * @var \Psr\Log\ LoggerInterface
100+ * @var LoggerInterface
86101 */
87102 protected $ logger ;
88103
89104 /**
90- * @var Framework\ UrlInterface
105+ * @var UrlInterface
91106 */
92107 protected $ urlBuilder ;
93108
94109 /**
95- * @var View\ EntitySpecificHandlesList
110+ * @var EntitySpecificHandlesList
96111 */
97112 private $ entitySpecificHandlesList ;
98113
99114 /**
100115 * Constructor
101116 *
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
110125 * @param string $template
111126 * @param bool $isIsolated
112- * @param View\ EntitySpecificHandlesList $entitySpecificHandlesList
127+ * @param EntitySpecificHandlesList $entitySpecificHandlesList
113128 *
114129 * @SuppressWarnings(PHPMD.ExcessiveParameterList)
115130 */
116131 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 ,
125140 $ template ,
126141 $ isIsolated = false ,
127- View \ EntitySpecificHandlesList $ entitySpecificHandlesList = null
142+ EntitySpecificHandlesList $ entitySpecificHandlesList = null
128143 ) {
129144 $ this ->request = $ context ->getRequest ();
130145 $ this ->assetRepo = $ context ->getAssetRepository ();
@@ -136,7 +151,7 @@ public function __construct(
136151 $ this ->pageConfigRendererFactory = $ pageConfigRendererFactory ;
137152 $ this ->template = $ template ;
138153 $ this ->entitySpecificHandlesList = $ entitySpecificHandlesList
139- ?: \ Magento \ Framework \ App \ ObjectManager::getInstance ()->get (View \ EntitySpecificHandlesList::class);
154+ ?: ObjectManager::getInstance ()->get (EntitySpecificHandlesList::class);
140155 parent ::__construct (
141156 $ context ,
142157 $ layoutFactory ,
@@ -203,7 +218,7 @@ public function addDefaultHandle()
203218 /**
204219 * Return page configuration
205220 *
206- * @return \Magento\Framework\View\Page\Config
221+ * @return PageConfig
207222 */
208223 public function getConfig ()
209224 {
@@ -220,7 +235,7 @@ public function getConfig()
220235 */
221236 public function addPageLayoutHandles (array $ parameters = [], $ defaultHandle = null , $ entitySpecific = true )
222237 {
223- $ handle = $ defaultHandle ? $ defaultHandle : $ this ->getDefaultLayoutHandle ();
238+ $ handle = $ defaultHandle ?: $ this ->getDefaultLayoutHandle ();
224239 $ pageHandles = [$ handle ];
225240 foreach ($ parameters as $ key => $ value ) {
226241 $ handle = $ value ['handle ' ] ?? $ handle ;
@@ -237,19 +252,28 @@ public function addPageLayoutHandles(array $parameters = [], $defaultHandle = nu
237252 }
238253
239254 /**
255+ * Render the page.
256+ *
240257 * {@inheritdoc}
258+ *
259+ * @param HttpResponseInterface $response The HTTP response object.
260+ * @return $this
261+ * @throws \Exception If the template file is not found.
241262 */
242263 protected function render (HttpResponseInterface $ response )
243264 {
244265 $ this ->pageConfig ->publicBuild ();
245266 if ($ this ->getPageLayout ()) {
246267 $ config = $ this ->getConfig ();
247268 $ this ->addDefaultBodyClasses ();
269+ $ addCritical = $ this ->getLayout ()->getBlock ('head.critical ' );
248270 $ addBlock = $ this ->getLayout ()->getBlock ('head.additional ' ); // todo
249271 $ requireJs = $ this ->getLayout ()->getBlock ('require.js ' );
250272 $ this ->assign ([
251273 'requireJs ' => $ requireJs ? $ requireJs ->toHtml () : null ,
252274 'headContent ' => $ this ->pageConfigRenderer ->renderHeadContent (),
275+ 'headCritical ' => $ addCritical ? $ addCritical ->toHtml () : null ,
276+ 'headAssets ' => $ this ->pageConfigRenderer ->renderHeadAssets (),
253277 'headAdditional ' => $ addBlock ? $ addBlock ->toHtml () : null ,
254278 'htmlAttributes ' => $ this ->pageConfigRenderer ->renderElementAttributes ($ config ::ELEMENT_TYPE_HTML ),
255279 'headAttributes ' => $ this ->pageConfigRenderer ->renderElementAttributes ($ config ::ELEMENT_TYPE_HEAD ),
@@ -284,7 +308,9 @@ protected function addDefaultBodyClasses()
284308 }
285309
286310 /**
287- * @return string
311+ * Get the page layout.
312+ *
313+ * @return string The page layout.
288314 */
289315 protected function getPageLayout ()
290316 {
@@ -294,9 +320,9 @@ protected function getPageLayout()
294320 /**
295321 * Assign variable
296322 *
297- * @param string|array $key
298- * @param mixed $value
299- * @return $this
323+ * @param string|array $key
324+ * @param mixed $value
325+ * @return $this
300326 */
301327 protected function assign ($ key , $ value = null )
302328 {
0 commit comments