Sie befinden sich hier: Typo3 / Tipps / FCE mit Adressauswahl
Deutsch
English
Sonntag, 24.06.2018

FCE mit Adressauswahl aus tt_address-Datensätzen

Wenn man aus einer FCE direkt auf die Adress-Datensätze von tt_address zugreifen möchte, ist folgende Anleitung sehr hilfreich.

Zunächst der Code für das FCE:

XML
<?xml version="1.0" encoding="iso-8859-1" standalone="yes" ?>
<T3DataStructure>
        <meta type="array">
                <langDisable>1</langDisable>
        </meta>
        <ROOT type="array">
                <tx_templavoila type="array">
                        <title>ROOT</title>
                        <description>Wählen Sie das HTML-Element der Seite, das Sie als übergeordnetes Container-Element der Vorlage möchten.</description>
                </tx_templavoila>
                <type>array</type>
                <el type="array">
                        <field_address type="array">
                                <tx_templavoila type="array">
                                        <title>ADDRESS</title>
                                        <sample_data type="array">
                                                <numIndex index="0"></numIndex>
                                        </sample_data>
                                        <eType>TypoScriptObject</eType>
                                        <TypoScriptObjPath>lib.address</TypoScriptObjPath>
                                </tx_templavoila>
                                <TCEforms type="array">
                                        <config type="array">
                                                <type>select</type>
                                                <foreign_table>tt_address</foreign_table>
                                                <minitems>0</minitems>
                                                <maxitems>1</maxitems>
                                        </config>
                                        <label>Adressauswahl</label>
                                </TCEforms>
                        </field_address>
                </el>
        </ROOT>
</T3DataStructure>

Hier der Beispiel-Typoscript-Code:

TypoScript
addressObj = COA
addressObj {
        10 = TEXT
        10 {
                field = name
                wrap = <strong> | </strong><br>
        }
               
        20 = TEXT
        20 {
                field = email
        }
}

lib.address = RECORDS
lib.address {
        tables = tt_address
        source.current = 1
        conf.tt_address < addressObj
}

Beim Remap funktioniert leider aber das "Local processing" nicht, so dass man die XML Struktur jedes Mal neu von Hand ändern muss, da der TCEforms-Abschnitt beim Remap überschrieben wird.

Ausserdem werden die Adressdatensätze auf diese Weise nach ihrer uid sortiert. Wie eine andere Sortierung realisierbar ist, ist mir noch nicht klar.

Quelle: http://www2.typo3.net/forum/list/list_post//81179/?page=1#pid343197

Ein weiteres etwas komplexeres Beispiel

Für die AWO-Website wurde ein FCE realisiert, das die tt_address-Angaben zu mehreren Personen unter einer Gruppe auflistet. Der XML-Code des FCE ist daher etwas komplexer als in obigem Beispiel:

XML
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<T3DataStructure>
	<meta type="array">
		<langDisable>1</langDisable>
	</meta>
	<ROOT type="array">
		<tx_templavoila type="array">
			<title>ROOT</title>
			<description>Wählen Sie das HTML-Element der Seite, das Sie als übergeordnetes Container-Element der Vorlage möchten.</description>
		</tx_templavoila>
		<type>array</type>
		<el type="array">
			<field_groupheader type="array">
				<tx_templavoila type="array">
					<title>Personalgruppen-Name</title>
					<description><![CDATA[Map to <h1>]]></description>
					<sample_data type="array">
						<numIndex index="0">[Personalgruppe]</numIndex>
					</sample_data>
					<eType>input</eType>
					<tags>h1</tags>
					<proc type="array">
						<HSC type="integer">1</HSC>
					</proc>
				</tx_templavoila>
				<TCEforms type="array">
					<config type="array">
						<type>input</type>
						<size>48</size>
						<eval>trim</eval>
					</config>
					<label>Personalgruppen-Name</label>
				</TCEforms>
			</field_groupheader>
			<field_addressensektion type="array">
				<type>array</type>
				<section>1</section>
				<tx_templavoila type="array">
					<title>Adressen Sektion</title>
					<description><![CDATA[Map to <div class="adresse">]]></description>
					<eType>input</eType>
				</tx_templavoila>
				<el type="array">
					<field_addresscontainer type="array">
						<type>array</type>
						<tx_templavoila type="array">
							<title>Adressen Container</title>
							<description><![CDATA[Map to <dl>]]></description>
							<eType>input</eType>
							<tags>dl</tags>
						</tx_templavoila>
						<el type="array">
							<field_person type="array">
								<tx_templavoila type="array">
									<title>Person</title>
									<description><![CDATA[Map to <dl>]]></description>
									<sample_data type="array">
										<numIndex index="0">[Person]</numIndex>
									</sample_data>
									<eType>TypoScriptObject</eType>
									<tags>dl</tags>
									<TypoScriptObjPath>lib.address</TypoScriptObjPath>
								</tx_templavoila>
								<TCEforms type="array">
									<config type="array">
										<type>select</type>
										<foreign_table>tt_address</foreign_table>
										<minitems>0</minitems>
										<maxitems>1</maxitems>
									</config>
									<label>Adressauswahl</label>
								</TCEforms>
							</field_person>
						</el>
					</field_addresscontainer>
				</el>
			</field_addressensektion>
		</el>
	</ROOT>
