Eigene Backend Eingabefelder für Contao programmieren
Bevor wir loslegen
Contao beseitzt eine große Auswahl an Widgets an. In der Contao config.php finest du Sie alle, Siehe BE_FFL GLOBAL.
Contao config.php
/**
* Back end form fields
*/
$GLOBALS['BE_FFL'] = array
(
'text' => 'TextField',
'password' => 'Password',
'textStore' => 'TextStore',
'textarea' => 'TextArea',
'select' => 'SelectMenu',
'checkbox' => 'CheckBox',
'checkboxWizard' => 'CheckBoxWizard',
'radio' => 'RadioButton',
'radioTable' => 'RadioTable',
'inputUnit' => 'InputUnit',
'trbl' => 'TrblField',
'chmod' => 'ChmodTable',
'pageTree' => 'PageTree',
'pageSelector' => 'PageSelector',
'fileTree' => 'FileTree',
'fileSelector' => 'FileSelector',
'fileUpload' => 'Upload',
'tableWizard' => 'TableWizard',
'listWizard' => 'ListWizard',
'optionWizard' => 'OptionWizard',
'moduleWizard' => 'ModuleWizard',
'keyValueWizard' => 'KeyValueWizard',
'imageSize' => 'ImageSize',
'timePeriod' => 'TimePeriod',
'metaWizard' => 'MetaWizard'
);
Eigenes Widget erstellen
Wir öffnen unsere system/modules/demo/src/Resources/contao/config/config.php und fügen dem $GLOBALS["BE_FFL"] Array ein neues Widget hinzu.
Danach erstellen wir im unserem system/modules/demo/src/Resources/Widgets/ Verzeichnis eine neue PHP Datei mit der Bezeichnung DemoWidget.php.
Code Snippet - config.php
<?php
$GLOBALS['BE_FFL']['demoWidget'] = 'DemoWidget';
Code Snippet - DemoWidget.php
<?php
/**
* Class DemoWidget
*/
class DemoWidget extends Contao\Widget
{
/**
* @var bool
*/
protected $blnSubmitInput = true;
/**
* @var string
*/
protected $strTemplate = 'be_widget';
/**
* @param mixed $varInput
* @return mixed
*/
protected function validator($varInput)
{
return parent::validator($varInput);
}
/**
* @return string
*/
public function generate()
{
// Textfeld
$field = sprintf(
'<input type="text" name="%s" id="ctrl_%s" value="%s">',
$this->strName,
$this->strId,
$this->varValue
);
return $field;
}
}
DemoWidget Klasse in Einzelteilen.
Ich versuche die DemoWidget Klasse grob zu skizieren.
Über die $this Referenz haben wir einen Zugriff auf das 'eval' Array, welches wir im unseren DCA definiert haben. z.B $this->mandatory; $this->maxlength; Selbstverständlich können wir das 'eval' Array mit unseren eigenen Eigenschaften erweitern. Dazu kommen noch Methoden und Eigenschaften, welches uns die Widget Klasse zur verfügung stellt.
Wichtigste Variablen und Eigenschaften:
$this->strName
Die strName Variable liefert uns das 'name' Attribute unseres Widgets. Das 'name' Attribute definieren wir in unserer DCA. Das sind die keys in dem fields Array.
$this->varValue
Damit haben wir Zugriff auf den gespeicherten Wert in der Datenbank.
$this->strId
Liefert das gleiche wie $this->strName
validator($varInput)
Bevor der Wert in der Datenbank gespeichert wird, können wir den Wert in der 'validator' Methode überprüfen.
generate()
In der Generate erzeugen wir unsere Eingabefelder.
$blnSubmitInput
Wenn wir diese Eigenschaft false setzten werden keine Daten gespeichert.
Ich empfehle jedem Contao - Entwickler sich an den core Widgets zu orientieren.
Alexander Naumov
Contao Freelancer, PHP Entwickler und Web Allrounder