Klasse zum leichteren Bearbeiten des Fontend Editing Templates

Einklappen
X
 
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge
  • Blue_Thunder
    Contao-Nutzer
    • 31.08.2010
    • 7

    #16
    Neue Version + Ansatz für das Anzeigen und Löschen von Bildern

    Hallo erneut !

    Bezüglich der alten Threads von @jared und @scribble sowie des Neuen von @niqo:
    Das Extrahieren des Zeileninhalts von Bild und "Löschen-Link" einer Foto-Upload Funktion ist ab Version 2 möglich und mit dieser aktuellen Version sogar in ein paar wenigen Zeilen.

    Beispiel ( aus Doku ):
    Code:
    <?php
    $tag_hiding_obj = [COLOR="blue"]new tag_hiding_class[/COLOR] ();
    $tag_hiding_obj->[COLOR="blue"]hiding_prepare[/COLOR]( $this->field );
    $protect_name = "";
    $field_array = $tag_hiding_obj->[COLOR="blue"]get_param_list[/COLOR]( "_passport_pic_" );
    $protect_name = $field_array[0]; // Sofern es nicht mehrere Treffer zu diesem Ausdruck gibt ...
    [COLOR="blue"]echo[/COLOR]  "<div><span>";
    [COLOR="blue"]echo[/COLOR]  $tag_hiding_obj->[COLOR="blue"]get_param_tags[/COLOR]( "passport_pic" , 0 ); // Feld- / Spaltenbezeichnung
    [COLOR="blue"]echo[/COLOR]  "</span>:<span>";
    [COLOR="blue"]echo[/COLOR]  $tag_hiding_obj->[COLOR="blue"]get_param_tags[/COLOR]( "passport_pic" ); // Eingabefeld
    [COLOR="blue"]echo[/COLOR]  "</span></div>";
    [COLOR="blue"]echo[/COLOR]  $tag_hiding_obj->[COLOR="blue"]get_param_tags[/COLOR]( $protect_name , 0 );  // DIV Element mit Bild und Löschen-Button / Checkbox.
    ?>
    Neu seit Version 2:
    1. Vereinfacht: Ermitteln des Sicherheits-captcha.
    2. Vereinfacht: Suchen von Namen über u.A. relative Ausdrücke.
    3. Neu: Das Ersetzen von Tabellenfeldern durch Text oder neuen Quellcode.
    4. Neu: Die Eingabe eines Tabllenfeldes in reinen Text umwandeln; ändern verhindern.

    Generelle Fähigkeiten ( da scheint es ja noch Fragen zu geben ):
    5. Ausblenden einzelner Zeilen einer Tabelle.
    6. Ermitteln des angezeigten Wertes einer Eingabe für z.B. eine Abfrage.
    7. Das Ändern / Setzen von Eigenschaften eines Eingabefeldes für z.B. onclick.
    8. Extrahieren des Quellcodes einzelner Felder spezifischer Tabellenzeilen.
    9. Das Umwandeln einer Tabelle in z.B. Div-Blöcke.

    Fröhliches Austoben ! ;-)
    Angehängte Dateien
    Zuletzt geändert von Blue_Thunder; 07.12.2010, 13:07.

    Kommentar

    • niqo
      Contao-Nutzer
      • 29.10.2010
      • 17

      #17
      Super. Vielen Dank für die Mühe.

      Das hat soweit alles geklappt. Gibt es auch eine Möglichkeit ein "Galerie"-Feld mit mehreren Bildern anzuzeigen bzw. wieder zu löschen.

      Viele Grüße
      Niqo

      UPDATE: hat sich erledigt. Hatte nen "kleinen" Denkfehler. Funktioniert ohne Probleme. Nochmals: MERCI
      Zuletzt geändert von niqo; 06.12.2010, 12:43.

      Kommentar

      • niqo
        Contao-Nutzer
        • 29.10.2010
        • 17

        #18
        Mir ist gerade aufgefallen, dass das Datum nicht gespeichert wird.
        Bzw. es wird immer das heutige Datum gespeichert aber keine Änderungen.

        Mit was könnte das zusammenhängen?

        Kommentar

        • Blue_Thunder
          Contao-Nutzer
          • 31.08.2010
          • 7

          #19
          @niqo
          Leider kann ich Dir mit so wenig Info kaum weiterhelfen.

          Nach meinem Verständnis können zwei Dinge gemeint / passiert sein:
          1. Einzelne Felder, die Du mit der Methode set_param_tag() verändert hast, könnten durch ein fälschlicher weise plaziertes <input type="hidden" /> überschrieben worden sein. Dieser Bug der 4-1 wurde in der 4-2 behoben; die Datei 2 Threads zuvor wurde bereits durch die korrigierte Version ersetzt.
          2. Das Datumsfeld des "Catalog"-Modules setzt bei Neuerstellung UND Bearbeitung das jeweils aktuelle Datum ein - wird also ein Eintrag mit Datumfeld bearbeitet wird das Datum entsprechend auf "heute" gesetzt / aktualisiert.
          Um dieses Problem für meinen Fall zu umgehen habe ich folgendes gemacht:
          PHP-Code:
          // ... Instanz erstellen, HTML-Füttern, ...
          
          // Ist der Eintrag neu oder wird er bearbeitet ? Möglicher Ansatz:
          $new_entry = true;
          if( strlen( $tag_hiding_obj->get_param_raw( "entry_date" ) ) ) $new_entry = false;
          
          // Wird der Eintrag bearbeitet soll das Datum nicht mehr bearbeitet werden können.
          // Also: Datum in Text verwandeln und Ausprägung in <input type="hidden" /> packen.
          if( !$new_entry ) $tag_hiding_obj->convert_param2string( "entry_date" ); 
          
          Ich hoffe ich konnte helfen und viel Erfolg !

          Kommentar

          • WebCMS
            Contao-Nutzer
            • 13.08.2009
            • 79

            #20
            Evtl. für Splittung eines Katalog-FE-Formular zu gebrauchen?

            Hallo Blue Thunder,
            kann ich das ebenfalls für die Splittung eines Katalog FE-Formulars gebrauchen, oder habe ich da etwas falsch verstanden? Und wenn ja, wohin lade ich dann "tpl_lib_mix.php und die anderen *.php"

            Ich habe nämlich folgendes Problem:
            Katalog FE-Formular stückeln und das soll dem vorhandenen Eintrag des Mitgliedes zugefügt werden.

            Damit das FrontEnd-Formular vom Katalog nicht unendlich lang wird, möchte ich es stückeln. (da so viele Abfragen ausgefüllt werden müssen).
            Mein Gedanke: Links kommen dann Buttons hin, die jedes gestückelte Formular aufrufen sollen. (mehrere Frontend-Formulare als Modul erstellt - Felder darin ausgewählt)

            Aufgrund des Benutzer ID Feldes werden nach jedem speichern die Einträge dem Mitglied zugeschrieben - soweit ok - nun wird jedoch immer ein neuer Eintrag angelegt, sie gehören nicht mehr zusammen. Wie kann man das FE-Formular trennen/stückeln und doch alle Einträge der einzelnen Stücke zusammenfassen?

            Beispiel: Ein Mitglied erstellt im Formular1 "Name des Shops1, dazu Adresse, Tel etc." - im Formular2 "im Shop vertretene Labels, Öffnungszeiten etc." -> diese Angaben im Formular2 werden nun jedoch nicht mehr dem Formular1 zugeschrieben (dem Shop1), wie bekommt man den 2.Formulareintrag dem 1. zugeordnet. Das ist wichtig, da das Mitglied auch einen 2. Shop und mehr anlegen soll.

            Gibt es eine Möglichkeit mit tpl_lib_mix?
            Gruß, WebCMS

            Kommentar

            • Blue_Thunder
              Contao-Nutzer
              • 31.08.2010
              • 7

              #21
              Antwort: Splitting eines Catalog-FE-Formulars

              @WebCMS

              Ich werde versuchen Deine Frage in seine einzelne Bestandteile zu zerlegen, denn wenn ich Dich richtig verstanden habe, sollte die Klasse Dir tatsächlich helfen können.

              1. Welchem Zweck dient die Klasse ?
              Dem Zugriff auf und der Manipulations von Felderern und Eingabe-Element-Werten ausgabefertiger Tabellenstrukturen, die Contao geparst / erstellt hat und deren Datenbasis in einem Template nicht direkt erreichbar ist.

              2. Welcher Art mmüssen diese Tabellenstrukturen sein ?
              "<tr><td>[Labels, Input-Element,...]</td>[beliebig viele weitere Felder/Spalten]</tr>" ohne Tabellen-Rumpf ( <table /> ). In jeder Zeile, in der ein Feld oder die Zeile selbst angesprochen können werden soll, muss sich ein Eingabe-Element mit eindeutigem Namen befinden - es darf nicht fehlen, aber auch keine 2 unterschiedlichen Namen / Eingabefelder aufweisen.
              Gültige Eingabe-Elemente sind <input type="radio/checkbox/text/password" />, <select /> und <textarea />.

              3. Welche 2 grundsätzlichen Möglichkeiten ergeben sich ?
              A. Attribute für Eingabe-Elemente Ergänzen, Zeilen Ausblenden, den Quellcode eines Feldes austauschen oder die gesamte Struktur in z.B. verschachtelte <div />-Blöcke umwandeln um das Ergebnis schließlich mit der Methode hide_tags(...); auszugeben.
              B. Einzelne Felder der Tabelle wie ein Huhn das Korn aus der Tabelle zu picken um diese auf / in einer gänzlich anders strukturierten Seite portionsweise auszugeben / platzieren ( Siehe Ausgangs-Thread ).

              4. Wohin gehören die Dateien und wie werden diese eingebunden ?
              Die benötigten Dateien sind: "string_class.php" (Parsen von Text) , "tag_class.php" (Zerlegen einer HTML/XML strukturierten Datein in ein Daten-Array) und "tpl_lib_mix.php" (Daten-Arrays für Methoden nutzen). Die Datei "beispiel.php" zeigt nur ein paar Verwendungsmöglichkeiten.
              Diese drei ersten Dateien sollten am besten im Ordner "[root/]templates/" abgelegt werden.
              Zur Einbindung genügt ein "include_once", oder besser "require_once", für das/ein Template.

              5. Zerteilen einer Katalog-Seite in mehrere Einzelseiten.
              Entsprecheng Punkt "3" (siehe oben) gibt es hier 2 verschiedene Ansätze, die Dir möglich sind.
              A. Du blendest jeweils die Zeilen der Tabelle aus, die Du für die gegenwärtige Ansicht nicht wünschst / benötigt. Dazu wird eine Liste der Namen der Eingabe-Elemente benötigt, die nicht dargestellt werden sollen. Diese wird als Array der Methode "hide_tags([Namen Array]);" als erster Parameter übergeben. Alle ausgeblendeten Zeilen erscheinen als <input type="hidden" /> in der Ausgabe und tragen entweder ihre definierte Ausprägung, oder fehlt diese, als Standard den Wert "0".
              Mit jedem Speichern oder Blättern ( erkennbar über z.B. einen zusätzlichen Übergabeparameter in der URL / der Form ) müssen dann schlicht lediglich andere Zeilen versteckt werden - fertig !
              B. Du löst die Tabellenstruktur auf indem Du für jede Teildarstellung eine eigene Ausgabe / Darstellung festlegst in die Du mittels der Methode get_param_tags([Name des gesuchten Eingabe-Elements der Zeile], [TR-Index] ); Eingabe-Element und evt. auch Titel als Feld extrahierst und hier platzierst.
              Blättern kannst Du wie bei Ansatz "A", aber es gibt ein Problem mit definierten Pflichtfeldern, die auf dieser virtuellen Seite nicht dargestellt werden: Während Ansatz "A" sie über <input type="hidden" value="[0/Wert]" ... /> zum schweigen bringt, muss dies für diesen Ansatz händisch über die Methode get_param_value([Feldname]); für jede Darstellung getrennt gelöst werden - machbar, mehr Möglichkeiten der Darstellung, aber mühselig.

              WICHTIG: Bitte mit min. der Version 4-2 arbeiten ( siehe ein wenig höher ).
              Ebenso wichtig: Mit jedem Seitenwechsel muss entweder die Seite auch gespeichert oder aber die übergebenen Parameter müssen gerettet werden - zweiteres ist absolut nicht zu empfehlen da mit dem Catalog schwierig. Gleichzeitig ist dies aber mit Pflichtfeldern ziemlich schwierig umzusetzen, weil bei Fehlschlag der Prüfung kein Speichern erfolgt. Daher empfehle ich eine händische Prüfung; das Abfragen der gegenwärtigen Werte mittels der Methode get_param_raw( [Feldname] ); um eine Fehlermeldung auszugeben oder evt. den Seitenwechsel zu unterbinden, oder / und mittels der Methode set_patam_attributes(...); vielleicht eine Echtzeitprüfung mittels Java-Script ( onchange / onclick ) zu programmieren damit die Seite z.B. erst garnicht abgeschickt werden kann wenn etwas nicht okay ist.

              Beispiel für 5A:
              PHP-Code:
              <?php
              $tag_hiding_obj = new tag_hiding_class();
              $tag_hiding_obj->hiding_prepare( $this->field );
              
              $hide_array = array();
              switch( $_GET["selectedPage"] )
              {
              case "main":
              $hide_array[] = "email";
              $hide_array[] = "company";
              $hide_array[] = "website";
              break;
              case "form2":
              $hide_array[] = "gender";
              $hide_array[] = "firstname";
              $hide_array[] = "lastname";
              $hide_array[] = "company";
              $hide_array[] = "website";
              break;
              case "form3":
              $hide_array[] = "gender";
              $hide_array[] = "firstname";
              $hide_array[] = "lastname";
              break;
              };
              
              echo $tag_hiding_obj->hide_tags( $hide_array );
              ?>
              Beispiel für 5B ( gleiche Felder je Seite wie 5A ):
              PHP-Code:
              <?php
              $tag_hiding_obj = new tag_hiding_class();
              $tag_hiding_obj->hiding_prepare( $this->field );
              
              if( $_GET["selectedPage"]=="main" ): ?>
              <tr>
                <td><?php echo $tag_hiding_obj->get_param_tags( "gender" ); ?></td>
                <td><?php echo $tag_hiding_obj->get_param_tags( "firstname" ); ?></td>
                <td><?php echo $tag_hiding_obj->get_param_tags( "lastname" ); ?></td>
              </tr>
              <input type="hidden" name="email" value="<?php echo $tag_hiding_obj->get_param_value( "email" ); ?>" />
              <input type="hidden" name="company" value="<?php echo $tag_hiding_obj->get_param_value( "company" ); ?>" />
              <input type="hidden" name="website" value="<?php echo $tag_hiding_obj->get_param_value( "website" ); ?>" />
              <?php elseif ( $_GET["selectedPage"]=="form2" ): ?>
              <tr>
                <td><?php echo $tag_hiding_obj->get_param_tags( "email" , 0 ); ?></td>
                <td><?php echo $tag_hiding_obj->get_param_tags( "email" ); ?></td>
              </tr>
              <input type="hidden" name="gender" value="<?php echo $tag_hiding_obj->get_param_value( "gender" ); ?>" />
              <input type="hidden" name="firstname" value="<?php echo $tag_hiding_obj->get_param_value( "firstname" ); ?>" />
              <input type="hidden" name="lastname" value="<?php echo $tag_hiding_obj->get_param_value( "lastname" ); ?>" />
              <input type="hidden" name="company" value="<?php echo $tag_hiding_obj->get_param_value( "company" ); ?>" />
              <input type="hidden" name="website" value="<?php echo $tag_hiding_obj->get_param_value( "website" ); ?>" />
              <?php else: // $_GET["selectedPage"]=="form3" ?>
              <tr>
                <td>Mail: <?php echo $tag_hiding_obj->get_param_tags( "email" ); ?>, </td>
                <td>Firma: <?php echo $tag_hiding_obj->get_param_tags( "company" ); ?></td>
              </tr>
              <tr>
                <td colspan="2"><?php echo $tag_hiding_obj->get_param_tags( "website" ); ?></td>
              </tr>
              <input type="hidden" name="gender" value="<?php echo $tag_hiding_obj->get_param_value( "gender" ); ?>" />
              <input type="hidden" name="firstname" value="<?php echo $tag_hiding_obj->get_param_value( "firstname" ); ?>" />
              <input type="hidden" name="lastname" value="<?php echo $tag_hiding_obj->get_param_value( "lastname" ); ?>" />
              <?php endif; ?>
              Ich hoffe, ich konnte helfen !
              Zuletzt geändert von Blue_Thunder; 09.12.2010, 16:31.

              Kommentar

              • niqo
                Contao-Nutzer
                • 29.10.2010
                • 17

                #22
                Das Datumsfeld des "Catalog"-Modules setzt bei Neuerstellung UND Bearbeitung das jeweils aktuelle Datum ein - wird also ein Eintrag mit Datumfeld bearbeitet wird das Datum entsprechend auf "heute" gesetzt / aktualisiert.
                Dieses Problem versuche ich mit deinem beschriebenen Ansatz zu lösen.

                Code:
                // ... Instanz erstellen, HTML-Füttern, ...
                
                // Ist der Eintrag neu oder wird er bearbeitet ? Möglicher Ansatz:
                $new_entry = true;
                if( strlen( $tag_hiding_obj->get_param_raw( "entry_date" ) ) ) $new_entry = false;
                
                // Wird der Eintrag bearbeitet soll das Datum nicht mehr bearbeitet werden können.
                // Also: Datum in Text verwandeln und Ausprägung in <input type="hidden" /> packen.
                if( !$new_entry ) $tag_hiding_obj->convert_param2string( "entry_date" );
                Danke für die Hilfestellung. Ich habe das versucht, leider bisher mit keiner Lösung. Hast du zwei Templates für "Eintrag_NEU" und "Eintrag_BEARBEITEN"? Ich glaube nicht, sonst würde dein Code (glaube) keinen Sinn machen.
                Ich bin mir nicht sicher wie die Ausprägung in <input type="hidden" /> verpackt werden kann.

                PHP-Code:
                <?php
                //true-Zuweisung, dass es ein neuer Eintrag ist
                $new_entry = true;
                //Überprüfung ob bereits Datum hinterlegt, wenn ja, dann false-Zuweisung, das kein neuer Eintrag 
                    if(strlen( $tag_hiding_obj->get_param_raw( 'entry_date' ) ) ) $new_entry = false;
                //Wenn Eintrag schon bearbeitet, dann Umwanndlung in String
                    if( !$new_entry ) $tag_hiding_obj->convert_param2string( 'entry_date' );?>
                //Ausprägung in input type="hidden" verpacken?
                    <input type="hidden" value="<?php echo $tag_hiding_obj->get_param_value( 'entry_date' ); ?>" /> 
                <div class="formfield">
                <div class="formlabel"><?php echo $tag_hiding_obj->get_param_tags( 'entry_date', 0 ); ?> </div><div class="formvalue"><?php echo $tag_hiding_obj->get_param_tags( 'entry_date' ); ?></div>
                    </div>
                Any ideas? Ich steh ein wenig auf der Leitung 8-)
                Zuletzt geändert von niqo; 09.12.2010, 23:19.

                Kommentar

                • Blue_Thunder
                  Contao-Nutzer
                  • 31.08.2010
                  • 7

                  #23
                  @niqo

                  Mein Beispiel war nicht vollständig bzw. nur ein Auszug; es fehlt die Instanzierung der Klasse sowie die eigentliche Ausgabe und auch das Feld "entry_date" muss noch auf das von Dir verwendete angepasst werden ( Spaltenname in Datenbank ).
                  Auch musst Du Dich entscheiden, welche von den Varianten der Ausgabe / Verwendung Du eigentlich einsetzen willst ( zuvoriger Thread, Punkt "3", A oder B ).

                  Ich habe versucht dies ein wenig zu verdeutliche indem ich Dir ein Beispiel für "3A" erstellt habe:

                  PHP-Code:
                  <?php
                  $tag_hiding_obj = new tag_hiding_class();
                  // $this->field = enthält für üblich die Tabellenstruktur des Catalog bei List & Edit
                  $tag_hiding_obj->hiding_prepare( $this->field );
                  
                  // Initialisiert für den Fall dass es später Verwendung dafür geben sollte.
                  $hide_array = array();
                  // Feldname der HTML-Ausgabe bzw. zugleich = Feldname der Tabellenspalte der Datenbank; bitte anpassen.
                  $databaseFieldName = 'entry_date';
                  
                  //true-Zuweisung, dass es neuer Eintrag ist
                  $new_entry = true;
                  //Überprüfung ob bereits Datum hinterlegt, wenn ja, dann false-Zuweisung, das kein neuer Eintrag 
                  if( strlen( $tag_hiding_obj->get_param_raw( $databaseFieldName ) ) ) $new_entry = false;
                  
                  //Wenn Eintrag schon bearbeitet, dann Umwanndlung in String
                  if( !$new_entry ) $tag_hiding_obj->convert_param2string( $databaseFieldName );
                  
                  // Ausgabe der Tabelle von "$this->field" nach/mit potentieller Veränderung durch Methoden der Klasse "tag_hiding_class()"
                  echo $tag_hiding_obj->hide_tags( $hide_array );
                  ?>
                  Das Prinzip ist dass hier, wenn das Eingabe-Element mit dem Namen "entry_date" irgendeine Art von Zeichenkette enthält, davon ausgegangen wird, bereits ein Eintrag in der Datenbank existiert und er deshalb nicht (mehr) "neu" ist.
                  Ist er nicht mehr neu so wird der HTML-Quellcode für das Eingabe-Element des Datums herausgeschmissen und schlicht durch den Wert des Eingabe-Elements ersetzt; aus <input type="text" name="entry_date" value="01.01.1970" /> würde schlicht "01.01.1970".

                  Für die Variante "3B" wäre dieser Ansatz denkbar (Kurzversion):
                  PHP-Code:
                  ...
                  ?>
                  <div class="formfield">
                    <div class="formlabel">
                      <?php echo $tag_hiding_obj->get_param_tags( 'entry_date', 0 ); ?>
                    </div>
                    <div class="formvalue">
                      <?php
                        if( strlen( $tag_hiding_obj->get_param_raw( 'entry_date' ) ) )
                        {
                          echo $tag_hiding_obj->get_param_value( 'entry_date' );
                          echo '<input type="hidden" name="entry_date" value="' . $tag_hiding_obj->get_param_value( 'entry_date' ) . '" />';
                        } else echo $tag_hiding_obj->get_param_tags( 'entry_date' );
                      ?>
                    </div>
                  </div>
                  <?php
                  ...

                  Ansonsten ... frohes Schaffen !

                  Kommentar

                  • niqo
                    Contao-Nutzer
                    • 29.10.2010
                    • 17

                    #24
                    Vielen Dank für deine schnelle und ausführliche Antworten.
                    In meinem Fall kommt sicherlich deine genannte Variante "3B" zur Anwendung.

                    Es ist wie verhext, ich habe deine Lösungsansatz übernommen und auf meine Felder angepasst, jedoch wird weiterhin das heutige Datum, in der Bearbeitung und beim Erstellen eines neuen Eintrags, angezeigt.

                    Code:
                    if( strlen( $tag_hiding_obj->get_param_raw( 'data_entry' ) ) )
                    Die Überprüfung ob bereits ein Datum hinterlegt ist, wirft immer ein "true" und kapselt somit auch immer die Ausgabe in einen String, der nicht bearbeitet werden kann aber auch mit dem heutigen Datum dargestellt wird.

                    Mein konkreter Code:
                    Code:
                    <?php echo $this->rteConfig; ?>
                     
                    <?php 
                    require_once('tpl_lib_mix.php'); 
                     
                    $tag_hiding_obj = new tag_hiding_class(); 
                    $tag_hiding_obj->hiding_prepare( $this->field );
                    
                    ?>
                    <form action="<?php echo $this->action; ?>" method="post" enctype="<?php echo $this->enctype; ?>">
                    <div class="formbody">
                    <input type="hidden" name="FORM_SUBMIT" value="<?php echo $this->formId; ?>" />
                    
                    
                    <table>
                       <tr>
                        <td width='250'>
                        <fieldset>
                         <legend>Angaben zur Route</legend>
                        <div class="formrow">
                        <div class="formfield">
                        <div class="formlabel"><?php echo $tag_hiding_obj->get_param_tags( 'bericht_titel', 0 ); ?> </div><div class="formvalue"><?php echo $tag_hiding_obj->get_param_tags( 'bericht_titel' ); ?></div>
                        </div>     
                        
                        <div class="formfield">
                        <div class="formlabel">
                        <?php echo $tag_hiding_obj->get_param_tags( 'bericht_startdatum', 0 ); ?>
                        </div>
                        <div class="formvalue">
                        <?php
                          if( strlen( $tag_hiding_obj->get_param_raw( 'bericht_startdatum' ) ) ) 
                          {
                            echo $tag_hiding_obj->get_param_value( 'bericht_startdatum' );
                            echo '<input type="hidden" name="bericht_startdatum" value="' . $tag_hiding_obj->get_param_value( 'bericht_startdatum' ) . '" />';
                          } else echo $tag_hiding_obj->get_param_tags( 'bericht_startdatum' );
                        ?>
                        </div>
                        </div>
                        </fieldset>
                        </td>
                        </table>
                    <div class="submit_container">
                    <input type="submit" name="save" id="save" class="tl_submit" accesskey="s" value="<?php echo specialchars($GLOBALS['TL_LANG']['MSC']['save']); ?>" />
                    <input type="submit" name="saveNclose" id="saveNclose" class="tl_submit" accesskey="c" value="<?php echo specialchars($GLOBALS['TL_LANG']['MSC']['saveNclose']); ?>" />
                    <input type="submit" name="saveNcreate" id="saveNcreate" class="tl_submit" accesskey="n" value="<?php echo specialchars($GLOBALS['TL_LANG']['MSC']['saveNcreate']); ?>" />
                          </div>
                        </td>
                      </tr>
                    </table>
                    </div>
                    </form>
                    Evtl. siehst du hier den Fehler. Möchte dich aber auch mit diesem Problem nicht weiterhin stören bzw. aufhalten. Ich versuch weiterhin mal ein paar Alternativen.
                    Grüße
                    Angehängte Dateien
                    Zuletzt geändert von niqo; 10.12.2010, 23:39.

                    Kommentar

                    • Blue_Thunder
                      Contao-Nutzer
                      • 31.08.2010
                      • 7

                      #25
                      @niqo

                      Hoi erneut !

                      An Deinem Quellcode ist nichts falsch - aber der Catalog belegt Datumsfelder modulseitig bereits mit einem Datum auch wenn die Seite neu ist. Du musst also ein Feld nutzen, welches keinen Defaulwert aufweisst, damit die Erkennung funktioniert.

                      In Deinem Fall wäre dies z.B. "'bericht_titel":
                      PHP-Code:
                      if( strlen( $tag_hiding_obj->get_param_raw( 'bericht_titel' ) ) )  {}; 
                      
                      Sorry, dass ich das übersehen hatte !

                      Viel Erfolg beim Routen-Bericht-Zusammenstöpseln ...

                      *EDIT*

                      Es gibt da allerdings noch den Ausnahmefall wenn jemand das Dokument / die Seite ohne ausgefüllten "bericht_titel" abschickt. Wenn Du "bericht_titel" zum Pflichtfeld erklärst, sollte dies eine zuverlässige Lösung sein:
                      PHP-Code:
                      if( strlen( $tag_hiding_obj->get_param_raw( 'bericht_titel' ) ) OR $_POST["FORM_SUBMIT"] ) {}; 
                      
                      Zuletzt geändert von Blue_Thunder; 11.12.2010, 00:21.

                      Kommentar

                      • niqo
                        Contao-Nutzer
                        • 29.10.2010
                        • 17

                        #26
                        Merci. Jetzt funktioniert die Unterscheidung zwischen "neuer Eintrag" und "Eintrag bearbeiten". Die Werte werden auch korrekt gespeichert. Nur die Darstellung in "Eintrag bearbeiten" wenn das Datum schon gespeichert wurde, zeigt weiterhin das heutige Datum.

                        Folgender Teil in meiner if-Bedingung bewirkt auch, dass ich mein Feld nicht mehr bearbeiten kann, allerdings mit dem falschen Datum (=> heutiges Datum)
                        PHP-Code:
                        echo $tag_hiding_obj->get_param_value( 'entry_date' ); 
                                echo '<input type="hidden" name="entry_date" value="' . $tag_hiding_obj->get_param_value( 'entry_date' ) . '" />'; 
                        
                        Ich arbeite daher jetzt vorab mit folgenden User-"unfreundlichen" Lösung:

                        PHP-Code:
                        <div class="formfield"> 
                          <div class="formlabel"> 
                            <?php echo $tag_hiding_obj->get_param_tags( 'entry_date', 0 ); ?> 
                          </div> 
                          <div class="formvalue"> 
                            <?php 
                              if( strlen( $tag_hiding_obj->get_param_raw( 'entry_titel' ) )  OR $_POST["FORM_SUBMIT"] ) ) 
                              { 
                                echo '<html><i>gespeichert*</i></html>';
                              } else echo $tag_hiding_obj->get_param_tags( 'entry_date' ); 
                            <?php echo '<html><br><i>*nicht mehr änderbar!</i></html>';?>
                        
                            ?> 
                          </div> 
                        </div> 
                        <?php
                        Nochmals, vielen Dank für deine Hilfestellung.
                        Viele Grüße

                        Kommentar

                        • Blue_Thunder
                          Contao-Nutzer
                          • 31.08.2010
                          • 7

                          #27
                          @niqo

                          Gern geschehen !

                          Und was Du beschreibst ist eine Eigenschaft des Catalog von der ich bisher auch nicht wusste - a real head-scratcher, I admit !

                          In diesem Fall muss das Datum wohl manuell aus der Datenbank gefischt werden. Meine Vorschläge dazu:

                          PHP-Code:
                          <div class="formfield"> 
                            <div class="formlabel"> 
                              <?php echo $tag_hiding_obj->get_param_tags( 'entry_date', 0 ); ?> 
                            </div> 
                            <div class="formvalue"> 
                              <?php 
                                if( strlen( $tag_hiding_obj->get_param_raw( 'entry_titel' ) ) OR $_POST["FORM_SUBMIT"] ) ) 
                                {
                                  $param_array = get_url_parameter( $this->action ); // alternativ auch nur get_url_parameter(); oder schlicht $param_array = $_GET; wenn bekannt dass nicht $_POST.
                                  if( !is_object( $this->Database ) ) $this->import('Database');
                                  $query_result = $this->Database->prepare( 'SELECT entry_date FROM [TABELLE] WHERE [ALIAS-Feld der Tabelle]=?' )->execute( $param_array["items"] );
                                  $date_string = date( "d.m.Y" , $query_result->entry_date );
                                  echo '<i>'.$date_string.'*</i>';
                                  ?><input type="hidden" name="entry_date" value="<?php echo $date_string;?>" /><?php
                                } else echo $tag_hiding_obj->get_param_tags( 'entry_date' ); 
                              <?php echo '<br><i>*nicht mehr änderbar!</i>';?>
                          
                              ?> 
                            </div>
                          </div>
                          ... oder simpler unter Ausnutzung einer weiteren Catalog-Eigenschaft ...

                          PHP-Code:
                          <div class="formfield"> 
                            <div class="formlabel"> 
                              <?php echo $tag_hiding_obj->get_param_tags( 'entry_date', 0 ); ?> 
                            </div> 
                            <div class="formvalue"> 
                              <?php
                                $param_array = get_url_parameter( $this->action ); // alternativ auch nur get_url_parameter(); oder schlicht $param_array = $_GET; wenn bekannt dass nicht $_POST.
                                if( isset( $param_array["items"] ) )
                                {
                                  if( !is_object( $this->Database ) ) $this->import('Database');
                                  $query_result = $this->Database->prepare( 'SELECT entry_date FROM [TABELLE] WHERE [ALIAS-Feld der Tabelle]=?' )->execute( $param_array["items"] );
                                  $date_string = date( "d.m.Y" , $query_result->entry_date );
                                  echo '<i>'.$date_string.'*</i>';
                                  ?><input type="hidden" name="entry_date" value="<?php echo $date_string;?>" /><?php
                                } else echo $tag_hiding_obj->get_param_tags( 'entry_date' ); 
                              <?php echo '<br><i>*nicht mehr änderbar!</i>';?>
                          
                              ?> 
                            </div>
                          </div>
                          ... oder mit Bearbeitungsmöglichkeit ...

                          PHP-Code:
                          <div class="formfield"> 
                            <div class="formlabel"> 
                              <?php echo $tag_hiding_obj->get_param_tags( 'entry_date', 0 ); ?> 
                            </div> 
                            <div class="formvalue"> 
                              <?php
                                $param_array = get_url_parameter( $this->action ); // alternativ auch nur get_url_parameter(); oder schlicht $param_array = $_GET; wenn bekannt dass nicht $_POST.
                                if( isset( $param_array["items"] ) )
                                {
                                  if( !is_object( $this->Database ) ) $this->import('Database');
                                  $query_result = $this->Database->prepare( 'SELECT entry_date FROM [TABELLE] WHERE [ALIAS-Feld der Tabelle]=?' )->execute( $param_array["items"] );
                                  $date_string = date( "d.m.Y" , $query_result->entry_date );
                                 ?><input type="text" name="entry_date" id="ctrl_entry_date" class="text" value="<?php echo $date_string;?>" /><?php
                                } else echo $tag_hiding_obj->get_param_tags( 'entry_date' ); 
                              ?> 
                            </div>
                          </div>
                          So ... damit müsste es aber nun passen !

                          ... und ich speichere mir mal diesen gesamten Thread - daraus wird sich bestimmt ein gutes Nachschlagewerk machen lassen !

                          Dann hau mal rein !
                          Zuletzt geändert von Blue_Thunder; 11.12.2010, 17:30.

                          Kommentar

                          • Nikolas
                            Contao-Fan
                            • 22.08.2009
                            • 493

                            #28
                            Hallo,

                            würde gerne die Klasse nutzen und bedanke mich auch schon mal recht herzlich dafür

                            Aber bevor ich überall rumprobiere und dann doch nicht weiter weiß möchte ich folgende kurze Frage stellen:

                            Wo muss ich die Klasse ablegen wenn ich Sie für das Catalog Edit nutzen will?

                            Der Aufruf erfolgt ja im Template.

                            Gruß
                            Nikolas

                            Kommentar

                            • niqo
                              Contao-Nutzer
                              • 29.10.2010
                              • 17

                              #29
                              Hallo zusammen,

                              nach einem Live Update von 2.9 auf 2.10.3 funktioniert die Eingabe/Bearbeitung (Fontend Editing) des Feldtypes "date" nicht mehr.
                              Die restlichen Feldtypen (tags, text, select,...) funktionieren einwandfrei. Lediglich die Eingabe des Datums streikt.
                              Wobei ich bemerkt habe, dass bei der Sortierung der "Bearbeitbaren Felder" in der Modulansicht "Katalog Bearbeitung", das Datum an letzter Stelle stehen muss, sonst funktionieren darauf folgende Feldtypen auch nicht mehr.

                              Ich habe bereits das Standardtemplate "catalog_edit.xhtml" getestet, hier werden alle Datumsfelder (3 insgesamt) angezeigt, lediglich der Datepicker funktioniert nicht (bereits mitgeteilt von Andreas: http://www.contao-community.de/showt...datepicker-Bug

                              Ich bin mir nicht sicher ob die Klasse "tpl_lib_mix.php" hierfür angepasst werden muss.

                              Hat dazu jmd. ähnliche Erfahrungen/Lösungsansätze?

                              Viele Grüße

                              Kommentar

                              • MacKP
                                Contao-Yoda
                                • 15.06.2009
                                • 13315

                                #30
                                Hallo niqo,
                                mach doch bitte ein Ticket dazu -> http://www.contao-forge.org/projects...s?per_page=100

                                Viele Grüße
                                Contao Pool | C-C-A | MetaModels | [Internetseite -> Mediendepot Ruhr]
                                [Arbeitet bei -> Paus Design & Medien]
                                "I can EXPLAIN it to you, but I can't UNDERSTAND it for you."

                                Kommentar

                                Lädt...