Zum Inhalt springen

Zugriff auf den Wert aus einem FCE

Erstellt am 4. August 2009 · 1 Antwort · letzte Antwort am 13. August 2009

Tags: TCA, FlexForms, Frage

maxB ·

Moin an alle Leser/innen,

nachdem ich mittlerweile einige Stunden rumprobiert habe, weil ich unbedingt selbst den Knackpunkt finden wollte, wende ich mich nun hoffnungsvoll an die Benutzer von typo3.net 🙂

Es geht um (m)eine (erste) winzige Extension, die folgendes erledigen soll: In einer Datenbank existieren tausende von Einträgen, die Kraftfahrzeuge mit Details zu Marke, Modell, Treibstoff, Türen etc. enthalten. Um eine URL für den Redakteur möglichst komfortabel bilden zu lassen, sollen aus dieser DB sowohl alle Marken als auch alle Modelle (in Abhängigkeit von der zuvor gewählten Marke) ausgewählt werden können - später wird damit eine URL zu einem Neuwagen-Konfigurator gebildet.

Ich kann ohne Probleme die Datenbank auslesen und die Einträge in zwei Dropdowns in einem Flexible Content Element schreiben lassen. Allerdings fehlt mir die Abhängigkeit des Modells zur Marke. Ich muss also irgendwie abfragen, welche Marke zuvor gewählt wurde, um mir eben ausschließlich die zusammenhängenden Modelle ausgeben zu lassen.

Folgendes habe ich zur Zeit (TYPO3 4.2.8, aktuelle PHP- & MySQL-Version, falls das interessiert 🙂):

class.tx_mbccdataimport_pi1.php

function addBrands($config) {
		$optionList = array();
		$result = $GLOBALS['TYPO3_DB']->exec_SELECTquery('manufacturer', 'cc_car_data', '', 'manufacturer', '', '');
		$i=1;
		while($row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($result)) {
			$optionList[$i] = array(0 => $row['manufacturer'], 1 => $row['manufacturer']);
			$i++;
		}
		$config['items'] = array_merge($config['items'],$optionList);
		return $config;
	}
	
	
	function addModels($config) {
		$optionList = array();
		$result = $GLOBALS['TYPO3_DB']->exec_SELECTquery(
			'model',
			'cc_car_data',
			'manufacturer = "BMW"', // HIER MUSS DAS BMW ALSO DYNAMISCH SEIN UND AUS DEM ERGEBNIS DER METHODE ADDBRANDS KOMMEN
			'model',
			'',
			''
		);
		$i=1;
		while($row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($result)) {
			$optionList[$i] = array(0 => $row['model'], 1 => $row['model']);
			$i++;
		}
		$config['items'] = array_merge($config['items'],$optionList);
		return $config;
	}

XML des betroffenen FCE

<field_cc_brand type="array">
				<type>no_map</type>
				<tx_templavoila type="array">
					<title>Direkteinstieg - Marke</title>
					<sample_data type="array">
						<numindex index="0"></numindex>
					</sample_data>
					<etype>select</etype>
				</tx_templavoila>
				<tceforms type="array">
					<config type="array">						
                        <type>select</type>
                        <items type="array">
                        	<numindex index="0" type="array">
								<numindex index="0"></numindex>
								<numindex index="1"></numindex>
							</numindex>
                        </items>
                        <default>0</default>
                        <itemsprocfunc>tx_mbccdataimport_pi1->addBrands</itemsprocfunc>
					</config>
                    <onchange>reload</onchange>
					<label>Direkteinstieg - Marke</label>
				</tceforms>
			</field_cc_brand>
            <field_cc_model type="array">
				<type>no_map</type>
				<tx_templavoila type="array">
					<title>Direkteinstieg - Modell</title>
					<sample_data type="array">
						<numindex index="0"></numindex>
					</sample_data>
					<etype>select</etype>
				</tx_templavoila>
				<tceforms type="array">
					<config type="array">						
                        <type>select</type>
                        <items type="array">
                        	<numindex index="0" type="array">
								<numindex index="0"></numindex>
								<numindex index="1"></numindex>
							</numindex>
                        </items>
                        <default>0</default>
                        <itemsprocfunc>tx_mbccdataimport_pi1->addModels</itemsprocfunc>
					</config>
					<label>Direkteinstieg - Modell</label>
				</tceforms>
			</field_cc_model>

Ich wäre für jeden Ansatz und jede Hilfe äußerst dankbar 🙂
Max

BlackPixel ·

Naja, ich wkann mir denken was du möchtest. Ich würde das so erledigen:

Beim laden der Seite wird das erste Dropdown ausgefüllt angezeigt. Auf die options im Select legst Du ein onclick event. Wird ein option angeklickt wird ein ajaxrequest an eine registrierte eID Datei gestellt. Da wird die uid des Datensatzes übergeben. In der klasse für Dein ajax machst du dann lediglich eine DB abfrage mit der uid die übergeben wurde und schreibst alle kommenden options in das zweite select...

Gruß manfred