Ergebnis 1 bis 5 von 5

Thema: Callback-Module mit Anbindung einer DCA Seite

  1. #1
    Contao-Nutzer
    Registriert seit
    22.02.2011.
    Beiträge
    20

    Standard Callback-Module mit Anbindung einer DCA Seite

    Servus Forum,

    ich sitze seit geraumer Zeit an einem Problem, an dem ich mir die Zähne ausbeisse. Es scheint auch etwas spezieller zu sein, da ich bislang keinen Ansatz für das Problem gefunden habe.

    Mein Ziel ist folgendes: ich möchte ein Backend-Modul mit einer individuell gestalteten Seite erstellen und von dort auf eine tabellen-basierte DCA-Seite verweisen. Da es so etwas schon gibt, dachte ich, es müsste doch einfach nachzubauen sein. Und zwar verwendet das Avisota-Modul genau solch ein Backend-Modul. Wenn man bei Avisota auf den Menüpunkt "Analytics" klickt, erscheint eine individuell gestaltete Seite mit Grafiken. Oben rechts hat man die Möglichkeit, die Daten zu exportieren. Dieser Link verweist auf eine Seite, die DCA Tabellen verwendent.

    Mein Gedanke: genau das benötige ich. Also habe ich folgendes festgelegt:

    in der config.php
    PHP-Code:
    'first_page' => array (
            
    'callback'   => 'firstPage',
            
    'tables'     => array('tl_first_page_edit')

    Dann habe ich auch eine firstPage.php angelegt, ein Template erstellt und im Verzeichnis dca die Datei tl_first_page_edit.php erstellt.

    Inhalt der tl_first_page_edit.php
    PHP-Code:
    $GLOBALS['TL_DCA']['tl_first_page_edit'] = array
    (
            
    'config' => array  
            (
                
    'dataContainer'             => 'Memory',
                
    'closed'                    => true,
                
    'onload_callback'           => array
                (
                        array(
    'tl_first_page_edit''onload_callback'),
                ),
                
    'onsubmit_callback'           => array
                (
                        array(
    'tl_first_page_edit''onsubmit_callback'),
                )
            ),


            
    'palettes' => array
            (
                
    'default'                    => '{legend},name'
            
    ),

            
    'fields' => array
            (
                
    'name' => array
                (
                    
    'label'                    => &$GLOBALS['TL_LANG']['tl_first_page_edit']['name'],
                    
    'inputType'                => 'text',
                    
    'search'                => true,
                    
    'eval'                    => array('mandatory'=>true'maxlength'=>255'tl_class'=>'w50')
                )
            )
    );

    class 
    tl_first_page_edit extends Backend
    {
        public function 
    __construct()
        {
            
    parent::__construct();
            
    $this->import('BackendUser''User');
        }

        public function 
    onload_callback(DataContainer $dc)
        {
            
    $dc->setData('date''Wert');
        }

        public function 
    onsubmit_callback(DataContainer $dc)
        {
            
    $arrData $dc->getDataArray();
        }

    Also komplett analog zu Avisota.

    Die erste, individuelle Seite wird angezeigt. Das funktioniert wunderbar. Jedoch der Link auf die zweite Seite funktioniert nicht. Diese wird mit der URL contao/main.php?do=first_page&table=tl_first_page_edit aufgerufen (analog zu Avisota). Doch es wird wieder die erste Seite geladen. Keine Fehlermeldung, kein sonstiger Hiweis, was falsch gelaufen ist.

    Hat jemand eine Idee? Fehlt irgendwo noch eine Einstellung? Oder liege ich mit meiner Idee komplett falsch.

    Ich freue mich auf Eure Rückmeldungen.

    Viele Grüße

    Dirk

  2. #2
    Contao-Nutzer
    Registriert seit
    22.02.2011.
    Beiträge
    20

    Standard

    keiner eine Idee oder Anregung?

  3. #3
    Contao-Urgestein Avatar von Toflar
    Registriert seit
    15.06.2009.
    Beiträge
    4.467
    Partner-ID
    8667
    User beschenken
    Wunschliste

    Standard

    Hey Dirk

    DCA steht für "DataContainer Array" und das wiederum definiert, wie sich ein bestimmter "DataContainer" verhalten soll.

    Der Core bietet deren drei:
    • Table - der mächtigste von allen, macht die Baum-Darstellung und die Listen etc.
    • File - bearbeitet die localconfig.php und wir im Core nur von den Einstellungen verwendet
    • Folder - stellt das Dateiverwaltungssystem dar


    Wie Du siehst, verwendet Tristan "Memory". Das ist eine Extension - ein eigener Treiber, der auch andere Konfigurationen erwartet. Die "Memory" wurde dafür konzipiert, nicht direkt und automatisiert in die DB zu schreiben, sondern mit "onload_callback" und "onsubmit_callback"'s die Daten manuell zu befüllen und zu speichern.

    Dir fehlt womöglich diese Extension und das Wissen dazu, wie man diesen Treiber bedient (was man sich nur durch Lesen des Treibers aneignen kann )
    Contao Core-Entwickler @terminal42 gmbh
    Wir sind Contao Premium-Partner!
    Für Individuallösungen kannst du uns gerne kontaktieren.
    PS: Heute schon getrakked?

  4. #4
    Contao-Nutzer
    Registriert seit
    22.02.2011.
    Beiträge
    20

    Standard

    Hallo Toflar,

    vielen Dank für Deine Antwort.

    Das ich die Extension "DC_Memory" benötige habe ich schon rausgefunden. Da ich Avisota in der gleichen Contao-Umgebung installiert habe, ist auch die Extension da. Die Funktionen "onload_callback" und "onsubmit_callback" habe ich auch integriert (siehe Code oben) und prinzipiell weiss ich auch, was diese Extension macht. Aber vielleicht muss ich mich noch mehr mit dieser Extension beschäftigen.

    Dann werd ich mich mal weiter in diese Extension eingraben und schauen, dass die Erleuchtung mich trifft :-)

    Dirk

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

    Standard

    Zitat Zitat von schlesie Beitrag anzeigen
    Hallo Toflar,

    vielen Dank für Deine Antwort.

    Das ich die Extension "DC_Memory" benötige habe ich schon rausgefunden. Da ich Avisota in der gleichen Contao-Umgebung installiert habe, ist auch die Extension da. Die Funktionen "onload_callback" und "onsubmit_callback" habe ich auch integriert (siehe Code oben) und prinzipiell weiss ich auch, was diese Extension macht. Aber vielleicht muss ich mich noch mehr mit dieser Extension beschäftigen.

    Dann werd ich mich mal weiter in diese Extension eingraben und schauen, dass die Erleuchtung mich trifft :-)

    Dirk
    Inwieweit du den DC_Memory brauchst und nicht auch mit einen der gewöhnlichne Treiber klarkommst, musst du selbst entscheiden. Was du machen möchtest, lässt sich jedenfalls über ein BackendModule als Callback lösen. In einem Beispiel mache ich es folgendermaßen: Ich benutze die generate() um zu entscheiden, welche Aktionen der DataContainer rendern soll und welche ich individuell löse. An dem Beispiel wird lediglich bei der install Anweisung über die parent::generate() der Inhalt generiert (Template + Logik innerhalb der compile()). Alle anderen Aktionen löst der DataContainer für mich.

    PHP-Code:
        public function generate()
        {
            
    $strAct = \Input::get('act');
            
            switch (
    $strAct
            {
                case 
    'edit':
                case 
    'editAll':        
                case 
    'delete':
                case 
    'show':
                case 
    'sync':
                    return 
    $this->objDc->$strAct();
                    break;
                    
                case 
    'install':
                    return 
    parent::generate();
                    break;
                
                default:
                    return 
    $this->objDc->showAll();        
                    break;
            }                
        } 

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
  •