Hallo Hendrik,

vielen Dank fürs Mitdenken.

Den Weg über Kategorien zu gehen, finde ich nicht passend. Es sind ja keine Kategorien. Wie sollten die heißen? Das müsste ich ja vorher festlegen.

Der Vorschlag hingegen, eine Tabelle "Verwandte Produkte" hinzuzufügen, scheint mir sehr passend zu sein. Denn diese Beziehung ist offensichtlich keine klassische Relation im Sinne von "A hat B". Klassische Relationen kann man nicht umdrehen: "B hat A" würde keinen Sinn machen.

Aber in meinem Fall geht das. "A ist verwandt mit B" heißt automatisch "B ist verwandt mit A". Ich mache mir mal Gedanken zur Umsetzung.




Nochmal zurück zum TCA. Ich hatte mal in einem Projekt folgendes Szenario:

Es gab zwei Organisationstypen: Organisationen und Hilfsorganisationen, jeweils mit einer eigenen Tabelle/Repository. Die Relationen lauteten:

Org A "wird unterstützt von" HiOrg 1, HiOrg 2, HiOrg 3
Im Backend konnte man im Feld "Hilfsorganisationen" alle HiOrgs auswählen.

Der Weg zurück ging auch:
HiOrg 1 "unterstützt" Org. A, Org B, Org C
Auch hier konnte man im Backend im Feld "Unterstützte Organisationen" alle Orgs auswählen.

Und wenn man das getan hatte und schaute beim Datensatz von "Org A" nach, stand dort richtig "HiOrg 1" als Unterstützer.

Im vorliegenden Fall gibt es aber nur eine Tabelle für uid_local und für uid_foreign. Kann man den TCA so konfigurieren, dass er gleichzeitig beide Richtungen der Relation einträgt? Also wenn Prod1 "verwandt mit" Prod2 ist, sollte in der mm-Tabelle stehen:

uid_local | uid_foreign
1           2
2           1

Und beide Einträge sollten auch wieder gelöscht werden, wenn ich die Relation lösche.

Es gibt da so viele Felder im config-Array des select-Typen. Aber die Beschreibung ist so furchtbar knapp und nichtssagend. Ich hab das Gefühl, dass man damit mehr machen kann, als man denkt. Deshalb würde ich das gerne nochmal abklären, bevor ich den oben angedachten Weg gehe.

Was bewirken z.B.

MM_hasUidField
MM_insert_fields
MM_match_fields
MM_oppositeUsage

Jemand eine Idee? Kann man damit etwas machen im oben angedeuteten Sinn?

Beste Grüße
Stefan


Am 22.08.2014 um 21:31 schrieb Hendrik Reimers (KERN23.de):
Hey,

interessante Aufgabe, spontan wüsste ich auch nicht ob das tatsächlich
geht wie du es möchtest.

Alternativ würde ich eine Form von "Kategorien" einführen, sprich alle
Produkte einer Kategorie gehören zusammen. Setzt natürlich einen neuen
Datensatztypen voraus. Eine weitere Möglichkeit wäre natürlich ebenfalls
einen neuen Datensatztypen anzulegen namens z.B. "Gemeinsame Produkte",
wo du dann innerhalb dieses Datensatzes alle zusammenhängende Produkte
auswählst. Wobei ich zu der "Kategorie" (Alternative #1) tendiere.

Sollte es doch möglich sein wie du es benötigst, bin ich auf die Lösung
ebenfalls so sehr gespannt :-)

Grüße
Henny



Am 22.08.2014 20:04, schrieb Stefan Padberg:
Hallo,

ich habe da eine mehr konzeptionelle Frage an die TCA-Cracks -
vielleicht mal was zum Knobeln für regenreiche Wochenenden...puh

Ich habe eine Reihe von Produktdatensätzen. Es soll möglich gemacht
werden, dass zu jedem Produkt verwandte Produkte eingegeben werden
können.

Ich habe also ein Feld "relatedproducts" in die Datenstruktur für die
Produkte eingefügt und eine mm_Tabelle angelegt. Jetzt kann ich von
einem Produkt aus verwandte Produkte einpflegen.

Der Weg rückwärts geht aber nicht, denn ich erwarte natürlich, wenn
Produkt A Produkt B und Produkt C als verwandte Produkte hat, dass
Produkt A bei B und C jeweils auch als verwandtes Produkt auftaucht.

In der mm-Tabelle steht quasi

uid_local | uid_foreign

1           2
1           3

Das Feld relatedproducts ist per TCA so konfiguriert, dass es von nur
uid_local ausgeht. Es müsste aber gleichzeitig auch von uid_foreign
ausgehen. Und ich vermute, dass das nicht geht.

Mache ich da einen Denkfehler? Oder weiß ich nur nicht, wie man das Feld
richtig konfiguriert?


Mein TCA-config für das Feld sieht so aus:

     'config' => array(
         'type' => 'select',
         'foreign_table' => 'tx_products_domain_model_product',
         'foreign_table_where' => ' AND
tx_products_domain_model_product.sys_language_uid=0 ORDER BY
tx_products_domain_model_product.name',
         'MM' => 'tx_products_product_relatedproduct_mm',
         'MM_opposite_field' => 'relatedproducts',
         'size' => 10,
         'minitems' => 0,
         'autoSizeMax' => 30,
         'maxitems' => 9999,
         'multiple' => 1,
     ),

(Das mit der sys_language_uid ist noch ein zweites Problem: es werden
alle Datensätze zur Auswahl gestellt, sowohl die originalen als auch die
übersetzten. Und die Relation, die ich im Original-Datensatz eingebe,
wird leider nicht für die übersetzten Datensätze übernommen. Dafür
brauche ich auch noch eine Lösung... Mit der obigen Where-Klausel
filtere ich zumindest mal die übersetzten Datensätze behelfsmäßig raus.
Aber wie ich TCA kenne, gibt es dafür bestimmt eine bessere Lösung. )

Ich freue mich auf ein paar inspirierende Gedanken.

Beste Grüße
Stefan












--
Bergische Webschmiede
Typo3 Dienstleistungen
:: Dipl.-Ing. Stefan Padberg
:: www.bergische-webschmiede.de

---
Diese E-Mail ist frei von Viren und Malware, denn der avast! Antivirus Schutz 
ist aktiv.
http://www.avast.com

_______________________________________________
TYPO3-german mailing list
TYPO3-german@lists.typo3.org
http://lists.typo3.org/cgi-bin/mailman/listinfo/typo3-german

Antwort per Email an