[TYPO3-german] Extbase: Wie kann man eigene Javascript-Dateien am Seitenende einbinden?

Bergische Webschmiede post at bergische-webschmiede.de
Fri Mar 7 09:18:03 CET 2014


Hier noch die Lösung, um CSS/JS-Dateien Plugin-bezogen einzubinden:

1.
Ins Extension-TS-Setup schreibt man:

[userFunc = user_match(checkPlugin)]
page.includeCSS.mystylesheet =
EXT:myextension/Resources/Public/Css/stylesheet.css
page.includeCSS.mystylesheet.media = all
[end]

2. In die ext_localconf.php schreibt man folgende Funktion:

function user_match($cmd) {
  switch($cmd) {
    case 'checkPlugin':
      $fields  = 'uid';
      $tables  = 'tt_content';
      $where   = 'list_type LIKE "%plugin_signature%" AND pid=' .
$GLOBALS['TSFE']->id;
      $res = $GLOBALS['TYPO3_DB']->exec_SELECTquery( $fields, $tables,
$where );
      if( $GLOBALS['TYPO3_DB']->sql_num_rows($res) ) {
        return TRUE;
      }
      else {
        return FALSE;
      }
    break;
    case 'checkSomethingElse':

    break;
    default: return TRUE;
  }
}

Die Funktion überprüft, ob auf der gegebenen Seite Content-Elemente
eingebunden sind, die im Feld 'list_type' die Plugin-Signatur stehen haben.

Die Plugin-Signatur besteht normalerweise aus:
Extensionkey - Underscore - Pluginname
Das wird zu Beginn der Extensionentwicklung mit dem Extensionbuilder
festgelegt.

Man kann aber auch einfach in tt_content nachsehen, was dort im Feld
list_type eingetragen wurde.

Fertig - aus die Maus.

Beste Grüße
Stefan Padberg

Am 07.03.2014 08:17, schrieb Stefan Padberg : Bergische Webschmiede:
> Hi,
> 
> ich hab jetzt erstmal eine Typoscript-Lösung mit Conditions gefunden:
> 
> [globalVar = GP:tx_myext_plugin|myvar>0]
> page.includeJSFooterlibs = EXT:myext/Resources/Public/Js/myjavascript.js
> [end]
> 
> Mit 'myvar' wird in diesem Fall gesteuert, welches Objekt in der
> Single-Ansicht angezeigt werden soll.
> 
> 
> Das genügt für mein aktuelles Problem. Was leider nicht geklappt hat,
> und das scheint mir ein Bug zu sein, ist die Condition mit globalString
> aufzubauen:
> 
> [globalString = GP:tx_myext_plugin|action=show]
> page.includeJSFooterlibs = EXT:myext/Resources/Public/Js/myjavascript.js
> [end]
> 
> Das wäre noch etwas allgemeingültiger. Dann könnte man nämlich ganz
> gezielt auf alle actions und controller abprüfen.
> 
> Nur leider nicht auf die default action und den default controller, weil
> die nicht in den GET-Variablen auftauchen! Also für das Problem, wie man
> generell Dateien nur für ein Plugin einbindet, haben wir noch keine
> Typoscript-Lösung.
> 
> Beste Grüße
> Stefan Padberg
> 
> 
> 
> 
> Am 06.03.2014 17:50, schrieb Bernhard Prange:
>> Ich habs nicht ausprobiert... und sicherlich geht sowas nicht für eine
>> Erweiterung die übers TER und Entwickler-Unabhängig funktionieren würde
>> aber du kannst in Extension TS einfach in mit einem sehr hohen
>> Pageobjekt arbeiten:
>>
>> z.B.
>>
>> page.99999 = TEXT
>> page.99999.value (
>> Deine Textanweisung
>> )
>>
>> ...das funktioniert natürlich nur wenn der Entwickler dann auch page =
>> PAGE definiert.
>>
>> Am 06.03.2014 13:38, schrieb Stefan at lists.typo3.org:
>>> Hallo,
>>>
>>> ich möchte bei einer eigenen Extbase-Extension eigenen Javascript-Code
>>> einbinden, und zwar am Seitenende!
>>>
>>> Mit
>>>
>>> $this->response->addAdditionalHeaderData('<script src="myExtJs.js"
>>> type="text/javascript"></script>')
>>>
>>> werden die Dateien immer im Seiten-HEAD eingebunden, und zwar kurz vor
>>> dem BODY-Tag. So habe ich überhaupt keine Kontrolle über die
>>> Reihenfolge. Das finde ich blöd, denn ich binde jQuery immer am
>>> Seitenende ein - falls es benötigt wird, denn ich gehöre noch zu der
>>> Sorte von Konservativen, die meinen, jQuery muss nicht grundsätzlich
>>> global eingebunden werden, und wenn, dann am Seitenende. Blöderweise
>>> gibt das manchmal probleme, wenn andere Skripte, die jquery benötigen
>>> vorher eingebunden wurden. Nach meiner Erfahrung ist die Kontrolle der
>>> Reihenfolge der Einbindung der Javascript-Dateien absolut wichtig.
>>>
>>> Denkbare Wege:
>>> Gibt es eine Möglichkeit, den Aufruf vom Controller aus ins
>>> TypoScript-Setup einzubauen? Sowas wie:
>>> $this->addTyposcriptJSFooterlib()
>>>
>>> Die Javacript-Datei soll optimalerweise nur auf der Seite mit der
>>> Detailansicht erscheinen, muss also in der showAction vom Controller
>>> eingebunden werden.
>>>
>>> Oder gibt es viewHelper, die solche Dateieinbindungen ans Seitenende
>>> stellen?
>>>
>>> Ich hab auch schonmal überlegt, ob es nicht einen Weg im Typoscript
>>> selber gibt. Dazu müsste ich bei einem Seitenaufruf den list_type aller
>>> Contentelemente dieser Seite abprüfen, ob ein bestimmtes CE dabei ist,
>>> das eine bestimmte Javascript-Datei benötigt.
>>>
>>>
>>>
>>> Wie geht ihr in so einem Fall vor?
>>>
>>> Gruß
>>> Stefan Padberg
>>> _______________________________________________
>>> TYPO3-german mailing list
>>> TYPO3-german at lists.typo3.org
>>> http://lists.typo3.org/cgi-bin/mailman/listinfo/typo3-german
>>
> 



More information about the TYPO3-german mailing list