Skip to content

Commit 9896b4c

Browse files
committed
Merge remote-tracking branch '35580/patch-20' into comm_prs_248beta1
2 parents 8ff1c16 + 1fc6f6d commit 9896b4c

File tree

5 files changed

+108
-69
lines changed

5 files changed

+108
-69
lines changed

app/code/Magento/Catalog/view/frontend/layout/default.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@
6565
<referenceContainer name="after.body.start">
6666
<block class="Magento\Framework\View\Element\Js\Components" name="head.components" as="components" template="Magento_Catalog::js/components.phtml"/>
6767
</referenceContainer>
68+
<block class="Magento\Framework\View\Element\Template" name="head.critical" as="head.critical" template="Magento_Theme::html/container.phtml"/>
6869
<block class="Magento\Framework\View\Element\Template" name="head.additional" as="head.additional" template="Magento_Theme::html/container.phtml"/>
6970
</body>
7071
</page>

app/code/Magento/Theme/view/base/templates/root.phtml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@
99
<head <?= /* @noEscape */ $headAttributes ?>>
1010
<?= /* @noEscape */ $requireJs ?>
1111
<?= /* @noEscape */ $headContent ?>
12+
<?= /* @noEscape */ $headCritical ?>
13+
<?= /* @noEscape */ $headAssets ?>
1214
<?= /* @noEscape */ $headAdditional ?>
1315
</head>
1416
<body data-container="body"

app/code/Magento/Theme/view/frontend/layout/default_head_blocks.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
<script src="requirejs/require.js"/>
1313
</head>
1414
<body>
15-
<referenceBlock name="head.additional">
15+
<referenceBlock name="head.critical">
1616
<block name="critical_css_block" as="critical_css" template="Magento_Theme::html/header/criticalCss.phtml" ifconfig="dev/css/use_css_critical_path">
1717
<arguments>
1818
<argument name="criticalCssViewModel" xsi:type="object">Magento\Theme\Block\Html\Header\CriticalCss</argument>

lib/internal/Magento/Framework/View/Page/Config/Renderer.php

Lines changed: 40 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,11 @@
1010
use Magento\Framework\View\Asset\GroupedCollection;
1111
use Magento\Framework\View\Page\Config;
1212
use Magento\Framework\View\Page\Config\Metadata\MsApplicationTileImage;
13+
use Psr\Log\LoggerInterface;
14+
use Magento\Framework\UrlInterface;
15+
use Magento\Framework\Escaper;
16+
use Magento\Framework\Stdlib\StringUtils;
17+
use Magento\Framework\View\Asset\MergeService;
1318

1419
/**
1520
* Page config Renderer model
@@ -51,29 +56,29 @@ class Renderer implements RendererInterface
5156
protected $pageConfig;
5257

5358
/**
54-
* @var \Magento\Framework\View\Asset\MergeService
59+
* @var MergeService
5560
*/
5661
protected $assetMergeService;
5762

5863
/**
59-
* @var \Magento\Framework\Escaper
64+
* @var UrlInterface
6065
*/
61-
protected $escaper;
66+
protected $urlBuilder;
6267

6368
/**
64-
* @var \Magento\Framework\Stdlib\StringUtils
69+
* @var Escaper
6570
*/
66-
protected $string;
71+
protected $escaper;
6772

6873
/**
69-
* @var \Psr\Log\LoggerInterface
74+
* @var StringUtils
7075
*/
71-
protected $logger;
76+
protected $string;
7277

7378
/**
74-
* @var \Magento\Framework\UrlInterface
79+
* @var LoggerInterface
7580
*/
76-
protected $urlBuilder;
81+
protected $logger;
7782

7883
/**
7984
* @var MsApplicationTileImage
@@ -82,20 +87,20 @@ class Renderer implements RendererInterface
8287

8388
/**
8489
* @param Config $pageConfig
85-
* @param \Magento\Framework\View\Asset\MergeService $assetMergeService
86-
* @param \Magento\Framework\UrlInterface $urlBuilder
87-
* @param \Magento\Framework\Escaper $escaper
88-
* @param \Magento\Framework\Stdlib\StringUtils $string
89-
* @param \Psr\Log\LoggerInterface $logger
90+
* @param MergeService $assetMergeService
91+
* @param UrlInterface $urlBuilder
92+
* @param Escaper $escaper
93+
* @param StringUtils $string
94+
* @param LoggerInterface $logger
9095
* @param MsApplicationTileImage|null $msApplicationTileImage
9196
*/
9297
public function __construct(
9398
Config $pageConfig,
94-
\Magento\Framework\View\Asset\MergeService $assetMergeService,
95-
\Magento\Framework\UrlInterface $urlBuilder,
96-
\Magento\Framework\Escaper $escaper,
97-
\Magento\Framework\Stdlib\StringUtils $string,
98-
\Psr\Log\LoggerInterface $logger,
99+
MergeService $assetMergeService,
100+
UrlInterface $urlBuilder,
101+
Escaper $escaper,
102+
StringUtils $string,
103+
LoggerInterface $logger,
99104
MsApplicationTileImage $msApplicationTileImage = null
100105
) {
101106
$this->pageConfig = $pageConfig;
@@ -134,6 +139,17 @@ public function renderHeadContent()
134139
$result .= $this->renderMetadata();
135140
$result .= $this->renderTitle();
136141
$this->prepareFavicon();
142+
return $result;
143+
}
144+
145+
/**
146+
* Render head assets
147+
*
148+
* @return string
149+
*/
150+
public function renderHeadAssets()
151+
{
152+
$result = '';
137153
$result .= $this->renderAssets($this->getAvailableResultGroups());
138154
$result .= $this->pageConfig->getIncludes();
139155
return $result;
@@ -210,26 +226,20 @@ protected function getMetadataTemplate($name)
210226

211227
switch ($name) {
212228
case Config::META_CHARSET:
213-
$metadataTemplate = '<meta charset="%content"/>' . "\n";
214-
break;
229+
return '<meta charset="%content"/>' . "\n";
215230

216231
case Config::META_CONTENT_TYPE:
217-
$metadataTemplate = '<meta http-equiv="Content-Type" content="%content"/>' . "\n";
218-
break;
232+
return '<meta http-equiv="Content-Type" content="%content"/>' . "\n";
219233

220234
case Config::META_X_UI_COMPATIBLE:
221-
$metadataTemplate = '<meta http-equiv="X-UA-Compatible" content="%content"/>' . "\n";
222-
break;
235+
return '<meta http-equiv="X-UA-Compatible" content="%content"/>' . "\n";
223236

224237
case Config::META_MEDIA_TYPE:
225-
$metadataTemplate = false;
226-
break;
238+
return false;
227239

228240
default:
229-
$metadataTemplate = '<meta name="%name" content="%content"/>' . "\n";
230-
break;
241+
return '<meta name="%name" content="%content"/>' . "\n";
231242
}
232-
return $metadataTemplate;
233243
}
234244

235245
/**

lib/internal/Magento/Framework/View/Result/Page.php

Lines changed: 64 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,26 @@
99
use Magento\Framework;
1010
use Magento\Framework\App\Response\HttpInterface as HttpResponseInterface;
1111
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;
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

Comments
 (0)