2015-01-06 5 views
6

से पेज यूआरएल कैसे बनाएं I टाइपो 3 एक्सटेंशन पर काम कर रहा हूं और मैं पेज आईडी से यूआरएल उत्पन्न करना चाहता हूं। वर्तमान में मैं index.php?id=ID से $GLOBALS['TSFE']->baseURL जोड़कर यूआरएल बना सकता हूं।पेज यूआईडी

क्या पृष्ठ आईडी से एक पठनीय यूआरएल बनाने का कोई और तरीका है, और यदि हां, तो यह कैसे किया जा सकता है?

+0

आप किस प्रकार का विस्तार विकसित कर रहे हैं? Extbase या piBase/AbstractPlugin? कृपया उस कोड को साझा करें जिसका आप वर्तमान में उपयोग कर रहे हैं। – lorenz

+0

मैं extbase एक्सटेंशन –

+0

का उपयोग कर रहा हूं कृपया अपना कोड साझा करें। आप फ्लूइड में लिंक बना सकते हैं - क्या आपके पास द्रव दृश्य है? – lorenz

उत्तर

10

के बाद से Extbase नियंत्रकों एक UriBuilder वस्तु है, आप इसे उपयोग करना चाहिए:

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

तुम भी तर्क की एक सरणी सेट कर सकते हैं अगर आप की जरूरत करने के लिए:

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

या, आप डॉन अगर ' टी एक विस्तार उपसर्ग की जरूरत है: (। बेशक आप दो वेरिएंट मिश्रण कर सकते हैं)

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

और फिर उपयोग करें:

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

से _inherited_ है, क्या मैं इस विधि –

+2

के माध्यम से अतिरिक्त यूआरएल पैरामीटर जोड़ सकता हूं? हो सकता है कि आप वही बात मानें जो मैंने पहले से ही तर्कों के साथ वर्णित किया है। ऊपर दिया गया उदाहरण '' '' और tx_myext_myplugin [आलेख] = 999''' के साथ एक यूआरआई बनाएगा। – lorenz

+0

हाँ, एक्सटेंशन नाम के बिना –

4

मामले में आप extbase नियंत्रक संदर्भ में नहीं हैं, आप मानक typo3 कार्यक्षमता का उपयोग कर सकते हैं:

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

मामले कि आप $GLOBALS['TSFE'] प्रारंभ की सुविधा नहीं है और क्या आप इस बग से बचना चाहेंगे https://forge.typo3.org/issues/71361 आपको $GLOBALS['TSFE'] इस तरह से प्रारंभ करना होगा:

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; 
      } 
     }