Zum Inhalt springen

Bild-Wahl mit Checkboxen

Erstellt am 12. Juni 2012 · 5 Antworten · letzte Antwort am 20. Juni 2012

Tags: Bilder, Frage

chrickenh ·

Hallo,
ich habe hier ein Problem, weil ich zum ersten Mal mit If-Abfragen arbeiten muss und mir das Konzept nicht so recht einleuchtet.

Ich habe mit Templavoila ein FCE eingerichtet, der erstmal nur eine Checkbox beinhaltet sowie ein Element mit Element PresetTyposcript object path.
Wenn jetzt die Checkbox geklickt wird, dann soll ein Bild angezeigt werden.
Wenn sie nicht geklickt wird, dann ein anderes.

Mein TS ist bis jetzt nur Experimentierfeld, da komme ich nicht vorwärts.

## Medaillen
lib.field_htmlbild = IMAGE
lib.field_htmlbild {
	file = fileadmin/templates/medals/ida_off.jpg
	file {
		override = fileadmin/templates/medals/ida.jpg
		override.if {
    			value = Wert1
    			equals = Wert1
    		}
	}
   	
}

Die Idee war, das Objekt lib.field_htmlbild mit einem Bild zu füllen. Und falls das DB-Feld für die Checkbox true ist, das Bild mit einem anderen zu überschreiben.

Hoffentlich kann mir jemand helfen
Lieben Gruß
Chrickenh

Dies ist mein Datastructure-XML, vielleicht hilft es ja:

<?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>Select the HTML element on the page which you want to be the overall container element for the template.</description>
		</tx_templavoila>
		<type>array</type>
		<el type="array">
			<field_htmlbadge type="array">
				<tx_templavoila type="array">
					<title>HTML-check</title>
					<sample_data type="array">
						<numIndex index="0"></numIndex>
					</sample_data>
					<eType>check</eType>
					<TypoScript></TypoScript>
					<proc type="array">
						<int>0</int>
						<HSC>0</HSC>
						<stdWrap></stdWrap>
					</proc>
					<preview></preview>
				</tx_templavoila>
				<TCEforms type="array">
					<label>HTML-Badge</label>
					<config type="array">
						<type>check</type>
						<default type="integer">0</default>
					</config>
				</TCEforms>
			</field_htmlbadge>
			<field_htmlbild type="array">
				<tx_templavoila type="array">
					<title>htmlbild</title>
					<sample_data type="array">
						<numIndex index="0"></numIndex>
					</sample_data>
					<eType>TypoScriptObject</eType>
					<proc type="array">
						<int>0</int>
						<HSC>0</HSC>
						<stdWrap></stdWrap>
					</proc>
					<preview></preview>
					<TypoScriptObjPath>lib.field_htmlbild</TypoScriptObjPath>
				</tx_templavoila>
			</field_htmlbild>
		</el>
	</ROOT>
</T3DataStructure>
Julian.​Hofmann ·

Hallo.

die if-Abfragen sind tricky, aber mir scheint doch, dass Du es verstanden hast :-)

Problem dürfte eher sein, dass das override nicht greift. Kann das sein? denn file ist im IMAGE-Objekt vom Typ imgResource, welche IMHO keine stdWrap-Eigenschaft hat.

Viele Grüße
Julian

igorshmigor ·

Ich denke Julian hat recht.
Alternativ könntest Du es vielleicht in etwa so lösen:

## Medaillen
lib.field_htmlbild = COA
lib.field_htmlbild{
	10=IMAGE
	10 {
		file = fileadmin/templates/medals/ida.jpg
		stdWrap.if {
    			value = Wert1
    			equals = Wert1
    		}
	}
	20<.10
	20.file = fileadmin/templates/medals/ida_off.jpg
	20.stdWrap.if.negate=1
}
Julian.​Hofmann ·

Lieber ohne das "stdWrap.".

Denn bei Deinem TS wird das IMAGE-Objekt beide Male erzeugt (und ggf. via GIFBUILDER odgl. ist auch einiges zu tun), um danach via stdWrap für einen Fall verworfen zu werden.
Die reine if-Eigenschaft wird hingegen vor dem Verarbeiten geprüft, d.h. es findet nur eine Verarbeitung statt, wenn das Objekt auch wirklich Verwendung finden wird.

class tslib_content_Image extends tslib_content_Abstract {

	/**
	 * Rendering the cObject, IMAGE
	 *
	 * @param	array		Array of TypoScript properties
	 * @return	string		Output
	 */
	public function render($conf = array()) {
		if ($this->cObj->checkIf($conf['if.'])) {
			$theValue = $this->cObj->cImage($conf['file'], $conf);
			if (isset($conf['stdWrap.'])) {
				$theValue = $this->cObj->stdWrap($theValue, $conf['stdWrap.']);
			}
			return $theValue;
		}
	}

}
igorshmigor ·

Ach. Das hat mir meine O'Reilly TypoScript kurz&gut-Referenz gar nicht verraten, dass "if" auch direkt auf IMAGE angewandt werden kann. Vielleicht war das früher nicht so? Bei irgendeiner Version wurden ja viele Objekte nachträglich mit stdWrap-Funktionalitäten ausgestattet.

chrickenh ·

Hallo und vielen Dank für Eure Antworten.
Ich habe es jetzt ähnlich wie igorshmigor gelöst.
Damit wird zwar auch das IMAGE-Objekt zweimal erzeugt, aber im Rahmen des Projektes ist das kein Problem.
Es gibt maximal 16 User, die gleichzeitig darauf zugreifen. Also kein Thema.

Vielen Dank für Eure Hilfe
Chrickenh

## Medaillen
lib.field_html1_bild = COA
lib.field_html1_bild {
	5 = IMAGE
	5 {
	   file = fileadmin/templates/medals/html1.jpg
	   file.width = 150
	   file.height = 150
	}
	5.if.isTrue.field = field_html1_check
   	
	10 = IMAGE
	10 {
	   file = fileadmin/templates/medals/html1_off.jpg
	   file.width = 150
	   file.height = 150
	}
	10.if.isFalse.field = field_html1_check
   	
}