Как да създадете URL адрес на страница от uid на страницата

Работя върху разширение typo3 и искам да генерирам url от идентификатора на страницата. В момента създавам URL адреса, като добавям index.php?id=ID към $GLOBALS['TSFE']->baseURL.

Има ли друг начин за създаване на четим url от идентификатора на страницата и ако да, как може да се направи?


person Community    schedule 06.01.2015    source източник
comment
Какъв вид разширение разработвате? Extbase или piBase/AbstractPlugin? Моля, споделете кода, който използвате в момента.   -  person lorenz    schedule 06.01.2015
comment
използвам разширение extbase   -  person    schedule 06.01.2015
comment
Моля, споделете вашия код. Можете да създавате връзки във Fluid - имате ли Fluid изглед?   -  person lorenz    schedule 06.01.2015
comment
$page_id = ИД на страница от друга функция; $url = $GLOBALS['TSFE']-›baseURL .'index.php?id=' .$page_id; this-›view-›assign('url', $url);   -  person    schedule 06.01.2015
comment
За разширение Extbase @lorenz ви даде валиден отговор, методът typolink е наследен от разработката на ext преди MVC   -  person biesior    schedule 06.01.2015


Отговори (4)


Тъй като контролерите на 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();
person lorenz    schedule 06.01.2015
comment
мога ли да добавя допълнителни url параметри чрез този метод - person ; 06.01.2015
comment
Като например? Може би имаш предвид същото, което вече описах с аргументи. Примерът по-горе ще създаде URI с &tx_myext_myplugin[article]=999. - person lorenz; 06.01.2015
comment
Ами ако не сте в контекста на Extbase, а в командния контролер на Symfony (›= TYPO3 9)? - person Sybille Peters; 21.12.2020
comment
Добре, намерих го, можете да използвате BackendUtility::getPreviewUrl($pid); - person Sybille Peters; 21.12.2020

В случай, че не сте в контекста на контролера на extbase, можете да използвате стандартната функционалност на TYPO3:

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

В случай, че не сте инициализирали $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;
            }
        }
person Bjørson Ålmer    schedule 03.04.2017

Генериране на преден плъгин/връзка за разширение от Backend модул с параметър cHash

ЗАБЕЛЕЖКА: Не забравяйте да включите линиите по-долу в горната част на вашия контролер

use TYPO3\CMS\Core\Utility\GeneralUtility;
use TYPO3\CMS\Frontend\Page\CacheHashCalculator;

$siteUrl = GeneralUtility::getIndpEnv('TYPO3_SITE_URL') . 'index.php?';
$query = array(
    'id' => 57, // Target page id
    'tx_event_eventfe' => array(
        'controller' => 'Event',
        'action' => 'show',
        'eventId' => 15 // Record uid
    )
);

$cacheHasObj = GeneralUtility::makeInstance(CacheHashCalculator::class);
$cacheHashArray = $cacheHasObj->getRelevantParameters(GeneralUtility::implodeArrayForUrl('', $query));
$query['cHash'] = $cacheHasObj->calculateCacheHash($cacheHashArray);
$uri = $siteUrl . http_build_query($query);
person Jayprakash Rathod    schedule 27.09.2019