Funktionale Erweiterung von bestehenden Extensions

  • chrisi51 chrisi51
    Padawan
    0 x
    45 Beiträge
    0 Hilfreiche Beiträge
    08. 06. 2011, 15:21

    Hallo,

    ich such mich gerade dumm und dämlich nach einer Information, wie man wirklich richtig und sauber eine Extension in ihrer Funktionalität erweitert/anpasst.

    Konkret möchte ich an der tt_news ein zwei Funktion überschreiben bzw. abändern.

    Dabei geht es mir um die Funktion pi_list_browseresults(), welche tt_news auch nur aus pi_base übernimmt und das Paging bei den News-Listen übernimmt. Da mit die hier bereitgestellten Parameter zur Anpassung nicht ausreichen und das Template hauptsächlich aus Markern besteht, welche bereits komplette HTML-Elemente enthalten.

    Ebenso ist die Funktion displayArchiveMenu von mir anzupassen aus fast identischen Gründen.

    In der Regel sind es einfach unnütze Informationen, die ich herausstreichen möchte, welche sich aber weder via TypoScript noch durch Templateanpassungen entfernen lassen, und somit das mir vorgebene Layout nicht erfüllen.

    Ich hatte nun via XCLASS tt_news erweitert. Das geht auch wunderbar und ich war vorerst zufrieden. Nun habe ich eine zweite Extension (sg_newsplus) installieren müssen, welche ebenfalls tt_news via XCLASS erweitert. Die Folge: eine der beiden Extensions wird damit unwirksam und arbeitet einfach nicht mehr.

    Die Frage lautet nun also:
    wie erweitere ich die Extension nun auf sauberen Wege, so dass tt_news, sg_newsplus und meine eigene Extension parallel laufen lassen kann und die beiden erst genannten nach wie vor updatefähig bleiben?

    Grüße Christian


  • 1
  • marksta marksta
    Sternenflotten-Admiral
    0 x
    240 Beiträge
    0 Hilfreiche Beiträge
    09. 06. 2011, 12:04

    Hallo Christian

    Ja, xclassen sind manchmal echt mühsam.

    In diesem Fall empfehle ich Dir deine XCLASS anstelle von tt_news von sg_newsplus zu machen. So gibt es eine saubere Vererbung.

    Aufpassen musst Du nur, wenn sg_newsplus die selben Funktionen überschreiben würde.

    Gruss
    Markus

  • chrisi51 chrisi51
    Padawan
    0 x
    45 Beiträge
    0 Hilfreiche Beiträge
    09. 06. 2011, 18:16

    [quote="marksta"]
    Aufpassen musst Du nur, wenn sg_newsplus die selben Funktionen überschreiben würde.
    [/quote]

    Was passiert in dem Fall dann?

    Und eine andere brauchbare Möglichkeit gibt es nicht? ... sollte aus irgendwelchen Gründen sg_newsplus nicht mehr von Nöten sein, würde meine Extension ja plötzlich auch nicht mehr funktionieren und in so einem Fall kommt man dann wieder nicht drauf, dass mans nun auf tt_news umbiegen muss.

  • marksta marksta
    Sternenflotten-Admiral
    0 x
    240 Beiträge
    0 Hilfreiche Beiträge
    10. 06. 2011, 12:19

    Hallo Christian

    Sollte sg_newsplus die Funktion überschreiben, musst Du diese von dort kopieren und entsprechend anpassen.

    Wegen deinem anderen Problem, Du könntest die XCLASS so einbinden, dass erkannt wird ob sg_newsplus installiert ist oder nicht.

    Dazu kannst Du folgende Funktion verwenden: http://api.typo3.org/typo3v4/current/html/classt3lib__ext_mgm.html#a2e8f266f3cc692ee2531448b90cdf09d

    Gruss
    Markus

  • chrisi51 chrisi51
    Padawan
    0 x
    45 Beiträge
    0 Hilfreiche Beiträge
    10. 06. 2011, 13:14

    Hallo Markus

    [quote="marksta"]
    Wegen deinem anderen Problem, Du könntest die XCLASS so einbinden, dass erkannt wird ob sg_newsplus installiert ist oder nicht.

    Dazu kannst Du folgende Funktion verwenden: http://api.typo3.org/typo3v4/current/html/classt3lib__ext_mgm.html#a2e8f266f3cc692ee2531448b90cdf09d
    [/quote]

    Das heißt an der Stelle kann ich in der ext_localconf.php dann sagen, dass er entweder sg_newsplus erweitert, sofern vorhanden, und ansonsten direkt tt_news erweitert?

    Einen anderen Weg (als XCLASS), tt_news zu erweitern gibt es dann wohl nicht?

    Vielen Dank
    Christian

  • marksta marksta
    Sternenflotten-Admiral
    0 x
    240 Beiträge
    0 Hilfreiche Beiträge
    10. 06. 2011, 13:37

    Hallo Christian

    Besser wäre natürlich Hooks zu nutzen, news hat bspw. einen Hook um beliebige Marker zu ergänzen.

    Ob dies in deinem Fall der richtige Ansatz ist weiss ich jedoch nicht.

    Gruss
    Markus

  • chrisi51 chrisi51
    Padawan
    0 x
    45 Beiträge
    0 Hilfreiche Beiträge
    10. 06. 2011, 14:07

    den Markerhook nutze ich schon an anderer Stelle, aber ich muss halt wirklich Funktionalität verändern bzw. hinzufügen ... es gibt diesen extraCodeProzessor. Leider nutzt den scheinbar niemand und es gibt entsprechend kaum Doku darüber, wodurch ich in keinster Weise herausbekomme, wie ich diesen Hook nutzen soll. #angry#
    Sieht letztendlich so aus, als könne man hier nur die main-Funktion verändern.

  • chrisi51 chrisi51
    Padawan
    0 x
    45 Beiträge
    0 Hilfreiche Beiträge
    20. 06. 2011, 14:15

    Danke für die Unterstützung Markus,

    jedoch komme ich leider nicht weiter.

    ich habe nun mehrfach probiert, meine Extension von der sg_newsplus abzuleiten, jedoch komplett ohne erfolg. sg_newsplus arbeitet weiterhin zuverlässig, aber meine Extension möchte einfach nicht anlaufen.

    Ich führe jetzt einfach mal alles auf, was irgendwie in den Extensions so vor sich hin gammelt.

    [u]SG_NEWSPLUS:[/u]

    sg_newsplus/ext_localconf.php

    1. <?php
    2. if (!defined ("TYPO3_MODE" )) die ("Access denied." );
    3.  
    4. t3lib_extMgm::addPageTSConfig('
    5. #Default Page TSconfig:
    6. ');
    7. t3lib_extMgm::addUserTSConfig('
    8. #Default User TSconfig:
    9. ');
    10.  
    11. ## Extending TypoScript from static template uid=43 to set up userdefined tag:
    12. t3lib_extMgm::addTypoScript($_EXTKEY,"editorcfg","
    13. tt_content.CSS_editor.ch.tx_sgnewsplus_pi1 = < plugin.tx_sgnewsplus_pi1.CSS_editor
    14. ",43);
    15.  
    16.  
    17. t3lib_extMgm::addPItoST43($_EXTKEY,"pi1/class.tx_sgnewsplus_pi1.php","_pi1","list_type",0);
    18. $TYPO3_CONF_VARS[TYPO3_MODE]["XCLASS"]["ext/tt_news/pi/class.tx_ttnews.php"] =
    19. t3lib_extMgm::extPath("sg_newsplus" )."class.ux_tx_ttnews.php";
    20.  
    21. t3lib_extMgm::addTypoScript($_EXTKEY,"setup","
    22. tt_content.shortcut.20.0.conf.tt_news = < plugin.".t3lib_extMgm::getCN($_EXTKEY)."_pi1
    23. tt_content.shortcut.20.0.conf.tt_news.CMD = singleView
    24. ",43);
    25.  
    26. $confArr = unserialize($GLOBALS['TYPO3_CONF_VARS']['EXT']['extConf']['sg_newsplus']);
    27. if (strlen($confArr['extLocalLangFile'])>8 ) {
    28. $GLOBALS['TYPO3_CONF_VARS']['BE']['XLLfile']['EXT:sg_newsplus/locallang_db.php'] = $confArr['extLocalLangFile'];
    29. }
    30.  
    31. ?>

    sg_newsplus/class.ux_tx_ttnews.php

    1. <?php
    2. class ux_tx_ttnews extends tx_ttnews {
    3. var $prefixUxId = "tx_sgnewsplus_pi1"; // Same as class name
    4. var $mainTable = 'tt_news';
    5.  
    6. // Path to this script relative to the extension dir.
    7. //var $scriptRelPath = "class.ux_sgnewsplus_pi1.php";
    8.  
    9. //var $extKey = "sg_newsplus"; // The extension key.
    10.  
    11. [...]
    12.  
    13.  
    14. ?>

    sg_newsplus/pi1/class.tx_sgnewsplus_pi1.php

    1. <?php
    2. class tx_sgnewsplus_pi1 extends txsg_pibase {
    3. var $prefixId = "tx_sgnewsplus_pi1"; // Same as class name
    4. // Path to this script relative to the extension dir.
    5. var $scriptRelPath = "pi1/class.tx_sgnewsplus_pi1.php";
    6. var $extKey = "sg_newsplus"; // The extension key.
    7. var $importName = 'news_import';
    8.  
    9. [...]
    10.  
    11. if (defined("TYPO3_MODE" ) && $TYPO3_CONF_VARS[TYPO3_MODE]["XCLASS"]["ext/sg_newsplus/pi1/class.tx_sgnewsplus_pi1.php"]) {
    12. include_once($TYPO3_CONF_VARS[TYPO3_MODE]["XCLASS"] ["ext/sg_newsplus/pi1/class.tx_sgnewsplus_pi1.php"]);
    13. }
    14.  
    15. ?>

    [u]PXCH_TT_NEWS:[/u]
    Meine Daten sind folgende ... da ich die mitlerweile wohl komplett zerschossen habe hinsichtlich der Integration spar ich mir nun dessen Inhalte noch aufzuführen.
    ext_localconf.php
    class.ux_tx_ttnews.php
    /pi1/class.tx_pxchttnews_pi1.php

    Kann mir jemand grob erklären, wie ich nun meine Extension konfigurieren müsste, um von der sg_newsplus extenden zu können.

    Grüße
    Chris

  • 1