"Mehrere bearbeiten" in Mode 5

Einklappen
X
 
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge
  • matths
    Gesperrt
    • 02.12.2009
    • 103

    #1

    "Mehrere bearbeiten" in Mode 5

    Liebe Community,

    nach gut einem Jahr und nur "kleineren" und "normalen" Contao-Websites steht wieder ein größeres Contao Projekt in der Tür. Dazu entwickle ich derzeit ein Modul (DCA, Tabelle & Co.) und verwende nach zahlreichen Tests den Listing-Mode 5, weil ich mit ihm einen auf-/zu-klappbaren Baum in der Redaktions-Ansicht erzeugen kann.

    Um mein Problem zu erklären, habe ich es auf ein bildliches Thema adaptiert und zwei Screenshots beigefügt. In der Baumansicht sieht man, dass die Hierarchie 2 Ebenen tief ist. Die obere Ebene stellt die Etagen eines Hauses dar, die Ebene darunter die Räume.

    1.) Jetzt möchte ich je nach Ebene auf den Edit-Button hin eine andere "Palette" der DCA anzeigen. Das kriege ich auch hin über den buttonCallback.

    2.) Beim Verschieben soll man Einträge einer Ebene nur in dieser verschieben können. Also dürfen Räume nur unterhalb von Etagen verschoben werden und Etagen nur innerhalb des Hauses. Das Dachgeschoss kann nicht IM Keller sein. Das kriege ich auch hin über den pasteButtonCallback.

    3.) editAll macht mir aber Probleme. Hier erscheinen hinter allen Einträgen (egal ob Etage oder Raum) eine Checkbox. Ich möchte aber, dass ausschliesslich hinter den Räumen Checkboxen erscheinen. DAS ist mein Problem.

    Wenn ich dieses Problem (3.) nicht löse, werde ich auf eine 2-Tabellen-Lösung umschwenken müssen und eine Tabelle für die Etagen und eine für die Räume bauen müssen. Das würde ich gerne vermeiden, da es dem Redakteur das Editieren erschwert, in dem Beispiel insbesondere das Kopieren von Räumen aus einer Etage in eine andere Etage, also wenn man z.B. das Arbeitszimmer nach dem Renovieren vom Keller ins Dachgeschoss verlegen will.

    Ich hoffe, dass war jetzt nicht zu ausführlich oder zu wenig nachvollziehbar beschrieben.

    Viele Grüße,
    matths
    Angehängte Dateien
  • andreas.schempp
    Contao Core-Team
    Association Vorstand
    • 15.06.2009
    • 5701

    #2
    Das wird wohl nicht ohne Anpassungen möglich sein. Die Checkboxen kannst du nicht ausblenden. Allerdings kannst du die Selektion des Benutzers überschreiben, d.h. wenn er ein 2-Ebene-Datensatz anklickt, kannst du den löschen damit er diesen nicht verschieben kann. Sieh dir an wie das in der tl_page::checkPermission gemacht wird.
    terminal42 gmbh
    Wir sind Contao Premium-Partner! Für Modulwünsche oder Programmierungen kannst du uns gerne kontaktieren.
    Hilfe für Isotope eCommerce kann man auch kaufen: Isotope Circle

    Kommentar

    • matths
      Gesperrt
      • 02.12.2009
      • 103

      #3
      Hallo Andreas,

      ja das verstehe ich. Und ich bin über die tl_page und checkPermissions auch schon gestolpert. Schade, dass das eben keine Auswirkungen auf die Anzeige der Checkboxen hat, sondern erst "danach".
      Die anderen Buttons, wie den Bleistift (edit), den blauen Pfeil (cut) und das grüne plus (copy), etc. können in Abhängigkeit von "checkPermissions" ausgegraut werden - warum geht das denn leider nicht für die Checkboxen von "Mehrere bearbeiten". ?

      PHP-Code:
      'houseModul' => array
      (
          'tables' => array('tl_house'),
          'callback' => 'ModuleHouse'
      ), 
      
      Gibt es vielleicht einen Weg das Modul mit einer Klasse "aufzuladen" und dann in der generate/compile diese Funktion zu simulieren? Diesen Weg mit einer Klasse bin ich noch nicht wirikich gegangen...

      Grüße,
      matths

      Kommentar

      • matths
        Gesperrt
        • 02.12.2009
        • 103

        #4
        Also mit so einem callback in der config.php komme ich nicht weiter. Dadurch "vergisst" Contao anscheinend die normale Ausgabe des Mode 5. Kann das sein?

        Gibt es denn keinen Punkt, wo man ansetzen könnte... vielleicht ein callback, unmittelbar bevor die Bildschirmausgabe (Treeview des Mode 5) gerendert wird?

        Kommentar

        • andreas.schempp
          Contao Core-Team
          Association Vorstand
          • 15.06.2009
          • 5701

          #5
          callback ist nur für eine komplett eigene Ausgabe geeignet (siehe Task-Modul).
          terminal42 gmbh
          Wir sind Contao Premium-Partner! Für Modulwünsche oder Programmierungen kannst du uns gerne kontaktieren.
          Hilfe für Isotope eCommerce kann man auch kaufen: Isotope Circle

          Kommentar

          • matths
            Gesperrt
            • 02.12.2009
            • 103

            #6
            Hi Andreas,

            ich habe das mit dem callback nochmal überprüft. In der Klasse "Backend" findet die Unterscheidung zwischen "callback" und "table" statt.

            PHP-Code:
            // Call module callback [Backend 182]
            // Default action [Backend 196] 
            
            Wenn man jetzt also den Code von der "Default action" in die generate() des callback, also der BE-Modul-Klasse überführt, dann hat man eine Möglichkeit die "default"-Ausgabe zu manipulieren.

            PHP-Code:
            class ModuleHouse extends BackendModule
            {
                public function generate()
                {
                    $strTable = $this->Input->get('table') ? $this->Input->get('table') : $GLOBALS['BE_MOD']['custom']['house']['tables'][0];
                    
                    $dc = $this->objDc;
                    
                    $act = $this->Input->get('act');
                    if (!strlen($act) || $act == 'paste' || $act == 'select')
                    {
                        $act = ($dc instanceof listable) ? 'showAll' : 'edit';
                    }
            
                    switch ($act)
                    {
                        case 'delete':
                        case 'show':
                        case 'showAll':
                        case 'undo':
                            if (!$dc instanceof listable)
                            {
                                $this->log('Data container ' . $strTable . ' is not listable', 'Backend getBackendModule()', TL_ERROR);
                                trigger_error('The current data container is not listable', E_USER_ERROR);
                            }
                            break;
            
                        case 'create':
                        case 'cut':
                        case 'cutAll':
                        case 'copy':
                        case 'copyAll':
                        case 'move':
                        case 'edit':
                            if (!$dc instanceof editable)
                            {
                                $this->log('Data container ' . $strTable . ' is not editable', 'Backend getBackendModule()', TL_ERROR);
                                trigger_error('The current data container is not editable', E_USER_ERROR);
                            }
                            break;
                    }
                    
                    $return = $dc->$act();
                    
                    // HIER kann man jetzt $return manipulieren!!!
                    
                    return $return;
                } 
            
            Das ganze ist sicher nicht update-safe.

            Gruß,
            Matthias

            Kommentar

            Lädt...