Ein eigener inputType in Contao

Ursprünglich wollte ich nur den Wert des tstamp Feldes eines Contao Backend Modules als Informationsfeld anzeigen lassen. Ich dachte, dass gibts sicherlich und deswegen schaute ich auf die Contao Dokumentation „Internal structure of a Data Container Array“ unter den bereits vorhandenen Feldern nach. Zu meiner Verwunderung gab es da unter Felder nur folgende Liste:

  • text Textfeld
  • password Passwortfeld
  • textarea Textarea
  • select Drop-Down-Menü
  • checkbox Checkbox
  • radio Radio-Button
  • radioTable Tabelle mit Bildern und Radio-Buttons
  • inputUnit Textfeld mit Drop-Down-Menü zur Auswahl der Einheit
  • trbl Vier Textfelder mit Drop-Down-Menü zur Auswahl der Einheit
  • chmod CHMOD-Tabelle
  • pageTree Seitenbaum
  • fileTree Dateibaum
  • tableWizard Tabellenassistent
  • listWizard Listenassistent
  • optionWizard Optionsassistent
  • moduleWizard Modulassistent
  • checkboxWizard Checkbox-Assistent

Abgesehen von den ganzen Exoten gab es kein Feld, dass den Wert nur als „Label“, also als einfachen String anzeigt. In meinem Fall benötige ich ein Feld, dass einen Timestamp in ein Datum umwandelt und im Backend anzeigt.

Ich bin ähnlich wie in meinem Artikel „Einen eigenen Data Container in Contao“ vorgegangen. Zuerst wird in der config.php des Modules ein neuer Typ definiert:

$GLOBALS['BE_FFL']['timestampLabel'] = 'TimestampLabelField';

Nun können wir die passende Klasse dazu erstellen. Dies kann direkt im Wurzelverzeichnis des eigenen Moduls gemacht werden. In diesem Fall heißt die Datei TimestampLabelField.php und sieht folgendermaßen aus:

class TimestampLabelField extends Widget
{
	/**
	 * Template
	 * @var string
	 */
	protected $strTemplate = 'be_widget';
 
	/**
	 * Generate the widget and return it as string
	 * @return string
	 */
	public function generate()
	{
	  if(!$this->varValue)
	    return '-';
	  return sprintf('<label name="%s" 
                               id="ctrl_%s" %s 
                               onfocus="Backend.getScrollOffset();" 
                               style="font-weight:normal">%s
                          </label>',
               $this->strName,
               $this->strId,
               (strlen($this->strClass) ? ' '.$this->strClass : ''),
               $this->getAttributes(),
               date($GLOBALS['TL_CONFIG']['dateFormat'].' '.
                    $GLOBALS['TL_CONFIG']['timeFormat'], 
               $this->varValue));
	}
}

In der generate-Funktion wird ein Html-Label erzeugt und der Wert in ein Datum formatiert.

Ein Gedanke zu “Ein eigener inputType in Contao

Kommentar verfassen