从其他域上的UID获取原始URL


Get the original URL from an UID on a different domain

暂时考虑以下页面树:

  • 网站A(带有域记录的根页面A.example.com)
    • 第A页
      • 第A.1页
    • 第B页
    • 第C页
  • 网站B(带有域记录B.example.com的根页面)
    • 第X页
      • 第Y页("第A页"的装入点,包含该页的内容)

要生成规范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。