暂时考虑以下页面树:
- 网站A(带有域记录的根页面A.example.com)
- 第A页
- 第A.1页
- 第B页
- 第C页
- 第A页
- 网站B(带有域记录B.example.com的根页面)
- 第X页
- 第Y页("第A页"的装入点,包含该页的内容)
- 第X页
要生成规范URL,我需要从原始页面获取绝对URL。我在"第X页"上的一个打字脚本userfunc中这样做,但似乎出了问题:
这返回页面A的uid,而不是页面X:
$GLOBALS['TSFE']->page['uid'];
但这不会返回预期的URL"a.example.com/page-a/",而是"b.example.com/page-x/page-y":
$GLOBALS['TSFE']->cObj->typoLink_URL([
'parameter' => $GLOBALS['TSFE']->page['uid'],
'forceAbsoluteUrl' => 1
]);
显然,TYPO3仍然以某种方式使用用户当前所在页面的域,而不是"页面A"实际所在的原始域。
为了完成起见,这里有一些我已经在setup.txt中设置的值:
config {
absRefPrefix = /
content_from_pid_allowOutsideDomain = 1
typolinkCheckRootline = 1
typolinkEnableLinksAcrossDomains = 1
}
问题是:如何获取页面A的uid的原始URL?
再过几个小时,我发现了一种非常简单的方法来生成没有挂载点的原始URL:
$tsfe = clone $GLOBALS['TSFE'];
$tsfe->MP = '';
$cObj = new ContentObjectRenderer($tsfe);
$url = $cObj->typolink_URL(array('parameter' => $uid, 'forceAbsoluteUrl' => 1));
简而言之,我不使用包含装入点的原始TypoScriptFrontendController
,而是简单地克隆它,删除装入点,然后通过修改后的TypoScriptFrontendController
创建的新ContentObjectRenderer
生成url。