Hallo,
ich arbeite gerade an einem "Backend Module" und benötige hier jetzt die (Frontend-)URL einer Seite.
Die PID der Seite habe ich. Da ich aber RealUrl verwende, möchte ich mir die URL von Typo3 bauen lassen.
Gibts da eine TypoLink-Funktion, die ich auch in einem Backend Module verwernden kann??
Gruß
Franky
tslib_pibase::pi_linkToPage schon angeschaut?
Ja, aber "pi" = PlugIn und das ist in einem Backend Module nicht verfügbar.
dann bind sie doch ein mit
require_once
und
t3lib_div::makeInstance
hallo Franky
Ich hatte das gleiche Problem und bin es es folgendermaßen angegangen
pi_base ist meiner Meinung nach nicht die Lösung. Die Linkfunktionen greifen ohnehin auf tslib/class.tslib_content.php (cObj) zurück.
#needed for TSFE
require_once(PATH_t3lib.'class.t3lib_timetrack.php');
require_once(PATH_t3lib.'class.t3lib_tsparser_ext.php');
require_once(PATH_t3lib.'class.t3lib_page.php');
require_once(PATH_t3lib.'class.t3lib_stdgraphic.php');
require_once($BACK_PATH.'sysext/cms/tslib/class.tslib_fe.php');
require_once($BACK_PATH.'sysext/cms/tslib/class.tslib_content.php');
require_once($BACK_PATH.'sysext/cms/tslib/class.tslib_gifbuilder.php');
function buildTSFE() {
/* Declare */
$temp_TSFEclassName = t3lib_div::makeInstanceClassName('tslib_fe');
/* Begin */
if (!is_object($GLOBALS['TT'])) {
$GLOBALS['TT'] = new t3lib_timeTrack;
$GLOBALS['TT']->start();
}
if (!is_object($GLOBALS['TSFE']) && $this->pid) {
//*** Builds TSFE object
$GLOBALS['TSFE'] = new $temp_TSFEclassName($GLOBALS['TYPO3_CONF_VARS'],$this->pid,0,0,0,0,0,0);
//*** Builds sub objects
$GLOBALS['TSFE']->tmpl = t3lib_div::makeInstance('t3lib_tsparser_ext');
$GLOBALS['TSFE']->sys_page = t3lib_div::makeInstance('t3lib_pageSelect');
//*** init template
$GLOBALS['TSFE']->tmpl->tt_track = 0;// Do not log time-performance information
$GLOBALS['TSFE']->tmpl->init();
$rootLine = $GLOBALS['TSFE']->sys_page->getRootLine($this->pid);
//*** This generates the constants/config + hierarchy info for the template.
$GLOBALS['TSFE']->tmpl->runThroughTemplates($rootLine,$template_uid);
$GLOBALS['TSFE']->tmpl->generateConfig();
$GLOBALS['TSFE']->tmpl->loaded=1;
//*** Get config array and other init from pagegen
$GLOBALS['TSFE']->getConfigArray();
$GLOBALS['TSFE']->linkVars = ''.$GLOBALS['TSFE']->config['config']['linkVars'];
if ($GLOBALS['TSFE']->config['config']['simulateStaticDocuments_pEnc_onlyP'])
{
foreach (t3lib_div::trimExplode(',',$GLOBALS['TSFE']->config['config']['simulateStaticDocuments_pEnc_onlyP'],1) as $temp_p)
{
$GLOBALS['TSFE']->pEncAllowedParamNames[$temp_p]=1;
}
}
//*** Builds a cObj
$GLOBALS['TSFE']->newCObj();
}
}
Damit hast du die "komplette" $GLOBALS['TSFE'] zur verfügung in der auch ein cObj Objekt vorhanden ist ($this->GLOBALS['TSFE']->cObj. Damit sollte man per typolink Funktion Links erstellen können.
Gruß Semidark
Hi Semidark,
leider klappt das mit dem Aufruf der Funktion typolink nicht, ich erhalte immer nur einen "/" innerhalb des hrefs, woran kann das liegen?
Ich möchte gerne das er mir anhand der PID die passen URL liefert.
Kann mir hier jemand helfen?
Gruß
Berganderwe
Hi josch,
hier meine Lösung:
require_once(PATH_tslib.'class.tslib_fe.php');
require_once(PATH_t3lib.'class.t3lib_userauth.php');
require_once(PATH_tslib.'class.tslib_feuserauth.php');
require_once(PATH_t3lib.'class.t3lib_cs.php');
require_once(PATH_tslib.'class.tslib_content.php');
require_once(PATH_t3lib.'class.t3lib_tstemplate.php');
require_once(PATH_t3lib.'class.t3lib_page.php');
function buildTSFE() {
$TSFEclassName = t3lib_div::makeInstanceClassName('tslib_fe');
if (!is_object($GLOBALS['TT'])) {
$GLOBALS['TT'] = new t3lib_timeTrack;
$GLOBALS['TT']->start();
}
// Create the TSFE class.
$GLOBALS['TSFE'] = new $TSFEclassName($GLOBALS['TYPO3_CONF_VARS'],$this->pid,'0',1,'','','','');
$GLOBALS['TSFE']->connectToMySQL();
$GLOBALS['TSFE']->initFEuser();
$GLOBALS['TSFE']->fetch_the_id();
$GLOBALS['TSFE']->getPageAndRootline();
$GLOBALS['TSFE']->initTemplate();
$GLOBALS['TSFE']->tmpl->getFileName_backPath = PATH_site;
$GLOBALS['TSFE']->forceTemplateParsing = 1;
$GLOBALS['TSFE']->getConfigArray();
}
dann die Funktion aufrufen und Link generieren:
$this->buildTSFE();
$cObj = t3lib_div::makeInstance('tslib_cObj');
$cObj->start(array(),'');
$urlParameters = array('L' => 1);
$linkURL = $GLOBALS['TSFE']->config['config']['baseURL'].$cObj->getTypoLink_URL(3,$urlParameters);
Mit $urlParameters und "L" kanns Du auf verschiedene Sprachen zugreiffen.
In die letzte Zeile "3" bedeutet die Seite-uid.
Getestet in Typo3 4.5.2
Viel Spaß.
....such schon ewig genau dafür eine Löung!! #angry#
schon verrückt dass das nicht einfacher geht... :o
...probiers gleich mal aus und geb dann ma feedback!!
sauber voancea - das klappt bestens!!!
Hab da noch gleich ne andere Frage, wie mach ich das am geschicktesten mit BE-Links. Also zB. im BE-Modul wieder mod1/index.php aufrufen + nen Parameter übergeben?
Ich würde im Backend wie im Frontend mit einer Templating-Sprache wie fluid arbeiten. Dort sollte es entsprechende viewhelper / Methoden für Link-Generierung geben.
ok - denke dann werd ich mir das mal näher anschauen.
Kommt man denk ich mal eh nicht drumherum, wenn man in Zukunft brauchbare Extensions schreiben will...
Danke!!
Tobi