Ergebnis 1 bis 22 von 22

Thema: Backend-Modul: Eigenes BE Template aufrufen

  1. #1
    Contao-Nutzer Avatar von dako314
    Registriert seit
    04.05.2013.
    Ort
    Mannheim
    Beiträge
    120

    Fehler Backend-Modul: Eigenes BE Template aufrufen

    Hallo zusammen,

    ich habe folgende Problemstellung:

    In meiner Datenbank befinden sich in einer selbst erstellten Tabelle Einträge. Diese Einträge sind einzeln gesehen nicht relevant, da sie eher zusammengefasst werden müssen.

    Daher möchte ich jetzt ein Modul erstellen und mir ein eigenes Template bauen, welches im Backend aufgerufen/angezeigt wird.

    Wie kann ich entscheiden, was aus der Datenbank gelesen wird?

    Wie stelle ich es ein, dass das Backend-Template aufgerufen wird?


    Ich habe schon Module entwickelt, in denen die Dateien "normal" als Liste dargestellt sind und im FE dann angezeigt werden, doch ist es überhaupt möglich, dass so zu machen, wie ich es brauche?

    Vielen Dank
    Dako314

  2. #2
    Contao-Nutzer Avatar von dako314
    Registriert seit
    04.05.2013.
    Ort
    Mannheim
    Beiträge
    120

    Standard

    Habe da glaub ich gerade was gefunden:

    $GLOBALS['BE_MOD']['lorem']['ipsum'] = array(
    'callback' => 'ModuleDolor'
    );

    Mit einem Callback geht das glaub ich ... sonst noch Ideen?

  3. #3
    Contao-Nutzer
    Registriert seit
    11.03.2015.
    Beiträge
    116

    Standard Eigenes Template für Backend-Modul

    Hallo!

    Ich stehe gerade vor der gleichen Aufgabe.

    Ich benötige ein Backend-Modul welches die Daten alles Bestellungen im Isotope-Shop als XML-Datei exportiert.

    Also ein Formular mit der Auswahl des Zeitraums und einen Absende-Button. Nach dem Anklicken soll die XML-Datei zum Download bereitgestellt werden.

    Benötige ich dafür ein eigenes Template im Backup?

    Wie muss ich davor gehen?

    Danke Euch!

  4. #4
    Contao-Urgestein Avatar von Samson1964
    Registriert seit
    05.11.2012.
    Ort
    Berlin
    Beiträge
    2.794

    Standard

    Ich würde mich in das DCA-Array von Isotope mit reinhängen. Über global_operations wird ein Link in Deiner Isotope-Tabelle angelegt. Das kannst Du Dir sicher beim Inhaltselement Tabelle abschauen, wo Du ja eine CSV-Datei hochladen kannst. Ein Export ist ja dann ähnlich.

    Hier mal ein kleines Beispiel für einen Export als CSV. In meinem Beispiel wird aber keine extra Ausgabe erzeugt. Nach Klick auf Export wird sofort die Datei zum Download angeboten. In der Funktion exportTrainer mußt Du vor dem Download noch Dein Formular einbauen (abschauen beim Tabellen-Import, s.o.).

    config/config.php:
    PHP-Code:
    $GLOBALS['BE_MOD']['dsb']['trainerlizenzen']['export'] = array('trainerlizenzExport''exportTrainer'); 
    config/autoload.php:
    PHP-Code:
    ClassLoader::addClasses(array
    (
        
    // Classes
        
    'trainerlizenzExport' => 'system/modules/trainerlizenzen/classes/trainerlizenzExport.php',
    )); 
    dca/tl_trainerlizenzen.php:
    PHP-Code:
    $GLOBALS['TL_DCA']['tl_trainerlizenzen']['list']['global_operations']['export'] = array
                (
                    
    'label'               => &$GLOBALS['TL_LANG']['tl_trainerlizenzen']['export'],
                    
    'href'                => 'key=export',
                    
    'icon'                => 'system/modules/trainerlizenzen/assets/images/exportCSV.gif',
                    
    'attributes'          => 'onclick="Backend.getScrollOffset();"'
                
    ),
    };

    classes/trainerlizenzExport.php:
    PHP-Code:
    <?php if (!defined('TL_ROOT')) die('You cannot access this file directly!');


    /**
     * Class dsb_trainerlizenzExport
      */
    class trainerlizenzExport extends \Backend
    {

        
    /**
         * Return a form to choose a CSV file and import it
         * @param object
         * @return string
         */

        
    public function exportTrainer(DataContainer $dc)
        {
            if (
    $this->Input->get('key') != 'export')
            {
                return 
    '';
            }

            
    $arrExport $this->getRecords($dc); // Lizenzen auslesen

            
    $exportFile =  'DSB-Trainerlizenzen-Export' date("Ymd-Hi");
            
            
    header('Content-Type: application/csv');
            
    header('Content-Transfer-Encoding: binary');
            
    header('Content-Disposition: attachment; filename="' $exportFile .'.csv"');
            
    header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
            
    header('Pragma: public');
            
    header('Expires: 0');

            
    $output '';
            foreach (
    $arrExport as $export
            {
                
    $output .= '"' join('";"'$export).'"' "\n";
            }

            echo 
    $output;
            exit;
        }

        public function 
    getRecords(DataContainer $dc)
        {
            
    // Liest die Datensätze der Trainerlizenzen in ein Array

            // Suchbegriff in aktueller Ansicht laden
            
    $search $dc->Session->get('search');
            
    $search $search[$dc->table]; // Das Array enthält field und value
            //if($search['field']) $sql = " WHERE ".$search['field']." LIKE '%%".$search['value']."%%'"; // findet auch Umlaute, Suche nach "ba" findet auch "bä"
            
    if($search['field'] && $search['value']) $sql " WHERE LOWER(CAST(".$search['field']." AS CHAR)) REGEXP LOWER('".$search['value']."')"// Contao-Standard, ohne Umlaute, Suche nach "ba" findet nicht "bä"
            
    else $sql '';

            
    // Filter in aktueller Ansicht laden
            
    $filter $dc->Session->get('filter');
            
    $filter $filter[$dc->table]; // Das Array enthält limit (Wert meistens = 0,30) und alle Feldnamen mit den Werten
            
    foreach($filter as $key => $value)
            {
                if(
    $key != 'limit')
                {
                    (
    $sql) ? $sql .= ' AND' $sql ' WHERE';
                    
    $sql .= " ".$key." = '".$value."'";
                }
            }
            
    $sql .= ' ORDER BY name,vorname ASC';

            
    //echo "|$sql|";
            //exit;
            // Datensätze laden
            
    $records = \Database::getInstance()->prepare('SELECT * FROM tl_trainerlizenzen'.$sql)
                                               ->
    execute();

            
    // Datensätze umwandeln
            
    $arrExport = array();
            
    // Kopfzeile anlegen
            
    $arrExport[0]['vorname'] = 'Vorname';
            
    $arrExport[0]['name'] = 'Name';
            
    $arrExport[0]['lizenznummer'] = 'Lizenznummer';
            
    $arrExport[0]['lizenz'] = 'Lizenz';
            
    $arrExport[0]['gueltigkeit'] = utf8_decode('Gültig bis');
            
    $arrExport[0]['geburtstag'] = 'Geburtsdatum';
            
    $arrExport[0]['strasse'] = 'Strasse';
            
    $arrExport[0]['plz'] = 'PLZ';
            
    $arrExport[0]['ort'] = 'Ort';
            
    $arrExport[0]['erwerb'] = 'Lizenzerwerb';
            
    $arrExport[0]['verlaengerung1'] = utf8_decode('Verlängerung (1)');
            
    $arrExport[0]['verlaengerung2'] = utf8_decode('Verlängerung (2)');
            
    $arrExport[0]['verlaengerung3'] = utf8_decode('Verlängerung (3)');
            
    $arrExport[0]['verlaengerung4'] = utf8_decode('Verlängerung (4)');
            
    $arrExport[0]['letzteAenderung'] = utf8_decode('Letzte Änderung');
            
    $arrExport[0]['bemerkung'] = 'Bemerkung';
            
    $arrExport[0]['published'] = utf8_decode('Veröffentlicht');
            
    $arrExport[0]['titel'] = 'Titel';
            
    $arrExport[0]['email'] = 'Emailadresse';
            
    $arrExport[0]['verband'] = 'Verband';
            
    $arrExport[0]['id'] = 'ID';
            
    $arrExport[0]['tstamp'] = 'Zeitstempel';
            
    $x 1;
            if(
    $records->numRows)
            {
                while(
    $records->next()) 
                {
                    
    $arrExport[$x]['vorname'] = utf8_decode($records->vorname);
                    
    $arrExport[$x]['name'] = utf8_decode($records->name);
                    
    $arrExport[$x]['lizenznummer'] = $records->lizenznummer;
                    
    $arrExport[$x]['lizenz'] = $records->lizenz;
                    
    $arrExport[$x]['gueltigkeit'] = $this->getDate($records->gueltigkeit);
                    
    $arrExport[$x]['geburtstag'] = $this->getDate($records->geburtstag);
                    
    $arrExport[$x]['strasse'] = utf8_decode($records->strasse);
                    
    $arrExport[$x]['plz'] = $records->plz;
                    
    $arrExport[$x]['ort'] = utf8_decode($records->ort);
                    
    $arrExport[$x]['erwerb'] = $this->getDate($records->erwerb);
                    
    $arrExport[$x]['verlaengerung1'] = $this->getDate($records->verlaengerung1);
                    
    $arrExport[$x]['verlaengerung2'] = $this->getDate($records->verlaengerung2);
                    
    $arrExport[$x]['verlaengerung3'] = $this->getDate($records->verlaengerung3);
                    
    $arrExport[$x]['verlaengerung4'] = $this->getDate($records->verlaengerung4);
                    
    $arrExport[$x]['letzteAenderung'] = $this->getDate($records->letzteAenderung);
                    
    $arrExport[$x]['bemerkung'] = utf8_decode($records->bemerkung);
                    
    $arrExport[$x]['published'] = $records->published;
                    
    $arrExport[$x]['titel'] = $records->titel;
                    
    $arrExport[$x]['email'] = $records->email;
                    
    $arrExport[$x]['verband'] = utf8_decode($records->verband);
                    
    $arrExport[$x]['id'] = $records->id;
                    
    $arrExport[$x]['tstamp'] = date("d.m.Y H:i:s",$records->tstamp);
                    
    $x++;
                }
            }
            return 
    $arrExport;
        }

        
    /**
         * Datumswert aus Datenbank umwandeln
         * @param mixed
         * @return mixed
         */
        
    public function getDate($varValue)
        {
            
    $laenge strlen($varValue);
            
    $temp '';
            
            if(
    is_numeric($varValue))
            {
                switch(
    $laenge)
                {
                    case 
    10// TT.MM.JJJJ (altes Format)
                        
    $temp $varValue;
                        break;
                    case 
    8// JJJJMMTT
                        
    $temp substr($varValue,6,2).'.'.substr($varValue,4,2).'.'.substr($varValue,0,4);
                        break;
                    case 
    6// JJJJMM
                        
    $temp substr($varValue,4,2).'.'.substr($varValue,0,4);
                        break;
                    case 
    4// JJJJ
                        
    $temp $varValue;
                        break;
                    case 
    1// Ziffer 0?
                        
    $temp '';
                        break;
                    default: 
    // anderer Wert
                        
    $temp $varValue;
                }
            }
            else
            {
                return 
    $varValue;
            }

            return 
    $temp;
        }

    }
    ?>
    Viele Grüße
    Frank

    Seit Mai 2013 Fan von Contao
    Webmaster vom Deutschen Schachbund und Berliner Schachverband
    Mein Blog: Schachbulle
    Meine Erweiterungen bei GitHub
    Meine Videos auf YouTube: Playlist zur Contao-Programmierung/Einrichtung

  5. #5
    Contao-Nutzer
    Registriert seit
    11.03.2015.
    Beiträge
    116

    Standard XML-Export mit DOMDocument

    Hallo Frank!

    Vielen Dank für deine Hilfe.

    Ich möchte das erstmal testen, dazu habe ich mit deiner Videoanleitung das Modul mit der Adressen-Datenbank installiert.

    Der Button für den Export funktioniert auch, ebenso der Aufruf der Klasse welche den Export realisieren soll.

    Nun möchte ich zum Export die PHP-Klasse DOMDocument verwenden.

    Wenn ich zum Test auf dem Server eine PHP-Datei mit einem DOMDocument-Textscript aufrufe funktioniert der Export einwandfrei.

    Wenn ich nun das gleiche Testscript in die Adressen-Klasse einfüge wird zwar eine Datei zum Download angeboten, diese enthält allerdings den gesamten Quelltext des Contao-Backends inklusive des XML-Exports.

    Woran kann das liegen?


    Ich verwende in Testscript:

    Code:
    $name = strftime('backup_%m_%d_%Y.xml');
    header('Content-Disposition: attachment;filename=' . $name);
    header('Content-Type: text/xml');
    Der Export-Aufruf:
    Code:
    print $xml->saveXML();
    Vielen Dank!

  6. #6
    Contao-Urgestein Avatar von Samson1964
    Registriert seit
    05.11.2012.
    Ort
    Berlin
    Beiträge
    2.794

    Standard

    Ich kenne die PHP-Klasse nicht. Persönlich würde ich das XML sowieso selbst schreiben. Das ist ja deutlich einfacher als das Einlesen einer XML-Datei.
    Wenn Du statt
    PHP-Code:
    print $xml->saveXML(); 
    mal irgendwas anderes abschickst und es kommt auch nur das an, scheint es ja an der saveXML-Funktion zu liegen. Falls da auch das ganze Backend mitkommt, liegts wohl an den header-Aufrufen. Da bin ich kein Experte.
    Viele Grüße
    Frank

    Seit Mai 2013 Fan von Contao
    Webmaster vom Deutschen Schachbund und Berliner Schachverband
    Mein Blog: Schachbulle
    Meine Erweiterungen bei GitHub
    Meine Videos auf YouTube: Playlist zur Contao-Programmierung/Einrichtung

  7. #7
    Contao-Nutzer
    Registriert seit
    11.03.2015.
    Beiträge
    116

    Standard Export funktioniert jetzt

    Hallo Frank!

    Danke für deine Antwort, ich habe das inzwischen hinbekommen.

    Ich habe als Grundlage den Export eines Stylesheets genommen und angepasst.

    PHP-Code:

            $objFile 
    = new \File('system/tmp/' md5(uniqid(mt_rand(), true)), true);
            
    $objFile->write('');
            
    $objFile->append($export);
        
            
    $objFile->close();
            
    $objFile->sendToBrowser('export.xml');
            
    $objFile->delete(); 
    Es wird alles in eine temporäre Datei geschrieben und dann an den Browser gesendet.

    Jetzt muss ich "nur" noch die Daten der Bestellungen auslesen und in die XML-Datei integrieren.

    Ein andere Frage noch:

    In der Original-Export-Funktion steht:

    PHP-Code:

        
    /**
         * Export a style sheet
         *
         * @param \DataContainer $dc
         *
         * @throws \Exception
         */
        
    public function exportStyleSheet(\DataContainer $dc)
        { 
    Was bedeutet der Parameter \DataContainer $dc ?

    Leider konnte ich dazu nirgendwo etwas finden.

    Vielen Dank!

    Rüdiger

  8. #8
    Contao-Urgestein Avatar von Samson1964
    Registriert seit
    05.11.2012.
    Ort
    Berlin
    Beiträge
    2.794

    Standard

    Zitat Zitat von kissinger Beitrag anzeigen
    Was bedeutet der Parameter \DataContainer $dc ?
    Ich hatte gehofft, hier würde ein Profi antworten. Ich habe mich noch nie damit beschäftigt warum da zwei Parameter stehen, was eigentlich nur ein Parameter ist (dc). So firm bin ich in PHP nicht.

    Mit print_r oder var_dump kannst Du Dir $dc ja mal ausgeben lassen. Ein Riesenobjekt das Teil, u.a. mit dem aktiven Datensatz $dc->activeRecord (... ->Spaltenname).
    Viele Grüße
    Frank

    Seit Mai 2013 Fan von Contao
    Webmaster vom Deutschen Schachbund und Berliner Schachverband
    Mein Blog: Schachbulle
    Meine Erweiterungen bei GitHub
    Meine Videos auf YouTube: Playlist zur Contao-Programmierung/Einrichtung

  9. #9
    Wandelndes Contao-Lexikon Avatar von BugBuster
    Registriert seit
    15.06.2009.
    Ort
    Berlin
    Beiträge
    10.513
    User beschenken
    Wunschliste

    Standard

    Was bedeutet der Parameter \DataContainer $dc ?
    Das bedeutet, dass der eine! Parameter der übergeben wird und in $dc übergeben wird, vom Typ "\DataContainer" (ein Objekt von Contao) sein muss. Würde man hier was anderes als Parameter übergeben, kommt es zu einer Fehlermeldung.
    Grüße, BugBuster
    "view source" is your guide.
    Danke an alle Amazon Wunschlisten Erfüller

  10. #10
    Wandelndes Contao-Lexikon Avatar von BugBuster
    Registriert seit
    15.06.2009.
    Ort
    Berlin
    Beiträge
    10.513
    User beschenken
    Wunschliste

    Standard

    Nennt sich "Type Hinting".

    Das kann man auch so umschreiben bzw. bevor es Type Hinting gab ging es nur so:
    PHP-Code:
    public function exportStyleSheet($dc)
    {
        
        if (!(
    $dc instanceof \DataContainer)) 
        {
            die(
    "Parameter muss vom Typ \DataContainer sein!");
        }


    Geändert von BugBuster (01.04.2016 um 16:34 Uhr)
    Grüße, BugBuster
    "view source" is your guide.
    Danke an alle Amazon Wunschlisten Erfüller

  11. #11
    Contao-Nutzer
    Registriert seit
    13.05.2016.
    Beiträge
    52

    Standard

    Woher wisst ihr, dass \DataContainer $dc als Parameter ubergeben wird?

  12. #12
    Wandelndes Contao-Lexikon Avatar von BugBuster
    Registriert seit
    15.06.2009.
    Ort
    Berlin
    Beiträge
    10.513
    User beschenken
    Wunschliste

    Standard

    Weil es in der originalen Export Funktion so steht? Damit wird es ja erzwungen, ist ja Sinn vom Type Hinting.
    Contao arbeiten im Backend intern oft mit dem Datencontainer und überlicherweise wird der mit der Variable $dc verwendet.


    Oder anders gesagt, wie auch in meinen Footer steht: "view source" is your guide.
    Grüße, BugBuster
    "view source" is your guide.
    Danke an alle Amazon Wunschlisten Erfüller

  13. #13
    Contao-Nutzer
    Registriert seit
    13.05.2016.
    Beiträge
    52

    Standard

    Aber exportStylesheet ist doch eine globale Operation wie hier definierrt https://github.com/contao/core/blob/...config.php#L41 In der Konfiguration wird nur die Klasse angegeben und welche Methode aber kein Parameter mitgegeben. Woher kommt der dann her? Woher soll man bitte daraus schmecken, dass da ein Parameter mitgegeben wird?

    Ich habe eine eigene globale Operation erstellt und da wird nichts mitgegeben.
    Geändert von choki (22.07.2016 um 14:38 Uhr)

  14. #14
    Wandelndes Contao-Lexikon Avatar von BugBuster
    Registriert seit
    15.06.2009.
    Ort
    Berlin
    Beiträge
    10.513
    User beschenken
    Wunschliste

    Standard

    Wenn du der nichts übergeben würdest, woher sollte der Export wissen was er zu exportieren hat?
    In der Definition sind die Parameter eben nicht aufgeführt. Das ist so in den config Definitionen. Steht so bestimmt auch in der Entwicklerdoku.
    Grüße, BugBuster
    "view source" is your guide.
    Danke an alle Amazon Wunschlisten Erfüller

  15. #15
    Contao-Nutzer
    Registriert seit
    13.05.2016.
    Beiträge
    52

    Standard

    Der Export weiss das anhand der URL-Parameter und nicht anhand der Parameter der Methode. In der Entwicklerdoku steht dazu nichts, die ist bestenfalls rudimentär und für ein "How to get started" geeignet. Was verstehst Du unter "in der Definition"? Wenn man sich die importStylesheet Methode ansieht, dann erkennt man, dass die keine Methoden-Parameter entgegen nimmt. Verstehe nicht wie sowas funktionieren kann. Dann soll man jedes mal Rätsel raten und in die Luft schauen damit einem einfällt welche Signatur nun Verwendung findet. Wenn es diesen Thread hier nicht gäbe, hätte ich nie erfahren, dass überhaupt ein DataContainer übergeben wird - von wo aus auch immer.

  16. #16
    Wandelndes Contao-Lexikon Avatar von BugBuster
    Registriert seit
    15.06.2009.
    Ort
    Berlin
    Beiträge
    10.513
    User beschenken
    Wunschliste

    Standard

    Zitat Zitat von choki Beitrag anzeigen
    Der Export weiss das anhand der URL-Parameter und nicht anhand der Parameter der Methode.
    Sicherlich gibst du GET Parameter an den BackendController, aber der gibt eben nur den erzeugten Daten Container (PHP Objekt) weiter.
    Der wird auch sofort verwendet:
    https://github.com/contao/core/blob/...eets.php#L1374

    Zitat Zitat von choki Beitrag anzeigen
    Wenn man sich die importStylesheet Methode ansieht, dann erkennt man, dass die keine Methoden-Parameter entgegen nimmt.
    So, jetzt wechselst du aber von der Export Methode zur Import Methode. Das ist ja ganz was anderes.
    Grüße, BugBuster
    "view source" is your guide.
    Danke an alle Amazon Wunschlisten Erfüller

  17. #17
    Contao-Nutzer
    Registriert seit
    13.05.2016.
    Beiträge
    52

    Standard

    Kannst Du mir die Zeile zeigen, in der Contao die registrierte globale Operation mit der Klasse instanziert und samt Methode und $dc aufruft? Es geht hier doch um die global_operations und importStylesheet ist nunmal auch so eine. Irgendwo mus sContao doch durch den $GLOBALS['BE_MOD']['design']['page']['key'] aufrufen!
    Geändert von choki (22.07.2016 um 18:37 Uhr)

  18. #18
    Wandelndes Contao-Lexikon Avatar von BugBuster
    Registriert seit
    15.06.2009.
    Ort
    Berlin
    Beiträge
    10.513
    User beschenken
    Wunschliste

    Standard

    Nein, werde ich nicht tun, da es nicht eine Zeile sondern dutzende sein werden die daran beteiligt sind (config,dca,be-modul, callback Klassen, ...).
    Warum das Contao Framework so tut ist mir egal, ich weiß durch das Original das es so läuft und gut ist.
    Wer mehr wissen will muss halt debuggen, den weg des Parameters verfolgen.

    Der Unterschied zwischen importStyleSheet und exportStyleSheet ist, eines ist eine Global Operation, das andere eine (Modul-) Operation.

    Eine Global Operation muss mit dem angezeigtem Modul bzw. dessen Klasse/DCA nichts zu tun haben (auch wenn es meist der Fall ist), die Operation aber schon, dadurch existiert dann auch der Datencontainer.

    Diese beiden config zeilen beschreiben ja nur, was contao tun soll wenn innerhalb des Themes ein Aufruf mit dem key "import" oder "export" kommt.
    In dem Fall soll das Framework die Klasse mit der definierten Methode aufrufen. Ob und welche Parameter übergeben werden müssen, entscheiden der Backend Controller selber, vermutlich an der Art der Operation (Global oder nicht Global)
    Geändert von BugBuster (22.07.2016 um 20:09 Uhr)
    Grüße, BugBuster
    "view source" is your guide.
    Danke an alle Amazon Wunschlisten Erfüller

  19. #19
    Contao-Fan Avatar von stefan.sl
    Registriert seit
    19.06.2009.
    Ort
    Iserlohn
    Beiträge
    352
    Partner-ID
    1371

    Standard

    Ich habe heute auch nach einer Möglichkeit gesucht, die gefilterten Ergebnisse an meinen XLS-Export zu übergeben.
    Allerdings in der Model-Variante:

    Falls es jemand gebrauchen kann
    PHP-Code:
        /**
         * @param \DataContainer $dc
         *
         * @return \Model\Collection|null|static
         */
        
    public function getRecords(\DataContainer $dc)
        {
            
    $filter $dc->Session->get('filter')[$dc->table];
            
    $search $dc->Session->get('search')[$dc->table];
            
    $sorting $dc->Session->get('sorting')[$dc->table];

            unset(
    $filter['limit']);

            
    $i         0;
            
    $arrFields = array();
            
    $arrOptions =array();

            if (
    is_array($filter)) {
                foreach (
    $filter as $k => $v) {
                    
    $arrFields[0][$i] = $dc->table '.' $k '=?';
                    
    $arrFields[1][$i] = $v;
                    
    $i++;
                }
            }

            if (!empty(
    $search['value'])) {
                
    $arrFields[0][$i] = 'LOWER(CAST(' $dc->table '.' $search['field'] . ' AS CHAR)) REGEXP LOWER(?)';
                
    $arrFields[1][$i] = $search['value'];

                
    // Alternativ: findet auch Umlaute, Suche nach "ba" findet auch "bä"
                //$arrFields[0][$i] = $dc->table . '.' . $search['field'] . ' LIKE ?';
                //$arrFields[1][$i] = '%' . $search['value'] . '%';
            
    }

            
    $arrOptions['order'] = (!empty($sorting)) ?  $sorting 'id';

            if (!empty(
    $arrFields)) {
                
    $objSurvey SurveyappLocationsModel::findBy(array_values($arrFields[0]), array_values($arrFields[1]), $arrOptions);
            } else {
                
    $objSurvey SurveyappLocationsModel::findAll($arrOptions);
            }

            return 
    $objSurvey;
        }


        
    /**
         * @param \DataContainer $dc
         *
         * @return string
         */
        
    public function exportSurveys(\DataContainer $dc)
        {

            if (\
    Input::get('key') != 'exportSurveys') {
                return 
    '';
            }

            
    $objSurvey $this->getRecords($dc);

            
    // Hier geht der Export los
            // ...

    edit: search und order hinzugefügt
    Geändert von stefan.sl (28.09.2016 um 13:10 Uhr) Grund: Code Update

  20. #20
    Contao-Urgestein Avatar von Samson1964
    Registriert seit
    05.11.2012.
    Ort
    Berlin
    Beiträge
    2.794

    Standard

    Mußt Du die Suche nicht auch berücksichtigen? Oder hast Du in Deinem Panel kein search?
    PHP-Code:
    // Suchbegriff in aktueller Ansicht laden
    $search $dc->Session->get('search');
    $search $search[$dc->table]; // Das Array enthält field und value
    //if($search['field']) $sql = " WHERE ".$search['field']." LIKE '%%".$search['value']."%%'"; // findet auch Umlaute, Suche nach "ba" findet auch "bä"
    if($search['field'] && $search['value']) $sql " WHERE LOWER(CAST(".$search['field']." AS CHAR)) REGEXP LOWER('".$search['value']."')"// Contao-Standard, ohne Umlaute, Suche nach "ba" findet nicht "bä"
    else $sql ''
    Viele Grüße
    Frank

    Seit Mai 2013 Fan von Contao
    Webmaster vom Deutschen Schachbund und Berliner Schachverband
    Mein Blog: Schachbulle
    Meine Erweiterungen bei GitHub
    Meine Videos auf YouTube: Playlist zur Contao-Programmierung/Einrichtung

  21. #21
    Contao-Fan Avatar von stefan.sl
    Registriert seit
    19.06.2009.
    Ort
    Iserlohn
    Beiträge
    352
    Partner-ID
    1371

    Standard

    Zitat Zitat von Samson1964 Beitrag anzeigen
    Mußt Du die Suche nicht auch berücksichtigen? Oder hast Du in Deinem Panel kein search?
    Danke für deinen Hinweis!
    War in meinem Fall nicht wichtig, aber dank deines Beispiels konnte ich es schnell umsetzen.
    Da hab ich auch gleich noch ORDER BY hinzugefügt.
    Änderung s. oben in meinem Code

  22. #22
    Contao-Fan Avatar von stefan.sl
    Registriert seit
    19.06.2009.
    Ort
    Iserlohn
    Beiträge
    352
    Partner-ID
    1371

    Standard

    Ich hab mir für's nächste Mal ein Gist erstellt, was etwas besser zur Wiederverwendung geeignet ist:
    https://gist.github.com/stefansl/c09...08eeeebcd95c76

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
  •