Zum Inhalt springen

Auf array innerhalb eines Objekts zugreifen und über Fluid ausgeben(ObjektStorage)

Erstellt am 31. Juli 2013 · 5 Antworten · letzte Antwort am 5. August 2013

Tags: Fluid, Frage

oliando ·

Hallo,

ich bin gerade dabei eine kleine Extension zu schreiben. Dabei handelt es sich um das Verwalten des Fußbereichs einer Webseite. Der Footer beinhaltet unterschiedliche Elemente wie Logo, einfacher Beschreibungstext und PartnerLogos, die verlinkt sein sollen. Dafür habe ich eine 1:n Relation aufgebaut. Also 1 Item das n Partnerlogos enthält.(Besteht aus Bildlink, Bildname, Bildtitel). Die Ausgabe funktioniert auch soweit, dass mir alle Angaben des Item ausgegeben werden, jedoch die Partnerlogos nicht, da diese in einem ObjetStorage innerhalb des Item Objekts liegen. Wie schaffe ich es auf die einzelnen Bestandteile der Partnerlogos zuzugreifen und diese über Fluid auszugeben?
Im Anhang habe ich einen Screenshot des debugten Item Objekts angehängt. Inhalte sind alle da, auch die Partnerlogos Objekte. Die Ausgabe funktioniert allerdings nicht.

Hat jemand eine Idee oder eine Lösung dafür? Irgendwie stehe ich auf dem Schlauch 🙂

Gruß
Oliando

Die Ausgabe des Item erfolgt:

<table  class="tx_sqsfooter" >
	<tr>
		<th><f:translate key="tx_sqsfooter_domain_model_item.desription" /></th>
		<th><f:translate key="tx_sqsfooter_domain_model_item.buttonlink" /></th>
		<th><f:translate key="tx_sqsfooter_domain_model_item.buttonlabel" /></th>
		<th><f:translate key="tx_sqsfooter_domain_model_item.headlinemiddle" /></th>
		<th><f:translate key="tx_sqsfooter_domain_model_item.linklistone" /></th>
		<th><f:translate key="tx_sqsfooter_domain_model_item.linklisttwo" /></th>
		<th><f:translate key="tx_sqsfooter_domain_model_item.headlineright" /></th>
	</tr>

	<f:for each="{items}" as="item">
	<f:debug>{item}</f:debug>
		<tr>
			<td>{item.description}</td>
			<td>{item.buttonlink}</td>
			<td>{item.buttonlabel}</td>
			<td>{item.headlinemiddle}</td>
			<td>{item.linklistone}</td>
			<td>{item.linklisttwo}</td>
			<td>{item.headlineright}</td>
		</tr>
	</f:for>
</table>

Die Ausgabe der Partnerlogos habe ich vergebens wie folgt erstellt:

<table  class="tx_sqsfooter" >
	<tr>
		<th><f:translate key="tx_sqsfooter_domain_model_partner.imagename" /></th>
		<th><f:translate key="tx_sqsfooter_domain_model_partner.image" /></th>
		<th><f:translate key="tx_sqsfooter_domain_model_partner.imagelink" /></th>
		<th> </th>
		<th> </th>
	</tr>

	
	<f:for each="{item.partner}" as="partner">
		<tr>
			<td>{item.partner.imagename}</td>
			<td>{item.partner.image}</td>
			<td>{item.partner.imagelink}</td>
		</tr>
	</f:for>
</table>

Beim debuggen über den VH ergab sich folgendes:

objektStorage.png

Unbekannter Benutzer ·
<f:for each="{item.partner}" as="partner">
<tr>
<td>{partner.imagename}</td>
<td>{partner.image}</td>
<td>{partner.imagelink}</td>
</tr>
</f:for>

Versuch das mal.

oliando ·

Vielen Dank für deinen Tipp. Habe ich getestet jedoch kommt folgender Fehler:

Cannot cast object of type "TYPO3\CMS\Extbase\Persistence\ObjectStorage" to string.

Habe in der for Schleife partner debugt wodurch mir folgender Fehler ausgegeben wird:

PHP Catchable Fatal Error: Object of class TYPO3\CMS\Extbase\Persistence\ObjectStorage could not be converted to string in /var/www/web336/html/dev/typo3temp/Cache/Code/fluid_template/Sqsfooter_Item_action_list_314bcdecee889b08bbc9c7e07fd6c862f0e1042b.php line 820

Woran könnte der Fehler liegen?

Unbekannter Benutzer ·

Schwer zu sagen, der gepostete Code sollte in Ordnung sein, wenn dein tatsächlicher Code nicht noch Leerzeichen/Tabs oder sowas irgendwo enthält und Du nicht mehr mit der Logoausgabe machst als die Zeilen die man hier sieht.

oliando ·

Wenn man den Wald vor lauter Bäume nicht sieht. Ich habe die zweite For-Schleife außerhalb der ersten gesetzt. Dann kann das ja nicht funktionieren.

Folgender Code funktioniert:

<table  class="tx_sqsfooter" >
	<tr>
		<th><f:translate key="tx_sqsfooter_domain_model_item.description" /></th>
		<th><f:translate key="tx_sqsfooter_domain_model_item.buttonlink" /></th>
		<th><f:translate key="tx_sqsfooter_domain_model_item.buttonlabel" /></th>
		<th><f:translate key="tx_sqsfooter_domain_model_item.headlinemiddle" /></th>
		<th><f:translate key="tx_sqsfooter_domain_model_item.linklistleft" /></th>
		<th><f:translate key="tx_sqsfooter_domain_model_item.linklistright" /></th>
		<th><f:translate key="tx_sqsfooter_domain_model_item.headlineright" /></th>
		<th> </th>
		<th> </th>
	</tr>

	<f:for each="{items}" as="item">
	<f:debug>{item}</f:debug>
		<tr>
			<td>{item.description}</td>
			<td>{item.buttonlink}</td>
			<td>{item.buttonlabel}</td>
			<td>{item.headlinemiddle}</td>
			<td>{item.linklistleft}</td>
			<td>{item.linklistright}</td>
			<td>{item.headlineright}</td>
		</tr>
		<f:for each="{item.partner}" as="partner">
		<f:debug>{partner}</f:debug>
			<tr>
				<td>{partner.imagename}</td>
				<td>{partner.image}</td>
				<td>{partner.imagelink}</td>
			</tr>
		</f:for>
	</f:for>

</table>

Kitsunet, vielen Dank für deine Hilfe!