Получить исходный URL-адрес из UID в другом домене

Рассмотрим на мгновение следующее дерево страниц:

  • Website A (root page with domain record a.example.com)
    • Page A
      • Page A.1
    • Страница Б
    • Страница С
  • Website B (root page with domain record b.example.com)
    • Page X
      • Page Y (mountpoint of "Page A", with content from that page)

Чтобы сгенерировать канонические URL-адреса, мне нужно получить абсолютный URL-адрес исходной страницы. Я делаю это в типоскрипте 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 каким-то образом использует домен страницы, на которой в данный момент находится пользователь, вместо исходного домена, где фактически находится «Страница А».

Для завершения, вот некоторые значения, которые я уже установил в своем setup.txt:

config {
    absRefPrefix = /
    content_from_pid_allowOutsideDomain = 1
    typolinkCheckRootline = 1
    typolinkEnableLinksAcrossDomains = 1
}

Вопрос: как я могу получить исходный URL-адрес для uid страницы A?


person Lars Ebert    schedule 28.07.2016    source источник


Ответы (1)


Еще через несколько часов я нашел очень простой способ сгенерировать исходный URL без точек монтирования:

$tsfe = clone $GLOBALS['TSFE'];
$tsfe->MP = '';
$cObj = new ContentObjectRenderer($tsfe);
$url = $cObj->typolink_URL(array('parameter' => $uid, 'forceAbsoluteUrl' => 1));

Короче говоря, вместо того, чтобы использовать исходный TypoScriptFrontendController, который содержит точку монтирования, я просто клонирую его, удаляю точку монтирования, а затем генерирую URL-адрес через новый ContentObjectRenderer, созданный этим измененным TypoScriptFrontendController.

person Lars Ebert    schedule 29.07.2016
comment
Я был бы очень признателен за отзыв в виде комментария от того, кто проголосовал против. Я знаю, что это решение немного грязное, но это был единственный способ заставить его работать. Если вы знаете лучшую/более чистую версию, не стесняйтесь публиковать ответ самостоятельно. Или, по крайней мере, дайте мне знать, почему вы считаете мой ответ достойным комментария. - person Lars Ebert; 29.07.2016