Pertanyaan Cara membuat url halaman dari halaman uid


Saya sedang bekerja pada ekstensi typo3 dan saya ingin menghasilkan url dari id halaman. Saat ini saya membuat url dengan menambahkan index.php?id=ID untuk $GLOBALS['TSFE']->baseURL.

Apakah ada cara lain untuk membuat url yang dapat dibaca dari id halaman, dan jika ya, bagaimana cara melakukannya?


7
2018-01-06 10:49


asal


Jawaban:


Karena pengendali Extbase memiliki objek UriBuilder, Anda harus menggunakannya:

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

Anda juga dapat mengatur serangkaian argumen jika Anda perlu:

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

Atau, jika Anda tidak memerlukan awalan ekstensi:

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

(Tentu saja Anda dapat mencampur dua varian.)

Dan kemudian gunakan:

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

12
2018-01-06 11:59



Jika Anda tidak dalam konteks pengendali extbase, Anda dapat menggunakan fungsionalitas TYPO3 standar:

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

4
2018-01-04 13:52



Jika Anda belum menginisialisasi $GLOBALS['TSFE'] dan apakah Anda ingin menghindari bug ini https://forge.typo3.org/issues/71361 Anda harus menginisialisasi $GLOBALS['TSFE'] lewat sini:

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

0
2018-04-03 09:25