Ergebnis 1 bis 6 von 6

Thema: Extension fertig konzeptioniert, wie in Gang setzen?

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

    Standard Extension fertig konzeptioniert, wie in Gang setzen?

    Moin moin,

    habe in der dca/*.php folgenden Global Operator hinzugefügt:

    PHP-Code:
     'list' => array
     (
                
    // Globale Operatoren
            
    'global_operations' => array
            (
                
    'xml_export' => array
                (
                    
    'label'                    => &$GLOBALS['TL_LANG']['ammap_data']['xml_export'],
                    
    'href'                      => 'key=xml_export',
                    
    'class'                      => 'header_xml_export',
                    
    'attributes'                              => 'onclick="Backend.getScrollOffset();"',
                    
    'icon'                      => 'system/modules/ammap_editor/html/save.png'
                
    )
            ),

    Und in der config/config.php auch schon "bekanntgemacht":

    PHP-Code:
    array_insert($GLOBALS['BE_MOD']['content'],4,
        array (
            
    'Membermap'=> array(
                    
    'tables'      => array('ammap_data'),
                    
    'xml_export' => array('amMapEditor''xmlExport'),
                    
    'icon'          => 'system/modules/ammap_editor//html/module_icon.png'
                    
    )
        )
    ); 
    Dann im Root in der amMapEditor.php

    PHP-Code:
    <?php
    class amMapEditor extends module
    {
      protected 
    $strTemplate 'ammap_xml';

      public function 
    xmlExport()
      {
        echo 
    'Hello World!';
      }
    }
    ?>
    spaßeshalber mal ein echo ausgeben wollen. Wenn ich jetzt im Backend auf den entsprechenden Knopp drücke,
    komme ich einfach nur zu einem komplett leeren Html-Dokument, ohne Echo, ohne Fehlermeldungen. Was mache ich falsch?
    Und wie schaffe ich es später, dass wenn die (noch in der Entwicklung) zukünftige Funktion fertig ist, dass irgendeine Statusmeldung
    á la "XML Datei wurde aktualisiert" über der Liste ausgegeben wird?

    Herzlichen Dank für jeden Hinweis!


    Edit: Ok, Mist. Habe mal die Fehlermeldungen angeschaltet! Folgendes:
    Code:
    Fatal error: Class amMapEditor contains 1 abstract method and must therefore be declared abstract or implement the remaining methods (Module::compile) in D:\xampp\htdocs\Contao\wfpha\system\modules\ammap_editor\amMapEditor.php on line 3
    Heißt das, ich muss das ganze noch irgendwie in die Funktion "compile" verpacken?
    Geändert von Papillon (29.08.2011 um 10:45 Uhr)

  2. #2
    Contao-Urgestein
    Registriert seit
    03.06.2010.
    Ort
    Wuppertal
    Beiträge
    2.149
    User beschenken
    Wunschliste

    Standard

    Erweiter mal BackendModule statt module und ja, du brauchst auf jeden Fall die compile() Methode.

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

    Standard

    Hallo Flex, vielen Dank für die schnelle Hilfe!

    Habe jetzt einfach mal drauflosgelegt und folgendes (aus dem Tutorial) übernommen
    und eingebaut, einfach, damit es die compile() überhaupt gibt. Damit bin ich schon
    ein Stück weiter, das echo wird ausgegeben!

    Code:
    Hello World!
    Warning: Cannot modify header information - headers already sent by (output started at D:\xampp\htdocs\Contao\wfpha\system\modules\ammap_editor\amMapEditor.php:17) in D:\xampp\htdocs\Contao\wfpha\system\libraries\Template.php on line 230
    
    #0 [internal function]: __error(2, 'Cannot modify h...', 'D:\xampp\htdocs...', 230, Array)
    #1 D:\xampp\htdocs\Contao\wfpha\system\libraries\Template.php(230): header('Content-Type: t...')
    #2 D:\xampp\htdocs\Contao\wfpha\system\modules\backend\BackendTemplate.php(143): Template->output()
    #3 D:\xampp\htdocs\Contao\wfpha\contao\main.php(295): BackendTemplate->output()
    #4 D:\xampp\htdocs\Contao\wfpha\contao\main.php(104): Main->output()
    #5 D:\xampp\htdocs\Contao\wfpha\contao\main.php(304): Main->run()
    #6 {main}
    Was genau möchte er nun von mir? Die amMapEditor.php sieht nun so aus:

    PHP-Code:
    <?php
    class amMapEditor extends BackendModule
    {
      protected 
    $strTemplate 'ammap_xml';
      
      protected function 
    compile()
      {
        
    $data = array();
        
    $data['ammap_data']['name'] = 'Audi';
        
    $data['ammap_data']['country'] = 'A5';

        
    $this->Template->data $data;
      }
      
      function 
    xmlExport()
      {
        echo 
    'Hello World!';
      }
    }
    ?>

  4. #4
    Contao-Fan Avatar von eS_IT
    Registriert seit
    21.07.2010.
    Ort
    Werne a. d. Lippe
    Beiträge
    585
    Partner-ID
    6161
    User beschenken
    Wunschliste

    Standard

    Hallo Papillon,
    Du kannst die compile-Methode auch ganz leer lassen, wenn Du sie nicht brauchst.
    Der Fehler heißt nur, dass Du eine Ausgabe gemacht hast (echo 'Hello World!';). Deshalb kann Contao die Header-Informationen nicht mehr ändern. Wenn Du keine Testausgaben machst, ist auch der Fehler weg.

    Viele Grüße,
    eS_IT
    Viele Grüße,
    eS_IT
    --
    e@sy Solutions IT - Ihr Partner für professionelle Softwareentwicklung
    Website - Contao Codebook - Partnerprofil - GitHub

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

    Standard

    Hallo eS_IT,

    vielen Dank für den schnellen Hinweis!

    Nun stellen sich mir zwei Fragen:
    1.) Wozu ist denn die compile() da? Übersetzt heißt compile ja inetwa "zusammenstapeln" - wird dort also
    in der Regel alles, was die Extension so benötigt zusammengetragen und für die weitere Verwendung vorbereitet?
    2.) Ich möchte mit der Funktion xmlExport eine XML-Datei speichern. Kann ich dafür irgendwie das Contao-Interne Template-System
    benutzen, oder ist es sinnvoller, das Template einfach mit in die Funktion zu schreiben? Ich fürchte, das es eigentlich egal ist und die
    Entscheidung bei mir liegt ;-)

    Herzlichen Gruß,

    Papillon


    Edit: Wenn ich nun auf den Button drücke, ohne jegliche Funktionen (also sie existieren zwar, sind aber leer), dann verschwindet die
    Modul-Listenansicht komplett. Wenn es dann später mal eine Funktion gibt, die ausgeführt wird, wie stelle ich es an, dass nach Klick auf den
    Global Operator oberhalb der Listenansicht eine Bestätigung ausgegeben wird und man ggf. gleich weiter an der Liste arbeiten kann? Oder passiert
    das dann von alleine, wenn es erstmal soweit ist?
    Geändert von Papillon (29.08.2011 um 12:37 Uhr)

  6. #6
    Contao-Fan Avatar von eS_IT
    Registriert seit
    21.07.2010.
    Ort
    Werne a. d. Lippe
    Beiträge
    585
    Partner-ID
    6161
    User beschenken
    Wunschliste

    Standard

    Zitat Zitat von Papillon Beitrag anzeigen
    1.) Wozu ist denn die compile() da?
    Wenn Du ein HTML-Template in Deiner Erweiterung verwendest, fügt die compile-Methode die Werte ein und gibt es aus. Das wirst Du wahrscheinlich bei Deinem Vorhaben erst mal nicht brauchen. Du musste Sie trotzdem angeben, da die Elternklasse, von der Deine Klasse abgeleitet wird, dies vorschreibt. (Weitere Info zu OOP in PHP findest Du hier.)

    Zitat Zitat von Papillon Beitrag anzeigen
    2.) Kann ich dafür irgendwie das Contao-Interne Template-System
    benutzen, oder ist es sinnvoller, das Template einfach mit in die Funktion zu schreiben?
    Contao nutzt, soweit ich weiß nur PHP und HTML für die Templates. Du kannst natürlich eine XML-Datei im Ordner templates Deiner Erweiterung erstellen, diese mit PHP parsen und die Werte einsetzen. Man sollte grundsätzlich so wenig wie möglich HTML, XML o.ä. in seinen PHP-Code einbauen. Mach mal ist es, gerade bei kleinen Sachen aber einfach leichter.

    Zitat Zitat von Papillon Beitrag anzeigen
    Wenn es dann später mal eine Funktion gibt, die ausgeführt wird, wie stelle ich es an, dass nach Klick auf den
    Global Operator oberhalb der Listenansicht eine Bestätigung ausgegeben wird und man ggf. gleich weiter an der Liste arbeiten kann? Oder passiert
    das dann von alleine, wenn es erstmal soweit ist?
    Contao veruscht immer die zur Erweiterung gehörende Tabelle anzeigen, wenn Du auf der Seite bleiben willst, musst Du darauf zurück lenken. Zum Beispiel so:

    PHP-Code:
    $path $this->Environment->base 'contao/main.php?do=' $this->Input->get('do');
    $this->redirect($path301); 
    Ich hoffe, ich konnte Helfen und es ist einigermaßen verständlich.

    Viele Grüße,
    eS_IT
    Viele Grüße,
    eS_IT
    --
    e@sy Solutions IT - Ihr Partner für professionelle Softwareentwicklung
    Website - Contao Codebook - Partnerprofil - GitHub

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
  •