[TYPO3-UG Dutch] constante frontendtemplate uitlezen in backend extensie

Jigal van Hemert jigal at xs4all.nl
Thu Jul 22 17:34:12 CEST 2010


Hoi,

Muriel le Pair wrote:
> Op 21-7-2010 14:24, Frans van der Veen[netcreators] schreef:
>> Muriel le Pair wrote:
>>> Hoe lees ik een constante van de frontend template uit in een backend
>>> extensie?
> Wat ik wil is eigenlijk vrij simpel. In een CMS komen meerdere websites 
> te staan met een template switch (backend extension) waarbij men zelf de 
> gewenste template kan selecteren. De templates voor root 1 zijn anders 
> dan voor root 2. dus ik wil graag dat men bij elke site alleen de 
> templates kan selecteren voor die specifieke site.

In het eerste voorbeeld wat je stuurde:
 >>> class tx_mijnextensie_pi1 extends tslib_pibase {
zet je iedereen op het verkeerde been doordat je tslib_pibase gebruikt. 
Dit is vrij specifiek voor FE plugins.

Als je de kickstarter een BE module laat maken (gebaseerd op 
t3lib_SCbase, dan zul je zien dat daarin de gekozen pagina in de 
pagetree als $this->id beschikbaar wordt gesteld.

Ik vermoed echter dat je een uitbreiding van de page properties wilt 
bouwen. Je zou eens in TemplaVoilà kunnen kijken hoe die dat gebouwd hebben.

Zo is het veld toegevoegd via (aantal configuratie-items weggelaten 
omwille van de ruimte):
	'tx_templavoila_ds' => array (
		'config' => array (
			'type' => 'select',
			'items' => Array (
				array('',0),
			),
			'allowNonIdValues' => 1,
			'itemsProcFunc' => 
'tx_templavoila_handleStaticdatastructures->dataSourceItemsProcFunc',
		)
	),

Een select-box met een functie in 
class.tx_templavoila_handlestaticdatasctructures.php :

public function dataSourceItemsProcFunc(array &$params, t3lib_TCEforms& 
$pObj) {
	$storagePid = $this->getStoragePid($params, $pObj);
(...)

He, interessant; de functie begint met het zoeken naar de storage Pid en 
die is in TSConfig gedefinieerd!
De parameters $params en $pObj worden door TYPO3 meegestuurd en die 
bevatten de sleutel tot het vinden van de "huidige" pagina, etc.

protected function getStoragePid(array &$params, t3lib_TCEforms &$pObj) {
		// Get default first
	$tsConfig = 
&$pObj->cachedTSconfig[$params['table'].':'.$params['row']['uid']];
	$storagePid = intval($tsConfig['_STORAGE_PID']);
		// Check for alternative storage folder
	$field = $params['table'] == 'pages' ? 'uid' : 'pid';
	$modTSConfig = t3lib_BEfunc::getModTSconfig($params['row'][$field], 
'tx_templavoila.storagePid');
	if (is_array($modTSConfig) && t3lib_div::testInt($modTSConfig['value'])) {
		$storagePid = intval($modTSConfig['value']);
	}
	return $storagePid;
}

Deze functie laat goed zien hoe je een waarde uit TSConfig kunt 
uitlezen. Dit is vergelijkbaar met Typoscript voor de FE; alle TSConfig 
instellingen worden vanaf de root t/m de opgevraagde pagina verzameld en 
daaruit wordt de waarde gelezen.

Het lijkt me dan ook verstandig om niet een Typoscript constante te gaan 
gebruiken, maar een TSConfig waarde (simpelweg in de page properties in 
te stellen). Naar gelang die waarde kun je dan de beschikbare templates 
presenteren voor selectie in een extra veld in de page properties.

-- 
Jigal van Hemert.


More information about the TYPO3-UG-Dutch mailing list