Zum Inhalt springen

Kickstarter- code für die checkboxen spinnt?

Erstellt am 4. Mai 2006 · 8 Antworten · letzte Antwort am 13. Mai 2006

Tags: TCA, Frage

Juli ·

Typo3 Version 4.0
Ich hab' mir die Extension "Immovable Manager (mediacookie_immomanager )"
installiert und mit Hilfe des Kickstarters erweitert (Extend existing Tables). Leider gibt es Probleme mit den "Selectorboxen/Checkboxen weil die "item
values" nicht richtig zurückgegeben werden.

Der vom Kickstarter generierte Kode für die Selektorbox in der Datei ext_tables.php sieht -gekürzt - folgendermaßen aus:

<php>
"config" => Array (
"type" => "select",
"items" => Array (
Array("LLL-gekürzt-tx_immo_objektart.I.0", "0"),
Array("LLL-gekürzt-tx_immo_objektart.I.1", "1"),
Array("LLL-gekürzt-tx_immo_objektart.I.2", "2"),
Array("LLL-gekürzt-tx_immo_objektart.I.3", "3"),
<php>

Im Frontend wurden allerdings nicht die Werte ausgegeben, die im Kickstarter unter "Label english/Label German" eingetragen waren, sondern der numerischen Index (glaub' ich wenigsten). Also hab' ich das ganze folgendermaßen verändert:

<php>
"type" => "select",
"items" => Array (
Array("LLL-gekürzt-tx_immo_objektart.I.0", "Haus Miete"),
Array("LLL-gekürzt-tx_immo_objektart.I.1", "Noch defienieren"),
Array("LLL-gekürzt-tx_immo_objektart.I.2", "Noch defienieren"),
Array("LLL-gekürzt-tx_immo_objektart.I.3", "Noch defienieren"),
<php>

Damit hat es dann gefunkt.

Das Spielchen funktioniert aber nicht bei der "Checkbox, 4 boxes in a row". Im Kickstarter gibt es gar kein Feld für "Item value" wie bei der Selectorbox. Der Kickstarter Kode sieht so aus:

<php>
"type" => "check",
"cols" => 4,
"items" => Array (
Array("LLL-gekürzt-tx_immo_besonderheiten.I.0",
Array("LLL-gekürzt-tx_immo_besonderheiten.I.1",
Array("LLL-gekürzt-tx_immo_besonderheiten.I.2",
Array("LLL-gekürzt-tx_immo_besonderheiten.I.3",
<php>

Also hab' ich mir gedacht, ich mach's wie bei der Selectorbox und füge die
Schlüssel per Hand ein:

<php>
"type" => "check",
"cols" => 4,
"items" => Array (
Array("LLL-gekürzt-tx_immo_besonderheiten.I.0","Garten"),
Array("LLL-gekürzt-tx_immo_besonderheiten.I.1","Garage"),
Array("LLL-gekürzt-tx_immo_besonderheiten.I.2","Terasse"),
Array("LLL-gekürzt-tx_immo_besonderheiten.I.3","Altbau"),
<php>

Funktioniert aber nicht, denn es wird der Index irgendwie adiert und ausgegeben anstelle der Schlüssel "Garten,Garage,Terasse". Muß ja irgendwie mit dem assoziativen array zutun haben, aber hier bin ich mit meinen php-Kenntnissen am Ende. Kann mir jemand einen Tip geben?

Gruß
Jürgen

Juli ·

Hab mir nochmal die

4.2. $TCA array reference

angeschaut. Dort gibt es ein Beispiel für checkboxen:

				script_ended = 0;
				function jumpToUrl(URL)	{
					document.location = URL;
				}
			        'sendOptions' => Array (
            'label' => 'LLL:EXT:direct_mail/locallang_tca.php:sys_dmail.sendOptions',
            'config' => Array (
                'type' => 'check',
                'items' => Array (
                    Array('LLL:EXT:direct_mail/locallang_tca.php:sys_dmail.sendOptions.I.0', ''),
                    Array('LLL:EXT:direct_mail/locallang_tca.php:sys_dmail.sendOptions.I.1', '')
                ),
                'default' => '3'
            )
        ),

Hab' also aus meinem Kode die Werte Garten, Garage etc wieder rausgenommen und nur die einfachen Anführungszeichen stehen lassen, wie im Beispiel:

	"tx_immo_besonderheiten" => Array (		
		"exclude" => 1,		
		"label" => "LLL:EXT:immo/locallang_db.xml:tx_mediacookieimmomanager_object.tx_immo_besonderheiten",		
		"config" => Array (
			"type" => "check",
			"cols" => 4,
			"items" => Array (
				Array("LLL:EXT:immo/locallang_db.xml:tx_mediacookieimmomanager_object.tx_immo_besonderheiten.I.0", ""),
				Array("LLL:EXT:immo/locallang_db.xml:tx_mediacookieimmomanager_object.tx_immo_besonderheiten.I.1", ""),
				Array("LLL:EXT:immo/locallang_db.xml:tx_mediacookieimmomanager_object.tx_immo_besonderheiten.I.2", ""),
				Array("LLL:EXT:immo/locallang_db.xml:tx_mediacookieimmomanager_object.tx_immo_besonderheiten.I.3", ""),
			),
		)
	),

Macht keinen Unterschied. Im FE werden weiterhin nur Zahlen ausgegeben, z.B. 0 oder 3 oder 7.
Wirklich keiner ne Idee?
Gruß
Jürgen

Juli ·

Trotz Gefahr, daß dieser Thread zu einem Monolog ausartet, poste ich einen Link zu zwei Fotos, die das Problem vielleicht besser verdeutlichen.können.

http://kraftfelt.dk/index.php?id=483

Hab die gleiche Extension übrigens auf einer zweiten, identischen Typo3 4.0 Installation getestet mit dem gleichen Resultat.

Gruß
Jürgen

steffenk ·

So handelt Typo3 nunmal eine Gruppe von Checkboxen. Sie werden als Bits in ein INT gespeichert.
x x x x

entspricht

2^0 für Garten
+ 2^1 für Garage
+ 2^2 für Terasse
+ 2^3 für Altbau

Du musst die Bits entsprechend in SQL abfragen, wenn Du z.B. wissen willst, ob Terasse gesetzt ist, dann wäre das

where tx_immo_besonderheiten & 4 > 0
just2b ·

Hier der Code dafür:

		// Checkboxen auslesen
		$anzahl = 5; #Anzahl Checkboxen
		$k = 1;
		$Features = $row['verkehrallg'];
		for ($m=0; $m < $anzahl; $m++) {
			if ($Features & $k) {
				$boxArr[$m]=1;
			} else {
				$boxArr[$m]=0;
			}
			$k *= 2;
		}

lg georg

Juli ·

Vielen Dank für Eure Hilfe.
Das muß ich erstmal verdauen. Dachte mir schon, daß das nicht ganz so einfach wird.
@steffenk: das mit den Bits hatte ich ja in der $TCA array reference gelesen,
aber nicht geschnallt, wie das umzusetzen ist. Der Kode müßte dann ja wohl
über ###Marker### in die blablabla_pi1.php eingebunden werden.
Gruß
Jürgen

Juli ·

Nun hab ich den Kode angepaßt und folgendermaßen in die pi1.php eingefügt:

			 $markerArray["###BESONDERHEITEN###"] = $anzahl;
                	$anzahl = 4; #Anzahl Checkboxen
               		 $k = 1;
               		 $Features = $row['tx_immo_besonderheiten']; 
                		for ($m=0; $m < $anzahl; $m++) {
                       		 if ($Features & $k) {
                                $boxArr[$m]=1;
                        } else {
                                $boxArr[$m]=0;
                        }
                        $k *= 2;
                }

War natürlich "a shot in the dark" und funktioniert auch nicht.
Gibt es eine Extension mit einer Gruppe von Checkboxen, wo man sich die

ext_table.php
tca.php
pi1.php

anschauen könnte, um zu lernen, wie das zusammenhängt?
Gruß
Jürgen

just2b ·

du musst schon $boxArr[$m] durchlaufen, da bekommst du erst raus ob aktiviert oder nicht!
$boxArr[0] = 1 => 1. Checkbox aktiviert
$boxArr[2] = 0 => 3. checkbox nicht aktiviert

lg georg

Juli ·

Nun hab' ich reichlich ausprobiert und bin nicht richtig zum Ziel gelangt, was meinen stümperhaften PHP-Kenntnissen zuzuschreiben ist. Anderseits ist es nicht besonders tragisch, weil ich in diesem Fall die fehlenden Checkboxen durch eine einfaches Textfeld ersetzen kann - the poor man's solution :-).
Werde den Faden aber garantiert zu einem anderen Zeitpunkt wieder aufnehmen.
Für alle die es interessiert, wie ich die Felder der Eingabemaske teilweise nebeneinander platziert habe, gibt's einen screenshot der sowohl das BE als auch den tca.php Kode dazu zeigt. (Alles hier aus dem Forum abgekupfert)

http://kraftfelt.dk/index.php?id=549

Gruß
Jürgen