Ergebnis 1 bis 5 von 5

Thema: gelöst: Frontend-Module werden nicht geladen

  1. #1
    Contao-Nutzer
    Registriert seit
    06.08.2010.
    Beiträge
    72

    Standard gelöst: Frontend-Module werden nicht geladen

    Hallo zusammen,

    ich habe ein Bundle für contao 4.4.7 angelegt und die Backend Module werden auch korrekt geladen. Alleine die Frontend Module werden komplett ignoriert, es wird auch keine Fehlermeldung ausgegeben. Was hat sich da zu contao 3.5 geändert? Aktuell ist die Definition wie gehabt.

    config/config.php
    PHP-Code:
     /**
      * Front end modules
      */
     
    array_insert($GLOBALS['FE_MOD'], 3, array
     (
         
    'piece' => array
         (
             
    'piecelist'   => 'ModulePieceList',
             
    'piecereader' => 'ModulePieceReader',
         )
     )); 
    modules/ModulePieceList.php
    PHP-Code:
    <?php

    namespace dieschittigs;

    class 
    ModulePieceList extends \ModulePiece
    {
        
    /**
         * Template
         * @var string
         */
        
    protected $strTemplate 'mod_piecelist';


        
    /**
         * Display a wildcard in the back end
         *
         * @return string
         */
        
    public function generate()
        {
            if (
    TL_MODE == 'BE')
            {
                
    /** @var \BackendTemplate|object $objTemplate */
                
    $objTemplate = new \BackendTemplate('be_wildcard');
                
    $objTemplate->wildcard '### ' utf8_strtoupper($GLOBALS['TL_LANG']['FMD']['piecelist'][0]) . ' ###';
                
    $objTemplate->title $this->headline;
                
    $objTemplate->id $this->id;
                
    $objTemplate->link $this->name;
                
    $objTemplate->href 'contao/main.php?do=themes&amp;table=tl_module&amp;act=edit&amp;id=' $this->id;
                return 
    $objTemplate->parse();
            }
            return 
    parent::generate();
        }

        
    /**
         * Generate the module
         */
        
    protected function compile()
        {
            echo 
    "hallo"; die;
        }

    }
    /ModulePiece extended dann /Module

    Da wir einen eigenen Namespace verwenden müssen die Models in der config.php geladen werden:

    PHP-Code:
    $GLOBALS['TL_MODELS']['tl_piece'] = 'DieSchittigs\\SttgsShopify\\Models\\PieceModel'
    Liegt es vielleicht daran, muss ich auch die Modul-Klassen so laden? Und wenn ja, wie genau?

    Und noch eine Frage: Müssen die Templates wieder registriert werden wie in 3.5?

    Danke!
    Martin
    Geändert von benfolds (16.10.2017 um 16:15 Uhr)

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

    Standard

    Ein Vöglein hat mir vorhin gezwitschert, dass du die Klassen noch zum autoloading von Symfony hinzufügen musst.
    Das machst du über die composer.json im root deiner Installation. Die autoload.php aus Contao 3.5 entfällt.

    Bei mir sieht das wie folgt aus:

    Code:
    "autoload": {
       "psr-0": {
          "Course\\": [
             "pathToYourClasses"
          ]
       }
    }
    Danach musst du ggf. über die Console noch einmal
    Code:
    composer dump-autoload
    ausführen.

    Ich hoffe, daran liegt es und es löst dein Problem.

  3. #3
    Contao-Nutzer
    Registriert seit
    06.08.2010.
    Beiträge
    72

    Standard

    Hallo sebi, danke für den Denkanstoß! Es lag an der instanziierung der Klassen in der config.php:

    PHP-Code:
     /**
      * Front end modules
      */
     
    array_insert($GLOBALS['FE_MOD'], 3, array
     (
         
    'piece' => array
         (
             
    'piecelist'   => 'DieSchittigs\\SttgsShopify\\Modules\\ModulePieceList',
             
    'piecereader' => 'DieSchittigs\\SttgsShopify\\Modules\\ModulePieceReader',
         )
     )); 
    Die Klassen wurden im autoloader bereits geladen:

    Code:
        "autoload": {
            "psr-4": {
                "DieSchittigs\\SttgsShopify\\" : "src/"
            },
    Viele Grüße
    Martin

  4. #4
    Contao-Nutzer
    Registriert seit
    09.09.2015.
    Beiträge
    88

    Frage

    Kannst du deine Antwort wenn möglich nochmal genauer erläutern?
    Muss ich die Klassen jetzt in der config.php oder in der composer.json angeben?
    Ich sitze vor dem selben Problem, dass die Frontendmodule nicht geladen werden.
    In der vom Composer generierten Autoloader stehen die Klassen und Namespaces.
    Ich weiß nicht wo der Fehler liegt.

    In welche composer.json muss ich den autoloader Eintrag vornehmen? Im Root oder in der Extension?

  5. #5
    Contao-Nutzer
    Registriert seit
    06.08.2010.
    Beiträge
    72

    Standard

    Hey Mario,

    also wenn ich mich noch richtig erinnere lag es daran, dass die Module in der config.php mit dem kompletten Namespace geladen werden müssen.

    PHP-Code:
    /** 
      * Front end modules 
      */ 
     
    array_insert($GLOBALS['FE_MOD'], 3, array 
     ( 
         
    'piece' => array 
         ( 
             
    'piecelist'   => 'DieSchittigs\\SttgsShopify\\Modules\\ModulePieceList'
             
    'piecereader' => 'DieSchittigs\\SttgsShopify\\Modules\\ModulePieceReader'
         ) 
     )); 
    In der composer.json (Root) reicht es dann, das bundle einzubinden

    Code:
    {
        ...
        "require": {
            ...
            "dieschittigs/sttgsshopify": "@dev",
            ...
        }
        "repositories": [
            { "type": "path", "url": "./bundles/sttgsshopify" }
        ],
        ...
    }
    Im Bundle selbst brauchst du natürlich auch eine composer.json

    Viel Erfolg!

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
  •