Ergebnis 1 bis 6 von 6

Thema: Modulentwicklung mit Anpassung vorhandener Funktionen

  1. #1
    Contao-Nutzer Avatar von sebi
    Registriert seit
    17.03.2012.
    Ort
    Kiel
    Beiträge
    154

    Standard Modulentwicklung mit Anpassung vorhandener Funktionen

    Hallo ihr Lieben,

    ich habe in der vergangenen Woche zwei kleine Erweiterungen geschrieben, die die vorhandenen Core-Funktionalitäten aufgreifen und erweitern. Ziel sollte sein, dass es möglichst updatefähig bleibt. Nun frage ich mich aber, ob der von mir gewählte Weg der richtige/beste ist, oder ob es einen definitiv besseren gibt.

    Das unten beschriebene Szenario habe ich in einer weiteren Erweiterung noch umfangreicher mit 3 kopierten Klassen umgesetzt, so sollte es aber einfach zu verstehen sein.

    Szenario:

    1. im DCA für tl_content habe ich zwei Felder hinzugefügt, die befüllt und zusätzlich im FE ausgegeben werden sollen.
    2. per parseTemplateHook fange ich diese Felder auch ab und gebe sie an das FE-Template weiter
      PHP-Code:
      $objTemplate->class .= " ".$class
    3. da die ContentElemente vom Typ Modul aber diese Felder gar nicht laden, habe ich die ContentModule.php quasi in meine Erweiterung kopiert und umbenannt (ContentModuleExtended.php)
    4. diese ContentModuleExtended extended dann ContentModule
      PHP-Code:
      class ContentModuleExtended extends ContentModule 
      { [...] 
    5. in dieser Klasse habe ich die public generate generate() aus dem Original kopiert und an meine Anforderungen angepasst (sind nur minimale Änderungen, 4 Zeilen)
      PHP-Code:
      public function generate()
          { [...] 


    Das Ergebnis ist wie gewünscht, aber ich frage mich wie gesagt, ob dies der beste Weg ist oder ob ihr diesen überhaupt nicht empfehlen könnt.

    Meine Bedenken sind vor allem bei Updates. Theoretisch muss ich bei jedem Update prüfen, ob etwas an der originalen ContentModule.php geändert wurde und die entsprechenden Änderungen auch übernehmen, da die originale FUnktion ja durch "meine" generate() überschrieben wird.

    Vielen Dank und bin sehr gespannt auf eure Antworten

    Besten Gruß und einen schönen Tag,
    sebi

  2. #2
    Contao-Nutzer Avatar von benzin
    Registriert seit
    06.02.2016.
    Ort
    Essen/Düsseldorf, NRW
    Beiträge
    84
    Partner-ID
    11060

    Standard

    Hallo sebi,

    jup, das ist in der Tat nicht updatesicher, aber das ist dir ja selbst auch schon klar Um einen anderen Weg zu finden, müssten wir aber wissen, welche Änderungen du in deiner ContentModuleExtended vornimmst? Eventuell gibt es ja doch eine andere Möglichkeit.

    Viele Grüße
    benzin

  3. #3
    Contao-Nutzer Avatar von sebi
    Registriert seit
    17.03.2012.
    Ort
    Kiel
    Beiträge
    154

    Standard

    nAbend benzin,

    danke für deine schnelle Antwort.

    Also ist das Vorgehen so allgemein nicht empfehlenswert?!
    Auch in anderen Fällen? Oder gibt es Fälle wo man so vorgehen muss??



    In diesem einfachen Fall mach ich dort (in Zeile 58) nur diese Änderungen:
    PHP-Code:
    // also get grid-settings
    $objModule->grid_columns $this->grid_columns
    Das ist direkt analog zu den "Standard"-CSS-ID Feldern für CE vom Typ Modul.

    Über den parseTemplate-Hook werden diese Werte dann an das Template in $objTemplate->class hinzugefügt und so auch im FE ausgegeben.

    PHP-Code:
         if($objTemplate->grid_columns) {
            
    $arrGridClasses unserialize($objTemplate->grid_columns);
            foreach (
    $arrGridClasses as $class) {
              
    $objTemplate->class .= " ".$class;
            }
          } 
    Für "normale" ContentElemente funktioniert das auch nur mit dem Hook, aber für die CE Module lädt es nicht die Felder des CE sondern die vom Module...

    Danke für die Hilfe
    sebi

  4. #4
    Contao-Nutzer Avatar von benzin
    Registriert seit
    06.02.2016.
    Ort
    Essen/Düsseldorf, NRW
    Beiträge
    84
    Partner-ID
    11060

    Standard

    Langfristig macht man sich das Leben mit Core-Überschreibung meines Erachtens eher schwerer. Es gibt aber häufig mehrere Wege, ein Problem zu lösen, auch wenn es dann manchmal nicht die idealste Lösung wird. Dann ist es einfach Abwägungssache, welchen Weg man geht. Wir haben bisher noch alles ohne Core-Überschreibung geschafft

    Du könntest z.B. alternativ den getContentElementHook wählen. Der bekommt die Daten des ContentElements und das bereits kompilierte Element als HTML-String übergeben. Da es bei dir anscheinend ja um Grid-Klasse geht, könntest du überlegen, einen zusätzlichen DIV um das Element zu legen, der die Grid-Klassen erhält. Siehe dazu z.B. auch diese Erweiterung von Rocksolid.

    Grüße
    benzin

  5. #5
    Contao-Urgestein Avatar von Andreas
    Registriert seit
    19.06.2009.
    Ort
    Mönchengladbach
    Beiträge
    7.703
    User beschenken
    Wunschliste
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Da kommt mir gerade dma_simple_grid in den Sinn. Vielleicht kannst du dir dort ja auch was abschauen.
    https://github.com/DMAGmbH/dma_simple_grid
    Bitte!
    Vor Anfragen im Forum HTML validieren.
    Codesnippets hier im Froum sauber einrücken. Nur Tabs o. nur Leerzeichen verwenden.

    Vielen Dank an alle Wunschlistenerfüller
    Andreas Burg, Web Solutions

  6. #6
    Contao-Nutzer Avatar von sebi
    Registriert seit
    17.03.2012.
    Ort
    Kiel
    Beiträge
    154

    Standard

    Super, danke euch beiden!
    Hat jetzt so wunderbar geklappt

    Bzgl. der anderen, umfangreicheren Erweiterung werde ich erstmal selber gucken, ob ich da auf ähnlichem Wege vorgehen kann. Sonst melde ich mich nochmal in einem neuen Thema

    Danke dem Forum, ihr seid die Besten.

    Besten Gruß,
    sebi

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Lesezeichen

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •