[TYPO3-german] TCA: mm-Relation-Fragen
Stefan Padberg
post at bergische-webschmiede.de
Sat Aug 23 10:29:49 CEST 2014
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
More information about the TYPO3-german
mailing list