Zum Inhalt springen

TypoLink in Backend Modules

Erstellt am 21. März 2006 · 10 Antworten · letzte Antwort am 30. Juni 2011

Tags: Frage

franky2 ·

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

semidark ·

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

josch1337 ·

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

voancea ·

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ß.

ToBe ·

....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!!

ToBe ·

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?

aemka ·

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.

ToBe ·

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