2015-01-06 19 views
6

Tôi đang làm việc trên tiện ích mở rộng typo3 và tôi muốn tạo url từ id trang. Hiện tại tôi tạo url bằng cách thêm index.php?id=ID vào $GLOBALS['TSFE']->baseURL.Cách tạo url trang từ trang uid

Có cách nào khác để tạo url có thể đọc được từ id trang và nếu có, làm thế nào nó có thể được thực hiện?

+0

Bạn đang phát triển loại tiện ích mở rộng nào? Extbase hoặc piBase/AbstractPlugin? Vui lòng chia sẻ mã bạn hiện đang sử dụng. – lorenz

+0

tôi đang sử dụng phần mở rộng extbase –

+0

Vui lòng chia sẻ mã của bạn. Bạn có thể tạo liên kết trong Fluid - bạn có Chế độ xem lỏng không? – lorenz

Trả lời

10

Kể từ Extbase điều khiển có một đối tượng UriBuilder, bạn nên sử dụng nó:

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

Bạn cũng có thể thiết lập một mảng các đối số nếu bạn cần phải:

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

Hoặc, nếu bạn don' t cần tiền tố mở rộng:

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

(Tất nhiên bạn có thể kết hợp hai biến thể.)

Và sau đó sử dụng:

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

tôi có thể thêm các tham số url bổ sung thông qua phương thức này –

+2

Giống như cái gì? Có lẽ bạn có nghĩa là cùng một điều tôi đã mô tả với các đối số. Ví dụ trên sẽ tạo một URI với '' '& tx_myext_myplugin [article] = 999'''. – lorenz

+0

có, không có tên mở rộng –

4

Trong trường hợp bạn đang không ở trong bối cảnh điều khiển extbase, bạn có thể sử dụng chức năng Typo3 tiêu chuẩn:

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

Trong trường hợp đó bạn không có khởi $GLOBALS['TSFE'] và bạn muốn tránh lỗi này https://forge.typo3.org/issues/71361 bạn phải khởi tạo $GLOBALS['TSFE'] theo cách này:

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; 
      } 
     } 
Các vấn đề liên quan