Zum Inhalt springen

tca type" => "select" soll Pflichtfeld sein

Erstellt am 2. Februar 2009 · 12 Antworten · letzte Antwort am 13. November 2018

Tags: TCA, Frage

kathrin-77 ·

Hallo zusammen,

ich habe meine Frage bereits schon in einem anderen Forum gestellt, jedoch konnte mir dort niemand weiterhelfen. Ich hoffe, dass mir vielleicht hier jemand helfen bzq. einen Tipp geben kann. Hier nun meine Frage:

Ich möcht in der tca.php gern sagen, dass ein bestimmtes Feld vom Typ "select" Pflicht sein soll. Bei input-Feldern geht das ja ganz einfach durch "eval" => "required". Bei select geht das leider nicht. Ich habe gelesen, dass man in der tca.php unter "minitems" => 1 eintragen soll, um das Ziel zu erreichen. Aber das funktioniert leider auch nicht. Habe schon die Extension deinstalliert und neu installiert, Cache mehrfach gelöscht, alles ohne Erfolg.

Weiß jemand eine Lösung? Vielleicht war der Hinweis ja auch falsch?

Bin über jeden Hinweis dankbar!

Viele Grüße,
Kathrin

meckpo ·

Hallo,

ja "minitems" => 1 ist korrekt. Dann muss man MINDESTENS einen Eintrag auswählen = Pflichtfeld. Und du darfst natürlich im Array "items" keinen "leeren" Wert haben - sonst kann man natürlich auch den leeren Wert auswählen.

kathrin-77 ·

Danke für Deine Antwort. Ok, minitems ist korrekt, doch leider funktioniert es bei mir nicht.

Was heißt das genau:

Und du darfst natürlich im Array "items" keinen "leeren" Wert haben - sonst kann man natürlich auch den leeren Wert auswählen.

Vielleicht liegt da das Problem, jedoch versteh ich nicht, was Du genau meinst? Wo stelle ich denn den Wert ein?

meckpo ·

Hallo,

dein TCA sieht ja vielleicht etwa so aus:

'type' => Array (
	'label' => 'Deine Beeichnung',
	'config' => Array (
		'type' => 'select',
		'items' => Array (
			Array('', '0'),
			Array('Weiterer Eintrag', '1'),
		),
		'minitems'=>1,
	)
)

In "items" ist ein leerer Eintrag den kann man natürlich jetzt auch auswählen.

Ich habe einen anderen Vorschlag: Poste mal den TCA dann kann man auch mehr machen als nur raten 😉

kathrin-77 ·

Danke für Dein Beispiel. Ich frage die Werte aus einer anderen Tabelle ab, deshalb gibt es kein item so wie in Deinem Beispiel. Hier mal ein Auszug aus der TCA Definition:

"standort" => Array (		
			"exclude" => 1,		
			"label" => "LLL:EXT:sg_jobs/locallang_db.xml:tx_sgjobs_daten.standort",		
			"config" => Array (
				"type" => "select",	
				"foreign_table" => "tx_sgjobs_standort",	
				"foreign_table_where" => "ORDER BY tx_sgjobs_standort.name",	
				"size" => 8,	
				"minitems" => 1,
				"maxitems" => 1,	
				"wizards" => Array(
					"_PADDING" => 2,
					"_VERTICAL" => 1,
					"add" => Array(
						"type" => "script",
						"title" => "Create new record",
						"icon" => "add.gif",
						"params" => Array(
							"table"=>"tx_sgjobs_standort",
							//"pid" => "###CURRENT_PID###",
							"pid" => $standortPID,
							"setValue" => "prepend"
						),
						"script" => "wizard_add.php",
					),
					"list" => Array(
						"type" => "script",
						"title" => "List",
						"icon" => "list.gif",
						"params" => Array(
							"table"=>"tx_sgjobs_standort",
							//"pid" => "###CURRENT_PID###",
							"pid" => $standortPID,
						),
						"script" => "wizard_list.php",
					),
					"edit" => Array(
						"type" => "popup",
						"title" => "Edit",
						"script" => "wizard_edit.php",
						"popup_onlyOpenIfSelected" => 1,
						"icon" => "edit2.gif",
						"JSopenParams" => "height=350,width=580,status=0,menubar=0,scrollbars=1",
					),
				),
			)
		),

