Es ist schon wieder lange her, daß ich das gemacht habe, ich versuche mal, daß ich das zusammen bekomme, was für Dich wichtig ist.
Es gibt zwei Bereiche, wo Du ansetzen kannst:
1. Funktion itemsProcFunc
Bei mir im Beispiel handelt es sich um eine Select-Box
d.h. die entsprechenden Array-Bestandteile lauten so:
'type' => 'select',
'itemsProcFunc' => 'tx_partner_select->ProduktBerggenuss',
Nun gibt es in der Extension Datei namens tx_partner_select und dort eine Klasse tx_partner_select und dort die Funktion ProduktBerggenuss.
Diese Funktion hat zwei Parameter &$params, &$pObj.
In &$params sind die Array-Elemente des TCA-Feldes abgebildet, um die es sich dreht.
Die anderen TCA-Felder, z.B. wo das Bild geladen ist oder nicht, kannst Du mit $TCA abfragen, die Variable mußt Du aber erst auf global setzen.
Dann kannst Du auf $TCA abfragen und die Werte von $param manipulieren (also z.B. required setzen.
Auf diese Weise mache ich die verschiedensten Manipulationen.
Dann fällt mir gerade beim Anschauen noch auf, daß ich ja solche Überprüfungen auf required in Abhängigkeit von anderen Feldern auch noch ganz anders gelöst habe.
Es gibt das Feld Bankleitzahl (wir reden von der Extension partner, die ich für meine Zwecke angepasst habe).
Das sieht im TCA so aus:
'maiden_name' => Array (
'exclude' => 1,
'label' => 'LLL:EXT:partner/locallang.php:tx_partner_main.maiden_name',
'config' => Array (
'type' => 'input',
'size' => '10',
'max' => '9',
'eval' => 'tx_partner_bankleitzahl',
)
),
Dann gibt es einen Unterordner in der Extension Partner namens eval.
Dort befindet sich eine Datei tx_partner_bankleitzahl.php
class tx_partner_bankleitzahl{
/**
* This function needs to return JavaScript code for client side evaluation of the
* field value. The JavaScript variable "value" is set to the field value in the context
* of this JS snippet.
* In this example we just add the string "[added by JS]" to the field value.
*
* @return JavaScript code for evaluating the
*/
function returnFieldJS() {
global $SOBE;
$id= $SOBE->elementsData[0]['uid'];
$JS = "if((document.editform.elements['data[tx_partner_main][".$id."][marital_status]'].options[1].selected==true ";
$JS .= " || document.editform.elements['data[tx_partner_main][".$id."][marital_status]'].options[2].selected==true) ";
$JS .= " && document.editform.elements['data[tx_partner_main][".$id."][maiden_name]_hr'].value.length <8 )" ;
$JS .= "{alert('Wenn Sie Lastschriftverfahren wünschen, darf die BLZ nicht leer sein! Sie muß mindestens 8 Ziffern lang sein!');";
$JS .= "document.editform.elements['data[tx_partner_main][".$id."][maiden_name]_hr'].focus();}; ";
$JS .= "return value";
return $JS;
#return '
#return value + " [added by JS]";
#';
}
/**
* This is the server side (i.e. PHP) side of the field evaluation.
* In this example we just add the string "[added by PHP]" to the field value.
*
* @param mixed $value: The value that has to be checked.
* @param string $is_in: Is-In String
* @param integer $set: Determines if the field can be set (value correct) or not (PASSED BY REFERENCE!)
* @return The new value of the field
*/
function evaluateFieldValue($value, $is_in, &$set) {
foreach($_POST['data']['tx_partner_main'] as $id =>$idvalue)
if(isset($_POST['data']['tx_partner_main'][$id]['marital_status']) && ($_POST['data']['tx_partner_main'][$id]['marital_status'] == 1 || $_POST['data']['tx_partner_main'][$id]['marital_status'] == 2) )
{
if(strlen($_POST['data']['tx_partner_main'][$id]['maiden_name']) < 8-)
{
$set = false;
}
}
return $value;
}
}
if (defined('TYPO3_MODE') && $TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['ext/partner/eval/class.tx_partner_bankleitzahl.php']) {
include_once($TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['ext/partner/eval/class.tx_partner_bankleitzahl.php']);
}
Tut mir leid, ich kann Dir nur so ein paar Brocken hinwerfen, ich fahre später weg übers Wochenende und habe deswegen keine Zeit mehr, alle Fäden zusammen zu suchen, wie die diversen Funktionen aufgerufen und verarbeitet werden.
Du kannst nur versuchen mit den Stichworten, die ich geliefert habe in den diversen Hilfedokus zu suchen.
In der TYPO3 Core API müßtest Du fündig werden.
Auf Seite 91 gehts z.B. um das Stichwort "eval"
Vielleicht findest Du in einer Extension, die Du verwendetst in der TCA ein Beispeil der Verwendung für die beiden Arten von Userdefinierten Funktionen und kannst Dir dort was abgucken.
Auf diese Art bin ich auch vorgegangen.
Gruß, Regina