Zum Inhalt springen

Js und Css im Controller per pageRenderer

Erstellt am 29. März 2012 · 4 Antworten · letzte Antwort am 21. Februar 2013

Tags: Frage

creativeworkx ·

Hallo,

ich habe folgende Situation: Ich möchte per $GLOBALS['TSFE']->getPageRenderer() eine JS Footer Library einbinden.
Ich befinde mich in einer Action eines Controllers (natürlich extbase basierend).

Dazu rufe ich folgende Funktion auf:

$GLOBALS['TSFE']->getPageRenderer()->addJsFooterLibrary('some_random_string', 'https://ajax.googleapis.com/ajax/libs/jquery/1.7/jquery.min.js', 'text/javascript', FALSE, FALSE, '', TRUE);

Die Signatur der Methode habe ich der class.t3lib_pagerenderer.php entnommen

public function addJsFooterLibrary($name, $file, $type = 'text/javascript', $compress = FALSE, $forceOnTop = FALSE, $allWrap = '', $excludeFromConcatenation = FALSE)

Das funktioniert nicht. Ich erhalte keine Fehlermeldung aber die jQuery Einbindung erscheint auch nicht im Frontend.

Ich habe weiters dann versucht eine lokal vorhande Datei über den gleichen Weg einzubinden:

$GLOBALS['TSFE']->getPageRenderer()->addJsFooterLibrary('some_random_string', ''.t3lib_extMgm::siteRelPath($this->request->getControllerExtensionKey()) . 'Resources/Public/Js/jquery.tablesorter.min.js', 'text/javascript', FALSE, FALSE, '', TRUE);

Auch das funktioniert nicht. Es erscheint einfach nichts im Frontend.

Caches habe ich gelöscht.

Per Typoscript eine JsFooterLib hinzufügen funktioniert problemlos, nur die Einbindung im Controller (die ich für mein Szenario benötige) funktioniert leider überhaupt nicht.

PS: Ich habe bereits kurz die class.t3lib_pagerenderer.php debugged. Der Eintrag wird angelegt, vor dem rendern wird jedoch die jsLibs wieder geleert scheinbar.

Hat wer von euch eine Idee?

creativeworkx ·

So ... Problem gelöst. 8-)
Ich schreibe es hier rein, vielleicht erspart es euch ja auch einiges an Debugzeit.

Hier nochmals der Aufruf

$GLOBALS['TSFE']->getPageRenderer()->addJsFooterLibrary('some_random_string', 'https://ajax.googleapis.com/ajax/libs/jquery/1.7/jquery.min.js', 'text/javascript', FALSE, FALSE, '', TRUE);

(Sauberer ist es die pageRenderer Klasse per DI in den Controller zu injecten und mit dieser dann zu arbeiten)

Der Aufruf ist richtig. Er funktioniert jedoch nicht, wenn die Controller/Action Kombination USER_INT ist

Ob die Controller/Action Kombination USER oder USER_INT ist, wird in der ext_localconf.php der Erweiterung eingestellt.

Tx_Extbase_Utility_Extension::configurePlugin(
	$_EXTKEY,				// The extension name (in UpperCamelCase) or the extension key (in lower_underscore)
	'Pi1',					// A unique name of the plugin in UpperCamelCase
	array(					// An array holding the controller-action-combinations that are accessible
		'Controller' => 'index',	// The first controller and its first action will be the default
		),
	array(					// An array of non-cachable controller-action-combinations (they must already be enabled)
		'Controller' => 'index', // wenn hier 'Controller' => 'index' entfernt wird, dann ist die Controller/Action Kombination vom Typ USER und der Aufruf funktioniert und das Js wird hinzugefügt.
		)
);
jank ·

Danke für den Tip!!! habe das gleich mal verwendet um noch die js einer extension nur in eriner Action zu laden:

$GLOBALS['TSFE']->getPageRenderer()->addJsFooterFile(t3lib_extMgm::siteRelPath('ext_key'). 'Resources/Public/JavaScript/ext-jquery-plugin.js');