64 self::ELEMENT_TYPE_BODY,
65 self::ELEMENT_TYPE_HTML,
66 self::ELEMENT_TYPE_HEAD,
126 'media_type' =>
null,
127 'content_type' =>
null,
128 'description' =>
null,
137 private $areaResolver;
142 private $isIncludesAvailable;
151 private function getAreaResolver()
153 if ($this->areaResolver ===
null) {
157 return $this->areaResolver;
171 View\
Asset\GroupedCollection $pageAssets,
175 \
Magento\Framework\Locale\ResolverInterface $localeResolver,
176 $isIncludesAvailable =
true 178 $this->assetRepo = $assetRepo;
179 $this->pageAssets = $pageAssets;
180 $this->scopeConfig = $scopeConfig;
181 $this->favicon = $favicon;
183 $this->localeResolver = $localeResolver;
184 $this->isIncludesAvailable = $isIncludesAvailable;
186 self::ELEMENT_TYPE_HTML,
187 self::HTML_ATTRIBUTE_LANG,
188 strstr($this->localeResolver->getLocale(),
'_',
true)
200 $this->builder = $builder;
211 if (!empty($this->builder)) {
212 $this->builder->build();
260 return $this->metadata;
271 $this->
setMetadata(self::META_CONTENT_TYPE, $contentType);
282 if (strtolower($this->metadata[self::META_CONTENT_TYPE]) ===
'auto') {
285 return $this->metadata[self::META_CONTENT_TYPE];
296 $this->
setMetadata(self::META_MEDIA_TYPE, $mediaType);
307 if (empty($this->metadata[self::META_MEDIA_TYPE])) {
308 $this->metadata[self::META_MEDIA_TYPE] = $this->scopeConfig->getValue(
309 'design/head/default_media_type',
310 \
Magento\Store\Model\ScopeInterface::SCOPE_STORE
313 return $this->metadata[self::META_MEDIA_TYPE];
335 if (empty($this->metadata[self::META_CHARSET])) {
336 $this->metadata[self::META_CHARSET] = $this->scopeConfig->getValue(
337 'design/head/default_charset',
338 \
Magento\Store\Model\ScopeInterface::SCOPE_STORE
341 return $this->metadata[self::META_CHARSET];
363 if (empty($this->metadata[self::META_DESCRIPTION])) {
364 $this->metadata[self::META_DESCRIPTION] = $this->scopeConfig->getValue(
365 'design/head/default_description',
366 \
Magento\Store\Model\ScopeInterface::SCOPE_STORE
369 return $this->metadata[self::META_DESCRIPTION];
392 if (empty($this->metadata[self::META_TITLE])) {
396 return $this->metadata[self::META_TITLE];
407 $this->
setMetadata(self::META_KEYWORDS, $keywords);
418 if (empty($this->metadata[self::META_KEYWORDS])) {
419 $this->metadata[self::META_KEYWORDS] = $this->scopeConfig->getValue(
420 'design/head/default_keywords',
421 \
Magento\Store\Model\ScopeInterface::SCOPE_STORE
424 return $this->metadata[self::META_KEYWORDS];
447 return 'NOINDEX,NOFOLLOW';
450 if (empty($this->metadata[self::META_ROBOTS])) {
451 $this->metadata[self::META_ROBOTS] = $this->scopeConfig->getValue(
452 'design/search_engine_robots/default_robots',
453 \
Magento\Store\Model\ScopeInterface::SCOPE_STORE
456 return $this->metadata[self::META_ROBOTS];
467 return $this->pageAssets;
480 $asset = $this->assetRepo->createAsset($file);
498 $remoteAsset = $this->assetRepo->createRemoteAsset(
$url, $contentType);
514 $remoteAsset = $this->assetRepo->createRemoteAsset((
string)$href,
'unknown');
515 $this->pageAssets->add(
518 [
'attributes' =>
'rel="alternate" type="application/rss+xml" title="' .
$title .
'"']
533 $bodyClasses = $this->
getElementAttribute(self::ELEMENT_TYPE_BODY, self::BODY_ATTRIBUTE_CLASS);
534 $bodyClasses = $bodyClasses ? explode(
' ', $bodyClasses) : [];
536 $bodyClasses = array_unique($bodyClasses);
538 self::ELEMENT_TYPE_BODY,
539 self::BODY_ATTRIBUTE_CLASS,
540 implode(
' ', $bodyClasses)
557 if (array_search($elementType, $this->allowedTypes) ===
false) {
558 throw new \Magento\Framework\Exception\LocalizedException(
559 new \
Magento\Framework\
Phrase(
'%1 isn\'t allowed', [$elementType])
576 return $this->elements[$elementType][
$attribute] ??
null;
588 return $this->elements[$elementType] ?? [];
610 return $this->pageLayout;
620 return $this->favicon->getFaviconFile();
630 return $this->favicon->getDefaultFavicon();
640 if (empty($this->includes) && $this->isIncludesAvailable) {
641 $this->includes = $this->scopeConfig->getValue(
642 'design/head/includes',
643 \
Magento\Store\Model\ScopeInterface::SCOPE_STORE
646 return $this->includes;
setDescription($description)
setContentType($contentType)
addPageAsset($file, array $properties=[], $name=null)
const BODY_ATTRIBUTE_CLASS
getElementAttributes($elementType)
const HTML_ATTRIBUTE_LANG
setElementAttribute($elementType, $attribute, $value)
setBuilder(View\Layout\BuilderInterface $builder)
const META_X_UI_COMPATIBLE
addRemotePageAsset($url, $contentType, array $properties=[], $name=null)
getElementAttribute($elementType, $attribute)
__construct(View\Asset\Repository $assetRepo, View\Asset\GroupedCollection $pageAssets, App\Config\ScopeConfigInterface $scopeConfig, View\Page\FaviconInterface $favicon, Title $title, \Magento\Framework\Locale\ResolverInterface $localeResolver, $isIncludesAvailable=true)
setMetadata($name, $content)
if(!isset($_GET['name'])) $name