Hallo liebe Typo3 Gemeinde!
Hier eine kurze Schilderung der bestehenden Struktur für den "tt_products" Shop:
1. Zusätzliche Tabelle "tt_products_distributor" wurde installiert (Basis von Roland aka DJ.Picasso). Dort kann man zu jedem Produkt MEHRERE Hersteller eintragen.
2. Die neue Tabelle (tt_products_distributor) habe ich erweitert um die Spalte "image_distributor", in der nun zu jedem Hersteller MEHRERE Bilder gespeichert werden können.
3. Dann habe ich dem "Produkt 1" (Tabelle "tt_products", neue Spalte "distributor" ) zwei Hersteller zugeodnet, die jeweils zwei Bilder haben.
4. Gespeichert werden die Hersteller im Feld "distributor", Tabelle "tt_products" in Form von "1,2". Also mittels "uid" der Hersteller durch KOMMA getrennt / separiert.
5. Danach babe ich einen Marker angelegt "plugin.tt_products.marks.herstellerinfo" der nun zum "Produkt 1" alle Bilder der zugeordneten Hersteller ausgeben soll.
5.1. Die Ausgabe der Bilder funktioniert nur bedingt / komisch ...
Hier mein Ansatz für die Lösung des Problems mittels "outerWrap / split" (optionSplit):
Quelle: http://www.typo3wizard.com/de/artikel/das-content-objekt.html
I. Tabelle "tt_products" und "tt_products_distributor" im "join" zusammenlegen, um die Daten für die Zuordnung zu erhalen.
# CONTENT Objekt erstellen
temp.contentToSplit >
temp.contentToSplit = CONTENT
temp.contentToSplit {
table = tt_products_distributor
select {
pidInList = 10
join = tt_products ON (tt_products.distributor = tt_products_distributor.uid)
andWhere {
data = GPvar:tt_products|product
wrap = tt_products.uid = |
}
selectFields = tt_products_distributor.image_distributor, tt_products_distributor.uid, tt_products.distributor
}
renderObj = COA
renderObj {
# An jedes ausgelesene Elemen am Ende ###SPLITTER### anhängen
stdWrap.outerWrap = |,
10 = TEXT
10.field = distributor
10.wrap = |
20 = TEXT
20.field = image_distributor
20.wrap = |
}
}
temp.content = COA
temp.content {
# Den ausgelesenen Inhalt hierhin kopieren
10 < temp.contentToSplit
stdWrap.split {
# mit hilfe der split funktion ###SPLITTER### ersetzen.
token = ,
# die Reihenfolge im gewohnen optionSplit Stiel festlegen
cObjNum = 1 || 2 || 3 |*| 4 || 5 |*| 6 || 7
# Definieren wie genau an welcher position "gewrapt" wird
1.current = 1
1.wrap = <div style="clear:both;width:100px;">#1 |</div>
2.current = 1
2.wrap = <div style="clear:both;width:100px;">#2 |</div>
3.current = 1
3.wrap = <div style="clear:both;width:100px;">#3 |</div>
4.current = 1
4.wrap = <div style="clear:both;width:100px;">#4 |</div>
5.current = 1
5.wrap = <div style="clear:both;width:100px;">#5 |</div>
6.current = 1
6.wrap = <div style="clear:both;width:100px;">#6 |</div>
# letzten splitter leer lassen, da ist ja dann nichtsmehr
7.current = 1
}
}
plugin.tt_products.marks.herstellerinfo < temp.content
II. Bei dieser Variante erhalte ich folgende Ausgabe:
Zeile 1: 2
Zeile 2: 1Hersteller_2_Bild_1.jpg
Zeile 3: Hersteller_2_Bild_2.jpg
III. Erläuterung.
Zeile 1: hat Wert aus "tt_products" -> Spalte "distributor". (2 = Hersteller uid)
Zeile 2: hat Wert aus "tt_products" -> Spalte "distributor" und "tt_products_distributor" -> Spalte "distributor_image". (1 = Hersteller uid + Bild 1 zur Hersteller uid 2)
Zeile 3: hat Wert aus "tt_products_distributor" -> Spalte "distributor_image". (Bild 2 zur Hersteller uid 2)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Wie anfangs erwähnt, würde ich gerne zu jedem Produkt (mit einem oder mehreren Herstellern), die Bilder (eines oder mehrere) der Hersteller in diesem Marker ausgeben lassen.
Ich weis nicht, ob die Variante mittels optionSplit so elegant ist, evtl. gibt es bessere Möglichkeiten, aber mir fällt im Moment nix besseres ein. Ich bin für alle Vorschläge offen.
Mit freundlichem Gruß,
Robman