2015-01-06 15 views
6

Pracuję nad rozszerzeniem literówki3 i chcę wygenerować adres URL z identyfikatora strony. Obecnie tworzę URL, dołączając index.php?id=ID do $GLOBALS['TSFE']->baseURL.Tworzenie adresu URL strony ze strony

Czy istnieje inny sposób na stworzenie czytelnego adresu URL z identyfikatora strony, a jeśli tak, jak można to zrobić?

+0

Jakiego rodzaju rozszerzenie rozwijasz? Extbase lub piBase/AbstractPlugin? Udostępnij kod, z którego aktualnie korzystasz. – lorenz

+0

Używam rozszerzenia extbase –

+0

Proszę udostępnić swój kod. Możesz budować linki w Fluid - czy masz widok Fluid? – lorenz

Odpowiedz

10

Ponieważ kontrolery Extbase mieć obiekt UriBuilder, należy go używać:

$uri = $this->uriBuilder->reset() 
    ->setTargetPageUid($pageUid) 
    ->setCreateAbsoluteUri(TRUE) 
    ->build(); 

Można również ustawić tablicę argumentów, jeśli chcesz:

$arguments = array(
    array('tx_myext_myplugin' => 
     array(
      'article' => $articleUid, 
     ) 
    ) 
); 

Lub, jeśli don” t potrzebują prefiks rozszerzenia: (. oczywiście można zmieszać dwa warianty)

$arguments = array(
    'logintype' => 'login' 
); 

a następnie użyć:

$uri = $this->uriBuilder->reset() 
    ->setTargetPageUid($pageUid) 
    ->setCreateAbsoluteUri(TRUE) 
    ->setArguments($arguments) 
    ->build(); 
+0

czy mogę dodać dodatkowe parametry adresu URL za pomocą tej metody –

+2

Co? Może masz na myśli to samo, co już opisałem argumentami. Powyższy przykład utworzyłby URI z '' 'i tx_myext_myplugin [article] = 999'''. – lorenz

+0

Tak, bez nazwy rozszerzenia –

4

W przypadku, gdy nie są w Extbase kontekście kontrolera, można użyć standardowej funkcjonalności TYPO3:

$url = $GLOBALS['TSFE']->cObj->typoLink_URL(
    array(
     'parameter' => $pageUid, 
     'forceAbsoluteUrl' => true, 
    ) 
); 
0

W przypadku, gdy nie są inicjowane $GLOBALS['TSFE'] i czy chcesz uniknąć tego błędu? https://forge.typo3.org/issues/71361 musisz zainicjować w ten sposób:

if (!isset($GLOBALS['TSFE'])) { 

      $pid = (int)GeneralUtility::_POST('pid'); 
      $rootline = 
       \TYPO3\CMS\Backend\Utility\BackendUtility::BEgetRootLine($pid); 

      foreach ($rootline as $page) { 
       if ($page['is_siteroot']) { 
        $id = (int)$page['uid']; 
        break; 
       } 
      } 

      $type = 0; 

      if (!is_object($GLOBALS['TT'])) { 
       $GLOBALS['TT'] = new \TYPO3\CMS\Core\TimeTracker\NullTimeTracker; 
       $GLOBALS['TT']->start(); 
      } 

      $GLOBALS['TSFE'] = 
       GeneralUtility::makeInstance('TYPO3\CMS\Frontend\Controller\TypoScriptFrontendController', 
              $GLOBALS['TYPO3_CONF_VARS'], $id, $type); 
      $GLOBALS['TSFE']->connectToDB(); 
      $GLOBALS['TSFE']->initFEuser(); 
      $GLOBALS['TSFE']->determineId(); 
      $GLOBALS['TSFE']->initTemplate(); 
      $GLOBALS['TSFE']->getConfigArray(); 

      if 
      (\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::isLoaded('realurl') 
      ) { 
       $host = 
        \TYPO3\CMS\Backend\Utility\BackendUtility::firstDomainRecord($rootline); 
       $_SERVER['HTTP_HOST'] = $host; 
      } 
     } 
Powiązane problemy