15.10.2010

'eval' in Textfeldern im TYPO3 Backend (TCA)

Mit eigenen Funktionen kann die Überprüfung der Benutzereingaben in Backendformulare $GLOBALS['TCA'] erweitert werden.
Am Beispiel des Teasers in Calendar Base (cal) wird gezeigt, wie die Textlänge in Textfeldern beschränkt werden kann.

Ein Kunde möchte, dass seine Redakteure im Teaserfeld der Extension Calendar Base (cal) nur 200 Zeichen eingeben darf.

Bei einem Input-Feld kein Problem ('max' => 200), in einem Textfeld geht das nicht so einfach.

Die Überprüfung ('eval') und das Abschneiden der Textlänge müssen in einer eigenen Funktion erfolgen.

Textfeld "teaser" in cal auf 200 Zeichen beschränken

So sieht unser Beispiefeld in der cal/tca.php aus:

php Download
  1. 'teaser' => Array (        
  2.             'exclude' => 1,        
  3.             'label' => 'LLL:EXT:cal/locallang_db.php:tx_cal_event.teaser',        
  4.             'config' => Array (
  5.                 'type' => 'text',
  6.                 'cols' => '40',       
  7.                 'rows' => '5',
  8.                 'wizards' => Array(
  9.                     '_PADDING' => 4,
  10.                     'RTE' => Array(
  11.                         'notNewRecords' => 1,
  12.                         'RTEonly' => 1,
  13.                         'type' => 'script',
  14.                         'title' => 'LLL:EXT:cms/locallang_ttc.php:bodytext.W.RTE',
  15.                         'icon' => 'wizard_rte2.gif',
  16.                         'script' => 'wizard_rte.php',
  17.                     ),
  18.                 )
  19.             )
  20.         ),

Legen Sie im Kickstarter eine neue Extension an:
typo3/conf/ext/my_extension/

In dieser Extension erstellen Sie eine neue Datei.
typo3/conf/ext/my_extension/class.tx_my_extension_evalfunc_teaser.php
mit diesem Inhalt:

php Download
  1. class tx_myextension_evalfunc_teaser {
  2.      function evaluateFieldValue($value, $is_in, &$set) {
  3.          if (strlen($value) > 200) {
  4.             $value = substr($value, 0, 199 );
  5.         }
  6.          return $value;
  7.      }
  8. }

Regsitrieren Sie die Datei in typo3conf/ext/my_extension/ext_localconf.php

php Download
  1. // userfunc eval Teaserfeld
  2. $TYPO3_CONF_VARS['SC_OPTIONS']['tce']['formevals']['tx_myextension_evalfunc_teaser'] = 'EXT:br_cal_ext/class.tx_myextension_evalfunc_teaser.php';

Jetzt müssen Sie die Methode dem cal Teaserfeld im TCA zuweisen, und zwar am besten in
typo3conf/extTables.php

In dieser Datei können Anweisungen aus den tca.php und ext_tables.php der Extensions überschrieben werden. Bei Updates von Extensions und fachgerechten TYPO3 Systemupdates bleiben die Überschreibungen erhalten.

php Download
  1. // cal Teaser auf 200 Zeichen begrenzen
  2. $GLOBALS['TCA']['tx_cal_event']['columns']['teaser']['config']['eval'] = 'tx_myextension_evalfunc_teaser';

Jetzt noch Cache löschen und dann sollte es klappen.

 

Getestet in TYPO3 4.2.12


Kategorie: TYPO3, Extensions, Backendformulare, cal