Zum Inhalt springen

neues Feld Subtitel als variables Pflichtfeld

Erstellt am 29. November 2007 · 1 Antwort · letzte Antwort am 30. November 2007

Tags: TCA, Frage

blau ·

Hallo zusammen,
ich muss für mein Studium eine kleine Extension schreiben, die ein neues Feld "Subtitle" hinzufügt. Dieses Feld soll ein Pflichtfeld werden, wenn das Feld "Header" nicht ausgefüllt ist.

Dazu habe ich das neue Feld über "ext_tables.php" angelegt und auf required gesetzt.
siehe folgendes:

<?php
if (!defined ('TYPO3_MODE')) 	die ('Access denied.');
$tempColumns = Array (
	"tx_test_test" => Array (		## WOP:[fields][1][fields][1][fieldname]
		"exclude" => 1,		## WOP:[fields][1][fields][1][excludeField]
		"label" => "LLL:EXT:test/locallang_db.xml:tt_content.tx_test_test",		## WOP:[fields][1][fields][1][title]
		"config" => Array (
			"type" => "input",	## WOP:[fields][1][fields][1][type]
			"size" => "30",	## WOP:[fields][1][fields][1][conf_size]
			"eval" => "required",	## WOP:[fields][1][fields][1][conf_required]
		)
	),

);

t3lib_div::loadTCA("tt_content");
t3lib_extMgm::addTCAcolumns("tt_content",$tempColumns,1);
t3lib_extMgm::addToAllTCAtypes("tt_content","tx_test_test;;;;1-1-1");
?>

das würde auch gut funktionieren, nur soll das Feld nur ein Pflichtfeld sein, wenn das Feld "Header" nicht ausgefüllt ist. Dazu habe ich die Datei class.tx_test_eval.php angelegt und rufe diese in der "ext_tables.php" auf:

<?php
if (!defined ('TYPO3_MODE')) 	die ('Access denied.');
$tempColumns = Array (
	"tx_test_test" => Array (		## WOP:[fields][1][fields][1][fieldname]
		"exclude" => 1,		## WOP:[fields][1][fields][1][excludeField]
		"label" => "LLL:EXT:test/locallang_db.xml:tt_content.tx_test_test",		## WOP:[fields][1][fields][1][title]
		"config" => Array (
			"type" => "input",	## WOP:[fields][1][fields][1][type]
			"size" => "30",	## WOP:[fields][1][fields][1][conf_size]
###folgende Zeile 
		"eval" => "required",	## WOP:[fields][1][fields][1][conf_required]
### ersetzte ich mit:
                "eval" => "tx_test_eval",

		)
	),

);

t3lib_div::loadTCA("tt_content");
t3lib_extMgm::addTCAcolumns("tt_content",$tempColumns,1);
t3lib_extMgm::addToAllTCAtypes("tt_content","tx_test_test;;;;1-1-1");
?>

Leider bekomme ich weder die Abfrage hin, ob das Feld "Header" ausgefüllt ist, noch die Fehlermeldung, dass das Feld "Subtitle" nicht ausgefüllt ist.

Hoffentlich kann mir jemand weiterhelfen, wie ich zum einen eine Fehlermeldung (PopUp) ausgeben kann, das das Feld "Subtitle" nicht ausgefüllt ist und wie ich die Abfrage nach dem "Header" formulieren kann.

Vielen Dank für jeden Tipp

blau ·

Ich befürchte, das die oben genannte Beschreibung des Problems nicht so ganz verständlich war.
Ich versuche dies nochmal zu schildern.

Ich muss eine Backend Extension schreiben, die ein neues Feld "Subtitle" in die Backend Formulare hinzufügt.
Dieses Feld muss ausgefüllt werden (Pflichtfeld), wenn das Feld „Header“ nicht ausgefüllt ist. Wenn das Feld „Header“ ausgefüllt wird, soll das neue Feld kein Pflichtfeld mehr sein.

Grundsätzlich besteht die Möglichkeit Inputfelder als Pflichtfelder über den TCA Eintrag „eval" => "required" zu definieren. Dabei wird die Standardfehlermeldung von TYPO3 ausgegeben.
Mein Problem besteht aber darin, das ich zum einen diese Meldung ändern muss und zum anderen das Feld nur ein „Pflichtfeld“ sein soll, wenn das Feld „Header“ im Backend nicht ausgefüllt wurde.

Mein bisheriger Ansatz bestand darin, eine Backend Extension anzulegen und über die Datei „ext_tables.php“ das Feld mit hinzuzufügen und als Pflichtfeld zu definieren:

   <?php
if (!defined ('TYPO3_MODE'))    die ('Access denied.');
$tempColumns = Array (
        "tx_test_test" => Array (              ## WOP:[fields][1][fields][1][fieldname]
                "exclude" => 1,  ## WOP:[fields][1][fields][1][excludeField]
                "label" => "LLL:EXT:test/locallang_db.xml:tt_content.tx_test_test",          ## WOP:[fields][1][fields][1][title]
                "config" => Array (
                        "type" => "input",      ## WOP:[fields][1][fields][1][type]
                        "size" => "30", ## WOP:[fields][1][fields][1][conf_size]
                        "eval" => "required",   ## WOP:[fields][1][fields][1][conf_required]
               )
        ),

);

t3lib_div::loadTCA("tt_content");
t3lib_extMgm::addTCAcolumns("tt_content",$tempColumns,1);
t3lib_extMgm::addToAllTCAtypes("tt_content","tx_test_test;;;;1-1-1");
?>

Zudem habe ich herausgefunden, dass ich darin auch die Zeile 10:
"eval" => "required",
mit folgender ersetzten kann
"eval" => "tx_test_eval",
und dadurch eine eigens angelegte Datei aufrufen kann. In diesem Fall habe ich die Datei „class.tx_test_eval.php“ erstellt.

In dieser Datei wollte ich die Abfrage erstellen, sowie die Fehlermeldung ausgeben.
Leider habe ich aber Schwierigkeiten, zum einen die Abfrage zu formulieren und zum anderen die Fehlermeldung auszugeben. Ich dachte dabei an folgendes:
1. Wird das Feld „Header“ ausgefüllt, muss das neue Feld „Subtitle“ nicht gefüllt werden --> keine Meldung, sondern der Datensatz soll im Backend normal gespeichert werden.
2. Wird das Feld „Header“ nicht ausgefüllt, muss das neue Feld „Subtitle“ überprüft werden und wenn kein Eintrag vorhanden ist, soll eine Meldung ausgegeben werden: „Dieses Feld muss ausgefüllt werden“. Zudem soll der Datensatz im Backend solange das Feld nicht ausgefüllt wurde nicht gespeichert werden können.

Vielleicht gibt es auch einen anderen Lösungsansatz. Ich bin für jeden Tipp sehr dankbar.