在PHP类中从TypoScript读取元标记

时间:2019-05-23 10:31:06

标签: php typo3 typo3-9.x

我正在使用TYPO3 9,我想实现基于Fluid的共享功能。因此,我想使用已经提供的元标记。

我编写了一个ViewHelper类,以使元标记可用于我的Fluid模板。在研究可能的解决方案时,我发现了两件事:

  1. 使用$GLOBALS['TSFE']->page['description'] = $newDescription;通过TSFE设置元数据。但是我无法使用$GLOBALS['TSFE']->page['description']

  2. 获取数据
  3. 使用TYPO3的新MetaTagManager。但似乎Manager并不包含通过TypoScript设置的元标记。

还有另一种方法可以读取PHP类中的所有已设置元标记吗?

1 个答案:

答案 0 :(得分:0)

在内容呈现期间,无法访问通过page.meta TypoScript添加的元标记。

原因很简单:在处理meta标签之前先呈现内容(请参见TYPO3\CMS\Frontend\Http\RequestHandler中的方法generatePageContentWithHeader

一个简单的解决方法是仅使用您的扩展程序/视图助手来处理所有相关的元标记。

一种更复杂的方法是某种形式的注册表(例如,静态属性),该注册表收集您要对现有元标记进行的所有更改。注册表将由您的视图助手填充。

然后,您可以调用在收集TypoScript元标记后 后执行的userFunc:

page.jsFooterInline.323 = USER
page.jsFooterInline.323.userFunc = My\Extension\Hooks\MetaHook->processMeta

您现在可以在processMeta中访问页面元数据(例如,page.meta.description,如下所示:

$registry = GeneralUtility::makeInstance(MetaTagManagerRegistry::class);
$metaDataArray = $registry->getManagerForProperty('description')->getProperty('description');