incore_twitter: jQuery-Einbindung unterbinden (auch generell für andere Extensions) [Gelöst]

  • mrtyu mrtyu
    T3PO
    0 x
    16 Beiträge
    0 Hilfreiche Beiträge
    21. 03. 2011, 12:09

    Hallo zusammen,

    ich habe folgendes Problem. Ich möchte die Extension incore_twitter einsetzen, jQuery binde ich aber projektweit über t3jquery.

    In der class.tx_incoretwitter_pi1.php steht aber Folgendes:

    1. $GLOBALS['TSFE']->additionalHeaderData[$this->prefixId] = '
    2. <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
    3. <script type="text/javascript" src="typo3conf/ext/incore_twitter/js/jScrollPane/jquery.mousewheel.js"></script>
    4. <script type="text/javascript" src="typo3conf/ext/incore_twitter/js/jScrollPane/jScrollPane-1.2.3.min.js"></script>
    5. <script type="text/javascript" src="typo3conf/ext/incore_twitter/js/jQueryTwitter.js"></script>
    6. ';

    Ergebnis: jQuery zweimal eingebunden. Klar, so, wie der Entwickler von incore_twitter das gemacht hat, ist kein besonders schöner Programmierstil, aber gibt es dennoch einen Weg, sich evtl. per TypoScript in die Ausgabe reinzuhängen und diese additionalHeaderData aus der Extension mit eigenen Angaben zu überschreiben?

    Ich will die Seite am besten vollständig updatesicher gestalten, daher kommt eine manuelle Änderung des Quellcodes nicht infrage.

    Die Frage ist hier im Zusammenhang mit incore_twitter entstanden, aber sicherlich könnte die Problemstellung auch für andere Extensions relevant sein.

    Vielen Dank für Eure Rückmeldungen und eine schöne Woche

    mrtyu


  • 1
  • aemka aemka
    Jedi-Meister
    0 x
    388 Beiträge
    0 Hilfreiche Beiträge
    21. 03. 2011, 14:22

    Ich habe es noch nie versucht, aber du könntest eine Mini-Extension schreibten, die danach eingebunden wird und unset($GLOBALS['TSFE']->additionalHeaderData['tx_incoretwitter_pi1']); ausführt.

  • mrtyu mrtyu
    T3PO
    0 x
    16 Beiträge
    0 Hilfreiche Beiträge
    22. 03. 2011, 10:36

    [quote="aemka"]
    Ich habe es noch nie versucht, aber du könntest eine Mini-Extension schreibten, die danach eingebunden wird und unset($GLOBALS['TSFE']->additionalHeaderData['tx_incoretwitter_pi1']); ausführt.
    [/quote]

    Hallo aemka,

    vielen Dank für den Tipp, leider funktioniert es bei mir noch nicht wie gewünscht. Ich habe eine Mini-Extension mit dem Kickstarter erstellt, dann ein Frontend-Plugin ausgewählt und "Just include library" angeklickt. In dem Plugin habe ich dann alles, was da sonst vom Kickstarter aus stand, stehen lassen und nur in der main-Methode hingeschrieben:

    1. function main($content, $conf) {
    2.  
    3. unset($GLOBALS['TSFE']->additionalHeaderData['tx_incoretwitter_pi1']);
    4. }

    Die Extension ist auch installiert, dennoch zeigt es noch keine Wirkung. Mache ich etwas falsch?

    Danke schön im Voraus für die Hilfe!

    mrtyu

  • aemka aemka
    Jedi-Meister
    0 x
    388 Beiträge
    0 Hilfreiche Beiträge
    22. 03. 2011, 12:25

    So lange die Extension nirgends eingesetzt ist, wird der code in main nie ausgeführt. Ich würde gar kein frontend plugin draus machen und das nur in die ext_localconf.php der Extension schreiben. das sollte schon reichen, zumindest wenn das überhaupt so möglich ist.

  • mrtyu mrtyu
    T3PO
    0 x
    16 Beiträge
    0 Hilfreiche Beiträge
    22. 03. 2011, 13:08

    [quote="aemka"]
    So lange die Extension nirgends eingesetzt ist, wird der code in main nie ausgeführt. Ich würde gar kein frontend plugin draus machen und das nur in die ext_localconf.php der Extension schreiben. das sollte schon reichen, zumindest wenn das überhaupt so möglich ist.
    [/quote]

    Danke für die Antwort! Leider klappt das wohl so nicht, habe jetzt das Frontend-Plugin, welches ich in meiner Hilfsextension erstellt habe, wieder entfernt und in der ext_localconf.php den folgenden Inhalt stehen:

    1. <?php
    2. if (!defined('TYPO3_MODE')) {
    3. die ('Access denied.');
    4. }
    5.  
    6. unset($GLOBALS['TSFE']->additionalHeaderData['tx_incoretwitter_pi1']);
    7.  
    8. ?>

    Leider werden dennoch die Dateien im additionalHeaderData eingebunden. Dabei habe ich das Gefühl, dass ich auf

    1. $GLOBALS['TSFE']->additionalHeaderData['tx_incoretwitter_pi1']

    gar nicht zugreifen kann, da ich den Inhalt auch nicht auslesen konnte - weder mit print_r[/i] noch mit [i]debug.

    Gibt es vielleicht noch irgendwelche Möglichkeiten, das gewünschte Ziel zu erreichen?

    Update: Natürlich habe ich jedes Mal auch den Cache geleert

  • aemka aemka
    Jedi-Meister
    0 x
    388 Beiträge
    0 Hilfreiche Beiträge
    22. 03. 2011, 13:48

    joah, es war auch nur so eine Idee von mir. Vlt. geht das wirklich nicht.

    Wahrscheinlich ist $TSFE zu dem Zeitpunkt nicht initialisiert.

  • mrtyu mrtyu
    T3PO
    0 x
    16 Beiträge
    0 Hilfreiche Beiträge
    25. 03. 2011, 10:08

    Hallo zusammen,

    ich habe es mittlerweile per XCLASS hinbekommen, hier die Lösung:

    1. Eine Mini-Extension incore_twitter_ext mit dem Kickstarter erstellen - nur "General Info" eintragen, keine Plug-Ins u.a.

    2. In der Extension zwei Dateien erstellen:

    ext_localconf.php

    1. <?php
    2.  
    3. if (!defined ('TYPO3_MODE')) die ('Access denied.');
    4.  
    5. $TYPO3_CONF_VARS['FE']['XCLASS']['ext/incore_twitter/pi1/class.tx_incoretwitter_pi1.php'] = t3lib_extMgm::extPath($_EXTKEY).'class.ux_tx_incoretwitter_pi1.php';
    6.  
    7. ?>

    class.ux_tx_incoretwitter_pi1.php

    1. <?php
    2.  
    3. class ux_tx_incoretwitter_pi1 extends tx_incoretwitter_pi1 {
    4.  
    5. function main($content, $conf) {
    6. $this->init();
    7. $this->conf = $conf;
    8. $this->pi_setPiVarDefaults();
    9. $this->pi_loadLL();
    10.  
    11. $this->lConf;
    12.  
    13. $tweetUsersArray = t3lib_div::trimExplode(',',$this->lConf['twitteraccounts']);
    14. $tweetUsers = "['".implode("', '", $tweetUsersArray)."']";
    15. $uid = $this->cObj->data['uid'];
    16. $tweetLimit = $this->lConf['twittercounts'];
    17. if ($tweetLimit == 0) { $tweetLimit = 10;}
    18. $content = '
    19. <script type="text/javascript">
    20. var tweetUsers = '.$tweetUsers.';
    21. var tweetsCount = '.$tweetLimit.';
    22. var buildString = "";
    23. var containerId = \'#tweet-container-'.$uid.'\';
    24. $(document).ready(function(){
    25. for(var i=0;i<tweetUsers.length;i++) {
    26. if(i!=0) buildString+=\'+OR+\';
    27. buildString+=\'from:\'+tweetUsers[i];
    28. }
    29. var fileref = document.createElement(\'script\');
    30. fileref.setAttribute("type","text/javascript");
    31. fileref.setAttribute("src", "http://search.twitter.com/search.json?q="+buildString+"&callback=TweetTick&rpp="+tweetsCount);
    32. document.getElementsByTagName("head")[0].appendChild(fileref);
    33. });
    34. </script>
    35. <div id="tweet-container-'.$uid.'" class="tweet-container">Loading..</div>
    36. <div id="scroll"></div>
    37. ';
    38. return $this->pi_wrapInBaseClass($content);
    39. }
    40.  
    41. }
    42.  
    43. ?>

    3. Extension installieren, Cache leeren, JS-Dateien und jQuery separat einbinden.

    Viele Grüße

    mrtyu

  • 1