</T3DataStructure>

Der Typoscript-Code zu diesem Beispiel ist ebenfalls komplexer, da neben den Addressdaten auch ein Foto ausgegeben wird. Sofern kein Foto vorhanden ist, wird ein grauer Rahmen ausgegeben. Ausserdem wird abhängig vom Feld user_ttaddress_ext_image_border die Ausgabe des Fotos mit einem Rahmen ausgegeben, wobei dabei das Bild um die 2px kleiner skaliert wird, die der Rahmen benötigt.

TypoScript
addressObj = COA
addressObj {
	1 = COA
	1 {
		// Wenn das Feld "address_type" dem Wert "0" (=Person) entspricht
		if {
			value.field = user_ttaddress_ext_address_type
			equals = 0
		}

		wrap = <dt> | </dt>

		// Bild ausgeben, falls vorhanden
		10 = IMAGE
		10 {
			file.import = uploads/pics/
			file.import.field = image
			file.import.listNum = 0
			file.width = 120
			// Bildbreite verringern, falls ein Rahmen herumgelegt werden soll
			file.width {
				override = 118
				override.if {
					value.field = user_ttaddress_ext_image_border
					equals = 1
				}
			}
			file.maxH = 150
			params = 
			// Parameter für IMG ausgeben, falls ein Rahmen herumgelegt werden soll
			params {
				override = class="border"
				override.if {
					value.field = user_ttaddress_ext_image_border
					equals = 1
				}
			}
			altText.field = name
			titleText.field = name
			wrap = |
			field = image
			if.isTrue.field = image
		}
		// Grauer Bildrahmen ausgeben, falls kein Foto vorhanden
		11 = IMAGE
		11 {
			field = image
			if.isFalse.field = image
				
			file = GIFBUILDER
			file {
				XY=120,150
				backColor = #cccccc
				10 = TEXT
				10 {
					text = Ohne Foto
					fontSize = 12
					fontColor = #000000
					align = center
					offset = 0,75
				}
			}
//			altText.field = name
			wrap = |
		}
	}

	2 = COA
	2 {
		wrap = <dd> | </dd>
		100 = TEXT
		100 {
			// Nur ausgeben, wenn das Feld "address_type" dem Wert "1" (=Company) entspricht
			if {
				value.field = user_ttaddress_ext_address_type
				equals = 1
			}
			if.isTrue.field = company
			field = company
			wrap = <h5> | </h5>
		}
		110 = TEXT
		110 {
			// Nur ausgeben, wenn das Feld "address_type" dem Wert "0" (=Person) entspricht
			if {
				value.field = user_ttaddress_ext_address_type
				equals = 0
			}
			field = name
			wrap = <strong> | </strong><br />
		}
		120 = TEXT
		120 {
			// Nur ausgeben, wenn das Feld "address_type" dem Wert "0" (=Person) entspricht
			if {
				value.field = user_ttaddress_ext_address_type
				equals = 0
			}
			if.isTrue.field = title
			field = title
			wrap = |<br>
		}
		130 = TEXT
		130 {
			if.isTrue.field = address
			field = address
			wrap = |<br>
		}
		140 = TEXT
		140 {
			if.isTrue.field = zip
			field = zip
			wrap = |&nbsp;
		}
		150 = TEXT
		150 {
			if.isTrue.field = city
			field = city
			wrap = |<br />
		}
		160 = TEXT
		160 {
			if.isTrue.field = phone
			field = phone
			wrap = |<br />
		}
		170 = TEXT
		170 {
			if.isTrue.field = fax
			field = fax
			wrap = |<br />
		}
		180 = TEXT
		180 {
			if.isTrue.field = email
			field = email
			typolink.parameter.field = email
			wrap = |<br />
		}
		190 = TEXT
		190 {
			field = user_ttaddress_ext_second_email
			typolink.parameter.field = user_ttaddress_ext_second_email
			wrap = |
		}
	}
}

lib.address = RECORDS
lib.address {
        tables = tt_address
        source.current = 1
        conf.tt_address < addressObj
}