Рассмотрим на мгновение следующее дерево страниц:
Чтобы сгенерировать канонические URL, мне нужно получить абсолютный URL с исходной страницы. Я делаю это в Typoscript userfunc на «Страница X», но что-то, кажется, не так:
Это возвращает UID страницы A, а не страницы 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
}
Вопрос в том, как я могу получить исходный URL для идентификатора страницы A?
Через несколько часов я нашел очень простой способ создания исходного URL без точек монтирования:
$tsfe = clone $GLOBALS['TSFE'];
$tsfe->MP = '';
$cObj = new ContentObjectRenderer($tsfe);
$url = $cObj->typolink_URL(array('parameter' => $uid, 'forceAbsoluteUrl' => 1));
Короче вместо использования оригинала TypoScriptFrontendController
, которая содержит точку монтирования, я просто клонирую ее, удаляю точку монтирования и затем генерирую URL через новый ContentObjectRenderer
созданный этим измененным TypoScriptFrontendController
,
Других решений пока нет …