我正在使用TYPO3 9,我想实现基于Fluid的共享功能。因此,我想使用已经提供的元标记。
我编写了一个ViewHelper类,以使元标记可用于我的Fluid模板。在研究可能的解决方案时,我发现了两件事:
使用$GLOBALS['TSFE']->page['description'] = $newDescription;
通过TSFE设置元数据。但是我无法使用$GLOBALS['TSFE']->page['description']
使用TYPO3的新MetaTagManager。但似乎Manager并不包含通过TypoScript设置的元标记。
还有另一种方法可以读取PHP类中的所有已设置元标记吗?
答案 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');