Feld im DCA disablen, aber trotzdem Werte übermitteln

Aus Contao Community Documentation

Version vom 3. März 2010, 14:24 Uhr von Staen (Diskussion | Beiträge)

(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)

Durch die Einstellung

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

ist es möglich ein Feld zu sperren, so dass es zwar ausgegraut angezeigt wird, aber 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 ich also die Feldwerte mit generierten Werten belegen will, selbige aber nicht ändern lassen will, gebe ich 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 ich lediglich noch per "save_callback" dafür sorgen, dass wirklich die generierten Werte gespeichert werden (Ich könnte da sogar die selbe Funktion nutzen wie für den load_callback), damit mir keiner per HTML-Manipulation doch andere Werte einschmuggelt.

Ansichten
Meine Werkzeuge

Contao Community Documentation

<user> Composer meckert bei Isotope, dass er mit tablelookupwizard 3.1 nicht zurecht kommt - korrekt?
<Toflar> keine Ahnung, sowas weiss ich doch nicht auswendig :D
<user> wer dann ;)
<Toflar> na niemand, deswegen schreibt man's ja in die composer.json

Navigation
Verstehen
Verwenden
Entwickeln
Verschiedenes
Werkzeuge