"eval" Funktion im TCA Array nutzen
empfohleneLinks
www.blogix.net/2008/05/10/eigene-eval-funktion-in-typo3-tca/
Die eval Funktion des TCA Arrays ist zur Konfiguration des Verhaltens von Datensätzen im TYPO3 Backend eine sehr nützliche Funktion. Vor allem verwendet man diese um das Verhalten von Input Feldern eigener TYPO3 Extensions zu definieren. Disere Fall wird in diesem Artikel vorausgesetzt.
Setzen kann man die eval Funktion des TCA Arrays bei dessen Defnition je nach Fall in der Datei tca.php oder ext_tables.php.
Erst einmal ein Beispiel zum Auf
"tx_lonewsseo_alias" => Array (
"exclude" => 1,
"label" => "LLL:EXT:lonewsseo/locallang_db.xml:tt_news.tx_lonewsseo_alias",
"config" => Array (
"type" => "input",
"size" => "30",
"eval" => "required",
)
),
in der Datei ext_tables.php sorgt dafür, dass das alias Feld immer ausgefüllt sein muss. Dieses Feld soll später genutzt werden, um bei tt_news suchmaschinenfreundlichere Realurl Pfade zu generieren.
Nun sollen aber Pfade lowercase sein und keine Leerzeichen enthalten. und eindeutig sein. Also ändere ich die Eval-Funktion im $TCA entsprechend:
"eval" => "nospace, lower, required,unique"
Die macht nun aus "23. Türchen: "eval" Funktion im TCA Array nutzen" folgendes: "23.türchen:"eval"funktionimtcaarraynutzen". Ganz klar, die Lösung ist noch suboptimal. Also erlaube ich nur alphanumerische Zeichen und den Unterstrich:
"eval" => "alphanum_x, lower, required,unique"
Aus "23. Türchen: "eval" Funktion im TCA Array nutzen" wird: "23trchenevalfunktionimtcaarraynutzen". Mein Wunsch ist es aber Umlaute in ae, oe und ue umzuwandeln und Leerzeichen in Bindestriche. Also schreibe ich nun eine Benutzerdefinierte Funktion. Mein Aufruf sieht nun so aus:
"eval" => "lower,alphanum_x,unique, tx_lonewsseo_mapping"
Und obwohl die Funktion korrekt funktionieren sollte, ist das Ergebnis unverändert. Was war passiert? Ganz einfach. Die Eval Funktionen im TCA werden in der Reihenfolge Ihres erscheinens abgearbeitet. lower und alphanum_x haben bereits ihre arbeit getan bevor meine funktion aufgerufen wurde. Daher ist diese Reihenfolge die richtige:
"eval" => "lower, tx_lonewsseo_mapping,alphanum_x,unique"
Lower sorgt dafür, dass die Werte bereits lowercase ankommen, tx_lonewsseo_mapping wandelt die leerzeichen um etc und alphanum_x un unique sorgen dafür, dass die Werte nun wirklich alphanumerisch (mit Bindestrich und Unterstrich) und einmalig vorhanden sind.
Die Benutzerdefinierte Funktion für die Eval-Funktion im TCA erzeugen
Zunächst im Hauptordner der eignen TYPO3 Extension eine neue PHP Klasse erzeugen und unter class.tx_meineextension_mapping.php abspeichern.
Inhalt der Klasse:
<?php
class tx_meineextension_mapping {
function evaluateFieldValue($value, $is_in, &$set) {
return $this->form_url($value);
}
function form_url($url)
{
$url = str_replace(' ', '-', $url);
return $url;
}
}
?>
Leerzeichen vor <?php und hinter ?> erzeugen später im TYPO3 Backend Fehler.
Diese Datei muss nun in der ext_localconf.php eingebunden werden. Exisitiert diese Datei noch nicht kann sie einfach im Hauptordner der eigenen TYPO3 Extension erzeugt werden.
Die ext_localconf.php sollte dann so oder ähnlich aussehen:
<?php
if (!defined ('TYPO3_MODE')) die ('Access denied.');
############
# Diese Zeile einfügen:
############
$TYPO3_CONF_VARS['SC_OPTIONS']['tce']['formevals']['tx_meineextension_mapping'] =
'EXT:meineextension/class.tx_meineextension_mapping.php';
###########
?>
Zu guter letzt noch in der ext_tables.php oder tca.php die eval funktion wie oben gesehen hinzufügen.
Die Eval-Funktion im TCA hat keinen Effekt?
- Die Eval-Funktion des TCA funktioniert nur bei Eingabefeldern mit "type" => "input"
- Ist die Extension nicht installiert?
- Wurde vergessen, den "Konfigurationscache" zu löschen?
Alle Eval Funktionen im Überblick :
$TCA array reference (Englisch) auf TYPO3.org
Vielen Dank
Zu ""eval" Funktion im TCA Array nutzen"
Sigrid.
Wolf