labelCallback überschreiben ?

Einklappen
X
 
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge
  • hjansen
    Contao-Nutzer
    • 05.07.2009
    • 20

    #1

    labelCallback überschreiben ?

    Hallo zusammen,

    ich möchte bei der Newsletter Extension das labelCallback überschreiben so das ich zusätzliche Ausgaben machen kann in der Übersicht der Newsletter Empfänger.

    Dazu habe ich im DCA einfach folgendes gemacht:

    PHP-Code:
    $GLOBALS['TL_DCA']['tl_newsletter_recipients']['list']['label']['label_callback'] = array('tl_newsletter_extended_recipients','listRecipient'); 
    
    Und dann entsprechend die Klasse mit der Funktion definiert. Das funktioniert auch prima.
    Nur jetzt habe ich das Problem das ich eine zweite Extension habe die genau das gleiche macht ...

    Jetzt wird, im Nachinein logischerweise, natürlich nur von einer Extension das labelCallback überschrieben nämlich von der, die zuletzt geladen wurde.

    Gibt es da eine elegantere Lösung wie ich sauber das labelCallback erweitern kann, ohne das ich mit weiteren Extensions kollidiere ?

    Danke und Gruß

    Holger
  • hjansen
    Contao-Nutzer
    • 05.07.2009
    • 20

    #2
    Danke Leo !

    Das hilft mir glaube ich schon weiter ! Auf die Idee einfach die Funktion aus der ursprünglichen Funktion aufzurufen anstatt Sie komplett zu überschreiben bin ich nicht gekommen.

    Danke und Gruß
    Holger

    Kommentar

    • hjansen
      Contao-Nutzer
      • 05.07.2009
      • 20

      #3
      Wobei irgendwie hilft das glaube ich doch nicht, oder ich habe deinen Ansatz falsch verstanden.

      Wie rufst Du denn jetzt Deine callback Funktion auf bzw. sorgst dafür das Deine Funktion anstatt der originalen Funktion aufgerufen wird ?

      Kommentar

      • hjansen
        Contao-Nutzer
        • 05.07.2009
        • 20

        #4
        Das ist mir soweit klar ...

        Das hilft mir aber doch nicht wenn ich zwei Erweiterungen habe die z.B. auf das labelCallback vom Newsletter zugreifen wollen.

        Die würden dann zwar beide die ursprüngliche Funktion vom Newsletter aufrufen aber nur eine Extension der beiden würde effektiv die Ausgabe um ihre Sachen ergänzen.

        Die Callback Funktion der anderen Extension würde bei der Lösung gar nicht aufgerufen werden.

        Es müsste quasi möglich sein das mehrere labelCallback Funktionen aufgerufen werden.

        Kommentar

        • xtra
          Maintainer
          • 02.07.2009
          • 2007

          #5
          In diesem Falle musst du das kaskadieren.
          Wie genau du das machst ist dir yberlassen, eine grobe Moeglichkeit ist so:
          die dca Datei:
          PHP-Code:
          if(TL_MODE='BE')
          {
          if(isset($GLOBALS['TL_DCA']['tl_newsletter_recipients']['list']['label']['label_callback']))
          {
          $GLOBALS['TL_DCA']['tl_newsletter_recipients']['list']['label']['label_callback_extended_recipients']=
          $GLOBALS['TL_DCA']['tl_newsletter_recipients']['list']['label']['label_callback'];
          }
          
          $GLOBALS['TL_DCA']['tl_newsletter_recipients']['list']['label']['label_callback'] = array('tl_newsletter_extended_recipients','listRecipient');  
          
          // Ab hier die Routine von Leo-unglaub, welche nicht den ursprynglichen callback von Leo Feyer aufruft sondern die nun im "buffer" hinterlegte.
          // $GLOBALS['TL_DCA']['tl_newsletter_recipients']['list']['label']['label_callback_extended_recipients'] 
          
          Dieses "Spiel" machst du nun in allen deiner Erweiterungen, solange sich alle hieran halten und den jeweiligen vorherigen in einem eineindeutigen "buffer" ablegen bevor sie sich selbst eintragen, kann jeder herumfummeln wie er will und die Sache kaskadiert.
          Bedenke stets: Wenn Du ungenaue oder unzureichende Angaben machst, so koennte dies die Bearbeitung deiner Frage endlos verzoegern (oder sogar dazu fyhren, dass ich zu viel nachdenken muss und die Antwort vergesse!). Kein Support per PN.

          Kommentar

          • andreas.schempp
            Contao Core-Team
            Association Vorstand
            • 15.06.2009
            • 5701

            #6
            Hallo Holger,

            Es ist relativ einfach: Du musst deine Erweiterung alphabetisch weiter unten ordnen. Ich nenne sowas immer z_custom oder z_irgendwas. mit z_ kommst du ziemlich sicher als letzter dran, und kannst alles vorherige überschreiben.
            terminal42 gmbh
            Wir sind Contao Premium-Partner! Für Modulwünsche oder Programmierungen kannst du uns gerne kontaktieren.
            Hilfe für Isotope eCommerce kann man auch kaufen: Isotope Circle

            Kommentar

            • xtra
              Maintainer
              • 02.07.2009
              • 2007

              #7
              Zitat von andreas.schempp Beitrag anzeigen
              Du musst deine Erweiterung alphabetisch weiter unten ordnen. Ich nenne sowas immer z_custom oder z_irgendwas. mit z_ kommst du ziemlich sicher als letzter dran, und kannst alles vorherige überschreiben.
              Das ist klar, aber er will ja nicht yberschreiben sondern das vorherige ybernehmen und erweitern.
              Das geht nur durch die oben beschriebene Kaskadierung, da der labelcallback nicht ein array of functions ist, wie die HOOKs usw. sondern eben schlicht und einfach das Highlander-Prinzip verfolgt ("es kann nur einen geben").
              Und um dennoch mehrere zu erlauben, kaskadiert man jeweils den Vorgaenger und baut seinen Kram dazu.

              Gruss
              Chris
              Bedenke stets: Wenn Du ungenaue oder unzureichende Angaben machst, so koennte dies die Bearbeitung deiner Frage endlos verzoegern (oder sogar dazu fyhren, dass ich zu viel nachdenken muss und die Antwort vergesse!). Kein Support per PN.

              Kommentar

              • hjansen
                Contao-Nutzer
                • 05.07.2009
                • 20

                #8
                Genau ich habe quasi 2 unabhängige Erweiterungen die das Label ergänzen.

                Einmal meine neue Newsletter Link Tracker Extension die hinten "(Link besucht)" anhängt und dann eine
                weitere Erweiterung von mir die das Newsletter Modul um einige Felder wie "Name,Vorname,PLZ,Ort,Kundenummer" erweitert und die ebenfalls hinten an das Label hängen soll.

                Und im Moment ist es halt noch so das nur das Label von einer Erweiterung angezeigt wird. Ich muss mir den Ansatz mit der Kaskadierung nochmal in Ruhe ansehen und damit rumspielen.

                Kommentar

                • hjansen
                  Contao-Nutzer
                  • 05.07.2009
                  • 20

                  #9
                  Zu dem labelCallback nochmal ne andere blöde Frage. In Typolight 2.9 scheint sich das ein wenig geändert zu haben.

                  In Typo 2.8 habe ich folgendes "überschrieben":
                  PHP-Code:
                  $GLOBALS['TL_DCA']['tl_newsletter_recipients']['list']['label']['label_callback'] = array('tl_newsletter_extended_recipients','listRecipient'); 
                  
                  In Typo 2.9 gibt es folgendes:
                  PHP-Code:
                  $GLOBALS['TL_DCA']['tl_newsletter_recipients']['list']['sorting']['child_record_callback'] = array('tl_newsletter_extended_recipients','listRecipient'); 
                  
                  Jetzt habe ich im Repository einfach für 2.9RC1 ne neue Version eingestellt mit der entsprechenden Änderung.
                  Jetzt habe ich aber gerade festgestellt das meine 2.8.2er Installation jetzt auch auf die neue Version aktualisieren will und wenn ich die Extension neu installiere habe ich gar keine Möglichkeit mehr die "alte" Version die in 2.8.2 funktioniert zu installieren.

                  Wie gehe ich damit um ? Hab ich beim Einstellen im Repository was falsch gemacht oder ist das gar nicht angedacht das automatisch immer wenn möglich die Version installiert wird die auch der installierten Typolight Version entspricht ?

                  Sonst würde das ja bedueten das ich irgendwie innerhalb der Extension unterscheiden müsste welche TL Version gerade genutzt wird.

                  Kommentar

                  Lädt...