Ich hoffe, Du hast für dieses Beispiel auch eine Idee 🙂 ?

Danke schon mal!

meckpo ·

Hallo,

nein - tut mir leid. Sieht alles ganz furchtbar richtig aus. Du könntest noch mal "size" auf 1 setzen (da man ja sowieso genau 1 Element auswählen muss). Aber wie gesagt: eigentlich sollte es so gehen ...

kathrin-77 ·

Habe size auf 1 gesetzt, aber leider hat das auch überhaupt nichts gebracht. Ich weiß nicht, woran es noch liegen soll 😢 .

digedag ·

Was ich nicht ganz verstehe: Sobald in der Tabelle tx_sgjobs_standort ein Datensatz vorhanden ist, ist doch in der Select-Box immer ein Eintrag ausgewählt. Was soll die Pflichtfeld-Prüfung da noch machen? :o

kathrin-77 ·

Also wenn man einen neuen Datensatz anlegt, dann sind natürlich Einträge (aus der DB ausgelesen) in der select-Box. Jedoch ist ja noch keins ausgewählt. Wenn also keins ausgewählt ist, dann soll das nette gelbe Ausrufezeichen darauf hinweisen.

digedag ·

Okay. Ich hab's mal ausprobiert. Bei size=8 hast du Recht, da müsste eine Warnung erscheinen, tut es aber nicht. Wenn du aber size=1 setzt, dann ist es ja eine Einfach-Auswahl und da kann nichts mehr abwählen. Ein Eintrag ist immer gesetzt.

Wenn du eine Mehrfach-Auswahl benötigst, dann musst du bei dem Max-Items einen Wert größer 1 eintragen. Es wird dann eine "Doppelte" Auswahlbox angezeigt. Hier wird dann auch wieder gewarnt, wenn kein Eintrag ausgewählt wurde:

'size' => 8,   
'minitems' => 1,
'maxitems' => 8,
sushie ·

hi, habe eoin ähnliches problem:

'location_id' => Array (
	'exclude' => 0,
	'label' => 'LLL:EXT:jw_calendar/locallang_db.php:tx_jwcalendar_events.location_id',
	'config' => Array (
		'type' => 'select',
		//'items' => Array (Array('',0),),
		'foreign_table' => 'tx_jwcalendar_location',
		'foreign_table_where' => 'ORDER BY tx_jwcalendar_location.location',
		'size' => 1,
		'minitems' => 1,
		'maxitems' => 1,
		'eval' => 'required',
	)
),

- da keine "leeren" options zur auswahl wir der user gezwungen etwas aus zu wählen

- aber schön wäre wenn das feld default-mässig leer sein könnte, das gelbe "icon" für pfilchtfeld erscheinen würde (wie bei text-inputs) und der user aktiv etwas wählen müsste...

gibts dafür eine lösung?

sugi ·

Hallo zusammen,
ich habe ein ähnliches Problem. Ich möchte ein select-Feld als Pflichtfeld ausgeben und habe in ext_tables.php folgendes eingefügt:

$GLOBALS['TCA']['tt_news']['columns']['tx_alexianercalender_contact_person']['config']['eval'] = 'required';
$GLOBALS['TCA']['tt_news']['columns']['tx_alexianercalender_contact_person']['config']['minitems'] = '1';

Funktioniert aber nicht. Ich weiß leider auch nicht, wo das Problem ist. Anbei ein Screenshot, wie das TCA-Tabelle aussieht.

Kann mir jemand helfen? Vielen Dank schonmal!