Ergebnis 1 bis 12 von 12

Thema: Eigenes Front End Modul wird nicht geladen

  1. #1
    Contao-Nutzer
    Registriert seit
    28.11.2018.
    Beiträge
    6

    Frage Eigenes Front End Modul wird nicht geladen

    Hallo zusammen!

    Ich habe mich daran gewagt eine erste eigene Erweiterung, einen Veranstaltungskalender, zu schreiben. Dazu habe ich dieses Tutorial von Tristan als Anleitung genommen. Eine aktuellere Schritt für Schritt Anleitung habe ich leider nicht gefunden. Contao läuft bei mir lokal unter XAMPP.

    Das hat soweit auch ganz gut funktioniert. Meinen Ordner "Veranstaltungskalender" mit den Unterordnern "config", "dca", "languages" und "templates" hatte ich in den Ordner "htdocs/system/modules" kopiert, den Cache erneuert und die Datenbank aktuallisiert. Damit hatte ich mein Modul im Backend.

    Ich konnte das Modul auch im front end einbinden. Allerdings wird das Modul nicht ausgegeben. Genauer wird die Datei "htdocs/system/modules/Veranstaltungskalender/ModuleVeranstaltungskalenderList.php" gar nicht geladen. Das habe ich mit einer Testausgabe direkt am Anfang der Datei überprüft.

    Dann habe ich gelesen, dass der autoloader die Klasse finden muss also habe ich in der Datei "htdocs/composer.json" einen Abschnitt "autoload" mit psr-0 und psr-4 hinzugefügt. Den genauen Code in dem Abschnitt weiß ich nicht mehr denn danach hatte ich über den Browser keinen Zugriff mehr auf die Seite. Beim Versuch localhost oder etwas darunter aufzurufen bekam ich nur noch einen Error-403. Also habe ich das Verzeichnis "htdocs" gelehrt und Contao neu installiert.

    Das Modul als Bundle zu schreiben ist mir leider noch zu kompliziert. Ich habe zwar den Vortrag von Leo Feyer dazu auf Youtube gesehen und das skeleton-bundle herunter geladen aber da gibt es doch noch ein paar Dinge die ich nicht verstehe. Auch nicht wie man das bundle am Ende installiert oder wo man es unterhalb von "htdocs" speichert. Daher würde ich es für den Einstieg gern erst einmal klein halten.

    Ich will mir nicht nochmal die Contao-Installation zerschießen, daher also die Frage:
    Wie muss ich also vorgehen damit meine Klasse für das front end Modul "htdocs/system/modules/Veranstaltungskalender/ModuleVeranstaltungskalenderList.php" vom autoloader gefunden und geladen wird?
    Muss ich dazu zwingend die Datei "htdocs/composer.json" bearbeiten? Ich hätte gern alles was mit der Erweiterung zusammen hängt in einem Verzeichnis wenn das möglich ist. Sonst summieren sich wahrscheinlich die Einträge und Änderungen in der Datei wenn man mehrere Erweiterungen verwendet. Dann wird es schnell unübersichtlich und fehleranfällig.

    Also danke schonmal für eure Hilfe!
    Geändert von Flushor (28.11.2018 um 21:53 Uhr)

  2. #2
    Contao-Urgestein Avatar von Samson1964
    Registriert seit
    05.11.2012.
    Ort
    Berlin
    Beiträge
    2.794

    Standard

    Willkommen im Forum, flushor!

    Da Du eine 3er Erweiterung codest, vergiß das Zeug mit autoloader und Co.. Du schreibst ja kein 4er Bundle. Erstelle Deine Dateien ganz so, wie in den Videos von Tristan empfohlen. So habe ich auch ganz gut die Erweiterungsprogrammierung gelernt. Leider gibt es kein Äquivalent für Contao 4, wo ein ziemliches Durcheinander herrscht, wo was wann hin soll.

    Poste Deine system/modules/Veranstaltungskalender/config/config.php. Und lösche den Ordner var/cache nach jeder Aktualisierung der Erweiterung.

    Im Übrigen sollten beim Modulverzeichnis keine Großbuchstaben verwendet werden, aber das ist Dein Geschmack. Und für die Klassen solltest Du einen extra Ordner anlegen und nicht die Klasse in das Modulverzeichnis direkt speichern.
    Viele Grüße
    Frank

    Seit Mai 2013 Fan von Contao
    Webmaster vom Deutschen Schachbund und Berliner Schachverband
    Mein Blog: Schachbulle
    Meine Erweiterungen bei GitHub
    Meine Videos auf YouTube: Playlist zur Contao-Programmierung/Einrichtung

  3. #3
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.114
    Partner-ID
    10107

    Standard

    Den Composer Autoloader kannst du auch für Contao 3 Extensions verwenden, ist ja auch viel bequemer als der alte Contao ClassLoader.

  4. #4
    Contao-Nutzer
    Registriert seit
    28.11.2018.
    Beiträge
    6

    Standard

    Zitat Zitat von Samson1964 Beitrag anzeigen
    Willkommen im Forum, flushor!
    Hallo Samson,

    hier ist der Code der config.php

    PHP-Code:
    <?php

    /**
     * Back end modules
     */
    $GLOBALS['BE_MOD']['custommod'] = array
    (
        
    'Veranstaltungskalender' => array
        (
            
    'tables'    => array('tl_veranstaltungskalender')
        )
    );

    /**
     * Front end modules
     */
    $GLOBALS['FE_MOD']['custommod'] = array
    (
        
    'veranstaltungskalender_list'    => 'ModuleVeranstaltungskalenderList'
    );
    Für die Klasse resp. Datei ModuleVeranstaltungskalenderList habe ich einen Unterordner "htdocs/system/modules/Veranstaltungskalender/classes" erstellt. Die Datei ModuleVeranstaltungskalenderList.php liegt jetzt also darin.

    Danke für deine Hilfe!

  5. #5
    Contao-Nutzer
    Registriert seit
    28.11.2018.
    Beiträge
    6

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    Den Composer Autoloader kannst du auch für Contao 3 Extensions verwenden, ist ja auch viel bequemer als der alte Contao ClassLoader.
    Hallo Spooky!

    Kannst du mir bitte sagen wie ich dabei vorgehen muss?

  6. #6
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.114
    Partner-ID
    10107

    Standard

    Dazu müsste ich deine gesamte Extension sehen.

  7. #7
    Contao-Nutzer
    Registriert seit
    28.11.2018.
    Beiträge
    6

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    Dazu müsste ich deine gesamte Extension sehen.
    Reicht dir die Verzeichnisstruktur mit Dateinamen oder brauchst du auch den Inhalt jeder einzelnen Datei? Weil letzteres würde ziemlich lang durch die dca Datei. Die anderen Dateien sind ja ziemlich kurz.

    Hier also erstmal die Verzeichnisstruktur in "htdocs/system/modulesVeranstaltungskalender":

    Code:
    -Veranstaltungskalender/
        -classes/
            -ModuleVeranstaltungskalenderList.php
        -config/
            -config.php
            -database.sql
        -dca/
            -tl_module.php
            -tl_veranstaltungskalender.php
        -languages/
            -de/
                -modules.php
                -tl_veranstaltungskalender.php
        -templates/
            -mod_veranstaltungskalender_list.html5

    Danke für deine Hilfe!

  8. #8
    Contao-Urgestein Avatar von Samson1964
    Registriert seit
    05.11.2012.
    Ort
    Berlin
    Beiträge
    2.794

    Standard

    Wenn Du den ClassLoader verwendest, muß in Deiner config/autoload.php zum Laden der Klasse stehen:
    PHP-Code:
    /**
     * Register the classes
     */
    ClassLoader::addClasses(array
    (
        
    // Classes
        
    'ModuleVeranstaltungskalenderList'    => 'system/modules/Veranstaltungskalender/classes/ModuleVeranstaltungskalenderList.php',
    )); 
    Wie das Vorgehen beim Composer Autoloader ist, wird Dir Spooky erklären. Wenn der bequemer ist, dann heißt das für mich, das man überhaupt nichts mehr irgendwo machen muß. Den Weg über die autoload.php finde ich bequem genug.

    Die database.sql brauchst Du nicht mehr. Schreibe Dein SQL in die DCA-Dateien, so wie von Tristan Lins in den Videos ab Contao 3 empfohlen.
    Viele Grüße
    Frank

    Seit Mai 2013 Fan von Contao
    Webmaster vom Deutschen Schachbund und Berliner Schachverband
    Mein Blog: Schachbulle
    Meine Erweiterungen bei GitHub
    Meine Videos auf YouTube: Playlist zur Contao-Programmierung/Einrichtung

  9. #9
    Contao-Nutzer
    Registriert seit
    28.11.2018.
    Beiträge
    6

    Standard

    Hallo Samson!

    Danke, das hat erstmal funktioniert! Ich würde ja auch gern Symfony bundles schreiben sobald ich weiß wie.

    Zitat Zitat von Samson1964 Beitrag anzeigen
    Die database.sql brauchst Du nicht mehr. Schreibe Dein SQL in die DCA-Dateien, so wie von Tristan Lins in den Videos ab Contao 3 empfohlen.
    Danke auch für den Hinweis! Ich werde mir das gleich mal anschauen.

    Dann will ich rausfinden wie ich von der Listenausgabe auf eine Detailseite einer Veranstaltung verlinken kann und wie ich für die Liste Filter, eine Suche und Pagination erstellen kann.
    Eventuell finde ich noch passende Tutorials.

    Die erste Hürde ist jedenfall erstmal genommen.

    Danke nochmal!

  10. #10
    Contao-Fan Avatar von Sioweb
    Registriert seit
    12.08.2011.
    Ort
    Düsseldorf
    Beiträge
    405
    User beschenken
    Wunschliste

    Standard

    Ho!

    Also um Bundles generell zu schreiben würde ich dir empfehlen eines der fertigen Bundles zu verwenden:

    - https://github.com/Sioweb/Contao4DummyBundle
    - https://github.com/contao/skeleton-bundle

    In dem Bundle Glossar, oder je nach dem auch in den Core-Bundles, wie die Pagination etc. aufgebaut werden kann. Wie Hooks funktionieren etc.

    Oder wenn es dir hilft, hier noch ein DummyModul für Contao 3 mit Kommentaren im Code, vieles davon ist auch noch in Contao 4.4 gültig, allerdings würde ich nicht darauf gehen.
    Grüße Sascha W. @Sioweb
    schadebalken.de | zurück-zu-montag.de
    +++ Programmierer von Change-Lok erfasst worden +++

  11. #11
    Contao-Nutzer
    Registriert seit
    28.11.2018.
    Beiträge
    6

    Standard

    Zitat Zitat von Sioweb Beitrag anzeigen
    Ho!

    Also um Bundles generell zu schreiben würde ich dir empfehlen eines der fertigen Bundles zu verwenden:

    - https://github.com/Sioweb/Contao4DummyBundle
    - https://github.com/contao/skeleton-bundle
    Hallo Sioweb!

    Danke für die Links! Ich glaube so ein bundle bekomme ich hin. Aber wie installiere ich die Erweiterung denn dann? Bzw. wo muss ich sie hinkopieren? Muss ich dann auch nur den Cache neu aufbauen und fertig?

    Zitat Zitat von Sioweb Beitrag anzeigen
    In dem Bundle Glossar, oder je nach dem auch in den Core-Bundles, wie die Pagination etc. aufgebaut werden kann. Wie Hooks funktionieren etc.
    Kann ich denn frei Code schreiben in meiner Front end Klasse oder muss ich bei Contao etwas beachten? Z.B. muss ich die erlaubten GET-Parameter irgendwo registrieren o.ä.?
    Ansonsten würde ich mir durchaus zutrauen Filter, Suche und Pagination selbst zu programmieren.

    Edit: Wozu brauch ich denn eigentlich Hooks? Brauche ich Hooks? Ich habe zwar hin und wieder davon gehört oder gelesen aber kann damit noch nichts anfangen.
    Geändert von Flushor (30.11.2018 um 18:26 Uhr)

  12. #12
    Contao-Fan Avatar von Sioweb
    Registriert seit
    12.08.2011.
    Ort
    Düsseldorf
    Beiträge
    405
    User beschenken
    Wunschliste

    Standard

    Ho!

    Also Contao 3 Module musst du einfach nur in das Verzeichnis /system/modules/DEIN_MODULNAME/ kopieren. Darin müssen dann einige Pflichtdateien existieren, damit Contao sie laden kann.

    In Contao 4 musst du das Bundle mit Composer (Oder Contao Manager) installieren. Wie das funktioniert beschreibe ich in dem Contao4DummyBundle-Link.

    --

    Kann ich denn frei Code schreiben in meiner Frontend Klasse
    In der Klasse bist du frei zu tun was auch immer du willst. In Contao 4 würde ich empfehlen, die Symfony-Art zu lernen. Also nicht mehr von vielen Klassen erben, sondern Dependency Injection nutzen. Dafür findest du in den Links auch Beispielcode

    Wozu brauch ich denn eigentlich Hooks? Brauche ich Hooks?
    Hooks ist ein anderes Wort für Events. Contao feuert ein paar davon zu bestimmten Anlässen, z.B. bevor ein Inhaltselement gerendert wird, bevor und nachdem ein Formular abgesendet wird, wenn das System initialisiert wird. Die brauchst du dann, wenn du zu der Aktion von Contao selbst noch ein paar Funktionen hinzufügen möchtest.
    Grüße Sascha W. @Sioweb
    schadebalken.de | zurück-zu-montag.de
    +++ Programmierer von Change-Lok erfasst worden +++

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
  •