Zum Inhalt springen

TCA Checkbox-Felder mit Default-Wert

Erstellt am 29. Juni 2009 · 7 Antworten · letzte Antwort am 26. November 2016

Tags: TCA, Frage

saniki ·

Hallo zusammen

Für eine Extension möchte ich gerne das File tca.php um Checkboxen ergänzen.

Mein Code dazu sieht etwa so aus:

'feldname' => Array (
			'exclude' =>1,
			'label' => 'Elemente anzeigen',
			'config' => Array (
				 "type" => "check",  
				 "cols" => 1 ,
				 
				 "items" => Array (                        
				 		Array("Checkbox1", ""),                    
				 		Array("Checkbox2", ""),                    
				 		Array("Checkbox3", ""),                    
				 		Array("Checkbox4", ""),
				 		),                
				         
			)
		),

Wie ist es nun möglich, z.Bsp. Checkbox 2 und 4 bereits vorausgewählt (also checked) zu definieren, falls ein Backend-User ein neues Element dieser Extension erstellt?

Besten Dank schonmal und freundliche Grüsse
Saniki

pow ·

Hi saniki,

bin noch kein Extensionentwickler, aber habs mir von der tt_news rauskopiert:

		'hidden' => Array (
			'l10n_mode' => $hideNewLocalizations,
			'exclude' => 1,
			'label' => 'LLL:EXT:lang/locallang_general.php:LGL.hidden',
			'config' => Array (
				'type' => 'check',
				'default' => '1'
			)

Vielleicht hilft das.

Grüße

blueX ·
timo_s schrieb

Checkbox4 (1) Checkbox3 (0) Checkbox2 (1) Checkbox1 (0) => 1010 = 10

Um das vllt nochmal etwas genauer zu erleutern wie dieser Wert zustande kommt:

Checkbox1 hat den Wert '1',
Checkbox2 hat den Wert '2',
Checkbox3 hat den Wert '4',
Checkbox4 hat den Wert '6',

man addiert also blos die Werte der aktiven Boxen und hat dann eine Zahl die genau definiert welche der Boxen gemeint sind.

sventb ·

Du meinst wohl

Checkbox1 hat den Wert '1',
Checkbox2 hat den Wert '2',
Checkbox3 hat den Wert '4',
Checkbox4 hat den Wert '8',

Und wie kann ich in meinem Plugin nun nachvollziehen, welche Checkboxen der Redakteur aktiviert hat und welche nicht? Muss ich nun den integer Wert aus der Datenbank (z.B. 10) wieder in den binären Wert (z.B 1010) zurückverwandeln (z.B. mit base_convert('1010', 2, 10), beachten sollte man dabei, dass die Reihenfolge dabei umgekehrt ist, der Wert 1000 bedeutet also, dass die Checkbox 4 aktiviert ist) und dann diesen String in einen Array splitten (z.B. array(0 => 1, 1 => 0, 2 => 1, 3 => 0))?? Reichlich kompliziert...

Gibt es da nicht eine TYPO3-Funktion, die das erledigt?

noze ·

vieleicht hilft dir das hier weiter:

// Den addierten Wert der Checkboxen aus der DB Tabelle->Spalte holen
$cbwert = $row['tx_feuserext_dienstleistungen']; // <- ist die Spalte mit dem Wert
 
	$ret=array(); // Ein Array für die Werte erzeugen 
        for($i=0;$i<7;$i++) {   // Die Bits durchgehen und für jedes Bit den Wert (0 oder 1) ermitteln
                $ret[$i]= ($cbwert & pow(2,$i)) ? 1 : 0; // Das Array ausgeben 
      		} 
      		$ausgabe = $ret;
 
$markerArray['###BIT1###']= $ret[0];
$markerArray['###BIT2###']= $ret[1];
$markerArray['###BIT3###']= $ret[2];
$markerArray['###BIT4###']= $ret[3];
$markerArray['###BIT5###']= $ret[4];
$markerArray['###BIT6###']= $ret[5];
$markerArray['###BIT7###']= $ret[6];
//t3lib_div::debug($ausgabe);

oder du liesst das nochmal ausführlich hier:

#46835

ich hänge auch an dem problem und was ich mich grad frage:

die extension sr_feUser_register gibt die namen der checkboxen alle über TCA_INPUT aus und liesst sie auch korrekt wieder ein. bei dem beispielcode aus dem link ist die anzahl der felder auf 7 beschränkt.

wie lese ich die titel der checkboxen aus der locallang_db.xml aus wenn diese gar nicht in der gleichen extension ist? wie gesagt: sr_feUser_register macht es ohne probleme!

das muss doch auch gehen ohne das ich die anzahl auf 7 festlege?

sventb ·

Hallo noze,

danke für den Hinweis, das hilft mir weiter 🙂
Allerdings bin ich gerade dabei, die Mehrfachauswahl mit einem TCA-Feld vom Typ "select" umzusetzen, dafür gibt es die Option "checkbox" für die Einstellung "renderMode". Hierbei wird die Auswahl kommasepariert in der Datenbank gespeichert.

An den Language-Key jeder Erweiterung solltest du eigentlich mit LLL:EXT:extensionKey/locallang_db.xml:languageKey kommen. Geht das nicht?