Contao-Camp 2024
Ergebnis 1 bis 17 von 17

Thema: Bundle-Entwicklung: FrontendModul erscheint im Backend, aber FE aber nicht angezeigt

  1. #1
    Contao-Nutzer
    Registriert seit
    09.03.2014.
    Beiträge
    87

    Standard Bundle-Entwicklung: FrontendModul erscheint im Backend, aber FE aber nicht angezeigt

    Ich arbeite mich in die Bundle-Entwicklung für Contao ^4.4 ein,
    Bundle: https://github.com/pnwscm60/contao-concerto-bundle
    Testumgebung: www.kkbern.ch

    Bundle via Manager installiert > ok ohne Fehler. Frontend-Modul kann ausgewählt und in einen Artikel eingefügt werden (> Werkliste). Die Anzeige bleibt aber leer.

    Irgendeine Idee, an was das typischerweise liegt?

  2. #2
    Contao-Urgestein
    Registriert seit
    29.10.2009.
    Ort
    Magdeburg
    Beiträge
    2.020
    Partner-ID
    626
    User beschenken
    Wunschliste

    Standard

    Das ist ein Zeichen dafür, dass die Modulklasse nicht geladen werden kann.

    Hier stimmt der Namespace nicht:
    https://github.com/pnwscm60/contao-c.../config.php#L7

    Bei dir hat die Klasse keinerlei Namespace und wird auch vom Psr-4 Autoloading nicht erfasst.

    Lege doch die Modulklasse direkt unter Module ab und nicht unter Resources/Contao/modules.

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

  4. #4
    Contao-Nutzer
    Registriert seit
    09.03.2014.
    Beiträge
    87

    Standard Weiterhin keine Klasse geladen

    In /src/Resources/contao/config/config.php habe ich nun folgenden Eintrag:
    Code:
    array_insert($GLOBALS['FE_MOD'], 4, array
    (
    	'concerto' => array
    	(
    		'werke'   => 'Pnwscm60\ConcertoBundle\ModuleWerke'
    	)
    ));
    ?>
    Im Contao-sing-bundle wird aber 'BugBuster\Xing\ModuleXingList' verwendet und nicht XingBundle. Wieso? Abgesehen davon: Ich sehe das FE-Modul, aber die Klasse wird offenbar nicht geladen. Struktur habe ich analog zu XingBundle aufgebaut.
    Die dca wird geladen (Datenbank aktualisiert), aber die Klasse offenbar nicht.
    Danke für einen konkreten Hinweis.
    GitHub: https://github.com/pnwscm60/contao-concerto-bundle

  5. #5
    Contao-Urgestein Avatar von fiedsch
    Registriert seit
    09.07.2009.
    Ort
    München
    Beiträge
    2.935

    Standard

    In https://github.com/pnwscm60/contao-c...oduleWerke.php hast Du keinen Namespace angegeben, versuchst aber, die Klasse mit

    Code:
    'werke'   => 'Pnwscm60\ConcertoBundle\ModuleWerke'
    über einen Namespace zu laden. Außerdem solltest Du machen, was @webstar in #2 gesagt hat.
    Contao-Community-Treff Bayern: http://www.contao-bayern.de

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

    Standard

    Wenn du schon Contao 4.8 benutzt, halte dich doch an die Dokumentation? Oder musst du mit Contao 4.4 kompatibel bleiben?

  7. #7
    Contao-Nutzer
    Registriert seit
    09.03.2014.
    Beiträge
    87

    Standard

    Das Bundle sollte auf zwei Seiten laufen, einer neuen, die ich auf 4.8 aufbaue, und einer anderen, die auf LTS 4.4 läuft. Habe bisher Erweiterungen nach alter Manier entwickelt und direkt abgelegt, aber da ja auch LTS 4.4 nicht ewig läuft, will ich mich in die Bundle-Entwicklung einarbeiten. Falls das Sinn macht, würde ich aber dann auch die alte Seite auf 4.8 anheben.

    Das Bundle ist im Wesentlichen ein DB-Frontend (Werkkatalog)

    Habe verschiedene Bundles und Vortrag von BugBuster als Vorlage verwendet > was müsste da anders sein?

    Für das laufende Problem: habe Namespace ergänzt in ModuleWerke, ändert aber nichts.

    Webster sagte „ Lege doch die Modulklasse direkt unter Module ab und nicht unter Resources/Contao/modules.“ > Was meinst du mit „Module“? Gleiche Ebene wie /src? Oder ein eigener Ordner „Module“?

    Danke für die Hilfe, Lernkurve steigt ...

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

    Standard

    Ein eigener Ordner src/Module, darin dann die Frontend Module Klasse. Namespace entsprechend anpassen.

  9. #9
    Contao-Nutzer
    Registriert seit
    09.03.2014.
    Beiträge
    87

    Standard

    /src/Module angelegt. Klasse wird jetzt gefunden, ergibt aber Fehlermeldung „ Attempted to load class "Module" from namespace "Pnwscm60\ConcertoBundle". Did you forget a "use" statement “ > was muss ich wo einbinden?

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

    Standard

    Du hast
    PHP-Code:
    namespace Pnwscm60\ConcertoBundle;
    class 
    ModuleWerke extends Module 
    geschrieben. Da sind zwei Fehler:

    • Du befindest dich in diesem Ordner im Namespace
      Code:
      Pnwscm60\ConcertoBundle\Module
      laut deiner autoload Konfiguration in deiner composer.json.

    • Im selben Namespace, wo sich deine Klasse "ModuleWerke" befindet, gibt es keine weitere Klasse namens "Module". Vermutlich meintest du
      Code:
      \Contao\Module
      Oder du verwendest ein use statement dafür.
    Geändert von Spooky (25.11.2019 um 10:01 Uhr)

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

    Standard

    Weitere Fehler:

    Hier gehört, nachdem du das vorherige behoben hast, dann natürlich
    Code:
    Pnwscm60\ConcertoBundle\Module\ModuleWerke
    Ich würde außerdem einfach nur
    PHP-Code:
    use Pnwscm60\ConcertoBundle\Module\ModuleWerke;

    $GLOBALS['FE_MOD']['concerto'] = [
        
    'werke' => ModuleWerke::class,
    ]; 
    schreiben.


    Du solltest dich an den PSR-1 und PSR-12 Standard halten. Beispielsweise verwendest du oft das PHP closing tag ("?>").
    Geändert von Spooky (25.11.2019 um 10:16 Uhr)

  12. #12
    Contao-Nutzer
    Registriert seit
    09.03.2014.
    Beiträge
    87

    Standard

    Habe in ModuleWerke (im Ordner Module)
    Code:
    namespace Pnwscm60\ConcertoBundle;
    class ModuleWerke extends \Contao\Module
    {
    }
    gesetzt. Damit wird die Klasse erkannt.

    Mit der von dir genannten zusätzlichen Änderung in config.php wird aber wieder nichts gefunden.

  13. #13
    Contao-Urgestein Avatar von fiedsch
    Registriert seit
    09.07.2009.
    Ort
    München
    Beiträge
    2.935

    Standard

    Code:
    namespace Pnwscm60\ConcertoBundle\Module;
    class ModuleWerke extends \Contao\Module
    {
    }
    Contao-Community-Treff Bayern: http://www.contao-bayern.de

  14. #14
    Contao-Nutzer
    Registriert seit
    09.03.2014.
    Beiträge
    87

    Standard

    Das wars! Herzlichen Dank für die Hilfe. Damit bin ich schon mal einen grossen Schritt weiter.
    Noch eine ergänzende Frage zu Datenbankabfragen: ich habe bisher die DB-Klasse verwendet, die ja auch mal ausscheidet. Was empfehlt Ihr da: weiterhin damit, bis sie verabschiedet wird und dann umbauen oder DB-Zugriffe gleich jetzt auf Doctrine\DBAL umbauen. Gäbe es dazu irgendwo ein kurzes Tutorial oder Übersicht?

    Danke!

  15. #15
    Alter Contao-Hase
    Registriert seit
    18.07.2012.
    Ort
    Löbau
    Beiträge
    1.124

    Standard

    Zitat Zitat von fiedsch Beitrag anzeigen
    Code:
    namespace Pnwscm60\ConcertoBundle\Module;
    class ModuleWerke extends \Contao\Module
    {
    }
    Es geht auch nur \Module oder?

    Wie ist das eigentlich, wird es nicht irgendwann alles auf Symfony-Basis laufen ? ich bilde mir ein irgendwo gab es mal ne Liste/Artikel was sich in Zukunft alles bei der Entwicklung von Extensions ändert.

    hab keine Lust bei jeder Version wieder für alle Kunden die Erweiterungen anzupassen
    Liebe Grüße
    WebRoxx


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

    Standard

    Der FQCN ist \Contao\Module. \Module ist ein von Contao gesetztes Alias.

    Wie du in aktuellen Contao Versionen Frontend Modulea umsetzt kannst du hier erfahren: https://docs.contao.org/dev/framewor...t-end-modules/
    Geändert von Spooky (01.12.2019 um 01:06 Uhr)

  17. #17
    Alter Contao-Hase
    Registriert seit
    18.07.2012.
    Ort
    Löbau
    Beiträge
    1.124

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    Der FQCN ist \Contao\Module. \Module ist ein von Contao gesetztes Alias.

    Wie du in aktuellen Contao Versionen Frontend Module umsetzt kannst du hier erfahren: https://docs.contao.org/dev/framewor...t-end-modules/
    Ah Okay, naja da muss man also doch einiges anpassen.
    Liebe Grüße
    WebRoxx


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
  •