Feld im DCA disablen, aber trotzdem Werte übermitteln: Unterschied zwischen den Versionen

Aus Contao Community Documentation

K (Typo)
K (Geshi-Anpassung)
 
Zeile 1: Zeile 1:
 
[[Category:Dev_Snippets]]
 
[[Category:Dev_Snippets]]
 
Durch die Einstellung
 
Durch die Einstellung
<pre>$GLOBALS['TL_DCA']['tl_table']['fields']['field']['eval']['disabled'] = true;</pre>
+
 
 +
<source lang="php">
 +
$GLOBALS['TL_DCA']['tl_table']['fields']['field']['eval']['disabled'] = true;
 +
</source>
 
ist es möglich ein Feld zu sperren, so dass es ausgegraut angezeigt wird und nicht geändert werden kann.
 
ist es möglich ein Feld zu sperren, so dass es ausgegraut angezeigt wird und nicht geändert werden kann.
  
Zeile 8: Zeile 11:
 
Wenn man also die Feldwerte mit generierten Werten belegen will, selbige aber nicht ändern lassen will, gibt man dem Feld ein load_callback, welches die Vorgabewerte generiert und zurückgibt:
 
Wenn man also die Feldwerte mit generierten Werten belegen will, selbige aber nicht ändern lassen will, gibt man dem Feld ein load_callback, welches die Vorgabewerte generiert und zurückgibt:
  
<pre>
+
<source lang="php">
 
public function load_field($varValue) {
 
public function load_field($varValue) {
 
   // Wert generieren
 
   // Wert generieren
 
   return $varValue;
 
   return $varValue;
 
}
 
}
</pre>
+
</source>
  
 
Der eigentliche Trick ist aber, dem Feld nicht per DCA die Einstellung "disabled" mitzugeben, sondern statt dessen ein 'input_field_callback', welches ermöglicht, das Feld selber zu generieren:
 
Der eigentliche Trick ist aber, dem Feld nicht per DCA die Einstellung "disabled" mitzugeben, sondern statt dessen ein 'input_field_callback', welches ermöglicht, das Feld selber zu generieren:
  
<pre>
+
<source lang="php">
 
   public function disabledField($dc)
 
   public function disabledField($dc)
 
   {  
 
   {  
Zeile 28: Zeile 31:
 
</div>';
 
</div>';
 
   }
 
   }
</pre>
+
</source>
  
 
Nun muss man lediglich noch per "save_callback" dafür sorgen, dass wirklich die generierten Werte gespeichert werden. (Man könnte da sogar die selbe Funktion nutzen wie für den load_callback, damit keiner per HTML-Manipulation doch andere Werte einschmuggelt.)
 
Nun muss man lediglich noch per "save_callback" dafür sorgen, dass wirklich die generierten Werte gespeichert werden. (Man könnte da sogar die selbe Funktion nutzen wie für den load_callback, damit keiner per HTML-Manipulation doch andere Werte einschmuggelt.)

Aktuelle Version vom 3. Oktober 2010, 16:19 Uhr

Durch die Einstellung

$GLOBALS['TL_DCA']['tl_table']['fields']['field']['eval']['disabled'] = true;

ist es möglich ein Feld zu sperren, so dass es ausgegraut angezeigt wird und nicht geändert werden kann.

Leider hat dies auch den Effekt, dass a) die Feldwerte nicht abgeschickt werden und b) auch für diese Felder keine Callbacks ausgelöst werden.

Wenn man also die Feldwerte mit generierten Werten belegen will, selbige aber nicht ändern lassen will, gibt man dem Feld ein load_callback, welches die Vorgabewerte generiert und zurückgibt:

public function load_field($varValue) {
  // Wert generieren
  return $varValue;
}

Der eigentliche Trick ist aber, dem Feld nicht per DCA die Einstellung "disabled" mitzugeben, sondern statt dessen ein 'input_field_callback', welches ermöglicht, das Feld selber zu generieren:

  public function disabledField($dc)
  { 
    $arrData = $GLOBALS['TL_DCA']['tl_page']['fields'][$dc->field];
    $strClass = $GLOBALS['BE_FFL'][$arrData['inputType']];
    $arrData['eval']['required'] = ($this->varValue == '' && $arrData['eval']['mandatory']) ? true : false;
    $arrData['eval']['disabled'] = true;
    $objWidget = new $strClass($this->prepareForWidget($arrData,$dc->inputName,self::$_field_values[$dc->field],$dc->field,$dc->table));
    return '<div' . ($arrData['eval']['tl_class'] ? ' class="' . $arrData['eval']['tl_class'] . '"' : '') . '>' . $objWidget->parse() . $datepicker . (($GLOBALS['TL_CONFIG']['oldBeTheme'] || !$objWidget->hasErrors()) ? $this->help() : '') . '
</div>';
  }

Nun muss man lediglich noch per "save_callback" dafür sorgen, dass wirklich die generierten Werte gespeichert werden. (Man könnte da sogar die selbe Funktion nutzen wie für den load_callback, damit keiner per HTML-Manipulation doch andere Werte einschmuggelt.)

Ansichten
Meine Werkzeuge

Contao Community Documentation

<TheTril> Stateless Template, Stateless Elements, Stateless Renderer :)
<TheTril> everything is stateles :D
<leo-unglaub> TheTril: genau wie Ed Snowden *g*

Navigation
Verstehen
Verwenden
Entwickeln
Verschiedenes
Werkzeuge