Ergebnis 1 bis 8 von 8

Thema: Backend route - $GLOBALS leer

  1. #1
    Contao-Nutzer
    Registriert seit
    20.04.2011.
    Beiträge
    76

    Frage Backend route - $GLOBALS leer

    Hallo,

    ich habe eine Backend Route erstellt und will dort im Controller folgenden Code aufrufen:

    PHP-Code:
    $objTable = new \DC_Table$strTable );
    $strContent $objTable->showAll(); 
    Bekomme aber den Fehler:
    Code:
    User Error: Could not load the data container configuration
    Schaue ich mir $GLOBALS an ist dieser leer.

    Contao: 4.6.12


    routing.yml
    Code:
    contao_backend_demo:
      path: /contao/demo
      defaults:
        _scope: backend
        _token_check: true
        _controller: BUNDLENAME:Backend:demo
    BackendController.php
    PHP-Code:
    public function demoAction()
    {
    $this->get('contao.framework')->initialize(); // HIER IST ES ABER EGAL OB DIESE ZEILE VORHANDEN IST ODER NICHT!!

    $strTable 'tl_bundle_demo';
    $objTable = new \DC_Table$strTable );
    $strContent $objTable->showAll();

    $arrConfig = ['content'=>$strContent];

    return new 
    Response$this->get('twig')->render('@BUNDLENAME/Backend/demo.html.twig'$arrConfig) );

    Kann mir jemand helfen?
    Gibt es eigentlich eine Lösung mit den neuen Routen um eine Tabelle direkt aufzurufen?

    LG pressi

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

    Standard

    Ho!

    Ich bin nicht sicher was du brauchst:

    1.) Willst du ein "Select * FROM..." aufrufen, um einfach alle Einträge aus der Tabelle zu laden?
    2.) Oder möchtest du mit ShowAll() die Backend-Seite rendern?

    Falls du 1.) möchtest, benötigst du ein Model oder eine Symfony Entity.

    Im Controller könnte das so aussehen:

    PHP-Code:
    <?php

    namespace Dein\Namespace\Controller;

    use 
    Contao\ContentModel;

    class 
    DeinController {
        public function 
    deinCallback()
        {

            
    $this->framework $this->get('contao.framework');
            
    $this->get('contao.framework')->initialize();

            
    /** @var ContentModel $ContentModel */
            
    $ContentModel $this->framework->getAdapter(ContentModel::class);

            
    $Elements$ContentModel->findAll();

            
    // Achtung, diese Ausgabe kann massiv riesig werden
            
    echo '<pre>'.print_r($Elements1).'</pre>';
      }
    }
    Grüße Sascha W. @Sioweb
    schadebalken.de | zurück-zu-montag.de
    +++ Programmierer von Change-Lok erfasst worden +++

  3. #3
    Contao-Nutzer
    Registriert seit
    20.04.2011.
    Beiträge
    76

    Standard

    Zitat Zitat von Sioweb Beitrag anzeigen
    Ho!
    Ich bin nicht sicher was du brauchst:
    2.) Oder möchtest du mit ShowAll() die Backend-Seite rendern?
    Danke für deine Antwort.

    Ich bräuchte Zweiteres, eine ganz normale Listen Ansicht im Backend von einer Tabelle.
    Zum Beispiel wie bei den Nachrichten Archiven, Mitgliedern usw. mit allen Contao Funktion: Suche, Sortierung, Filter usw.

    LG

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

    Standard

    Ho!

    Ich würde da wie üblich vorgehen und eine DCA-Datei anlegen. Das mit einer eigenen Route abzubilden, scheint mir etwas kompliziert - zumindest wäre mir kein Lösungsansatz bekannt.

    Wie weit bist du mit der Entwicklung von Contao-Modulen vertraut? Hier hätte ich ein Modul mit einer Backend-Ansicht: https://github.com/Sioweb/glossar_c4

    Je nach dem hilft dir dazu auch die Datei hier: https://github.com/Sioweb/Contao3Dum...a/tl_dummy.php - ist zwar in einem Contao 3 Bundle, aber die DCA funktioniert nach wie vor.
    Grüße Sascha W. @Sioweb
    schadebalken.de | zurück-zu-montag.de
    +++ Programmierer von Change-Lok erfasst worden +++

  5. #5
    Contao-Nutzer
    Registriert seit
    20.04.2011.
    Beiträge
    76

    Standard

    Hallo,

    Danke für deine Antworten.

    OK, dann werd ich das so machen müssen.
    Ich erweitere die Backend Navigation mit dem Hook und ohne der Contao config.php.

    listener.yml
    Code:
    services:
        demobundle.navigation_listener:
            class: DEMOBUNDLE\EventListener\NavigationListener
            arguments:
                - "@request_stack"
                - "@router"
            tags:
                - { name: contao.hook, hook: getUserNavigation }
    und dann in der NavigationListener Klasse
    PHP-Code:
    public function onGetUserNavigation$arrModules )
        {
            
    $request $this->requestStack->getCurrentRequest();

            
    $arrDEMOModules =
            [
                
    'demos' =>
                [
                    
    'label'     => 'DEMO',
                    
    'class'     => 'navigation demo-class',
                    
    'href'      => $this->router->generate('contao_backend_demo'),
                    
    'isActive'  => 'contao_backend_demo' === $request->attributes->get('_route')
                ],
            ];

            if( isset(
    $arrModules['demobundle']) )
            {
                
    $arrModules['demobundle']['modules'] = array_merge
                
    (
                    
    $arrDEMOModules,
                    
    $arrModules['demobundle']['modules']
                );
            }
            else
            {
                
    array_insert
                
    (
                    
    $arrModules,
                    
    0,
                    [
                        
    'demobundle' =>
                        [
                            
    'class'     => 'node-expanded',
                            
    'title'     => 'Bereich schließen',
                            
    'label'     => 'DEMO BUNDLE',
                            
    'href'      => '/contao/demo?mtg=demobundle&ref=' TL_REFERER_ID,
                            
    'ajaxUrl'   => '/contao',
                            
    'icon'      => 'modPlus.gif',
                            
    'modules'   => $arrDEMOModules
                        
    ]
                    ]
                );
            }

            return 
    $arrModules;
        } 
    Wenn ich das umschreibe (href ändern z.B. in "/contao?do=demobundle") und tables dem Array hinzufüge, bekomme ich die Meldung das der Eintrag in BE_MOD nicht existiert.
    Sprich um eine Tabelle in Contao abzubilden funktioniert nur der Weg über die Contao config.php Datei?
    Außer ich bilde die Listenansicht und den Bearbeiten-Modus selbst ab.

    Gibt es dazu einen Ansatz in Zukunft ohne der Contao config.php Datei?

    Liebe Grüße
    pressi

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

    Standard

    Derzeit musst du das noch so machen, ja.

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

    Standard

    Ho!

    ein Ansatz wäre wie du es vormachst, mit dem Event initializeSystem. Damit wird dann ein Callback aufgerufen der den gesamten Inhalt der config.php aus deinem Modul enthält. Funktioniert ab 4.6 glaube ich.

    Die Backend-Navigation wird wie in der config.php aufgebaut, hier ist ein Beispiel in dem das initializeSystem Event genutzt wird: https://github.com/Sioweb/Contao4DummyBundle - Die config.php ist trotzdem noch drin in dem Modul, weil es sonst nicht in Contao 4.4 funktionieren würde.

    So in etwa könnte der Callback aussehen:

    PHP-Code:
    <?php

        
    public function __construct(ContaoFramework $contaoFramework)
        {
            
    $this->contaoFramework $contaoFramework;
            
    $this->contaoFramework->initialize();
        }

        
    /* InitializeSystem */
        
    public function initializeSystem()
        {
            
    array_insert($GLOBALS['BE_MOD']['content'], 1, array(
                
    'demobundle' => array(
                    
    'tables' => array('tl_demobundle'),
                ),
            ));
        }
    Grüße Sascha W. @Sioweb
    schadebalken.de | zurück-zu-montag.de
    +++ Programmierer von Change-Lok erfasst worden +++

  8. #8
    Contao-Nutzer
    Registriert seit
    20.04.2011.
    Beiträge
    76

    Daumen hoch

    Zitat Zitat von Sioweb Beitrag anzeigen
    ein Ansatz wäre wie du es vormachst, mit dem Event initializeSystem. Damit wird dann ein Callback aufgerufen der den gesamten Inhalt der config.php aus deinem Modul enthält. Funktioniert ab 4.6 glaube ich.
    Stimmt so kann ich das derzeit machen, Danke.

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
  •