[TYPO3-german] Re: Re: Extbase und eigene SQL-Abfragen für m:m.related tables
Robert Wildling
rowild at gmx.net
Mon Aug 12 16:12:46 CEST 2013
Hallo, lieber Christian,
Danke für deine Mithilfe!!!
Mit folgendem TypoScript klappt's:
lib.MENU_COUNTRIES = CONTENT
lib.MENU_COUNTRIES {
table = tx_kofomi_domain_model_persons
select {
pidInList = 45
selectFields = tx_kofomi_domain_model_persons.nationality,
static_countries.uid, static_countries.cn_iso_2,
static_countries.cn_short_de
leftjoin = static_countries ON
(tx_kofomi_domain_model_persons.nationality = static_countries.uid)
where = tx_kofomi_domain_model_persons.nationality != 0
groupBy = tx_kofomi_domain_model_persons.nationality
orderBy = static_countries.cn_short_de
}
renderObj = COA
renderObj {
10 = TEXT
10.dataWrap = <li><a href="#filter-nationality-{field:cn_iso_2}"
data-filter-value=".{field:cn_iso_2}"
title="{field:cn_short_de}">{field:cn_short_de}
<small>({field:cn_iso_2})</small></a></li>
}
}
Die pidInList war ein wichtiger Hinweis von dir, denn die muss für die
Personen-Tabelle stimmen, nicht für die static_countries!
Meinerseits hab ich Blödsinn verzapft, als ich von m:m-Relation
gesprochen habe. Die gibt es nicht, es ist nur ein Mehrfach-Auswahlfeld.
Sorry!
Was bei mir Fehler macht, sind "AS"-Zuweisungen in sql-Statement,
deswegen ist alles ausgeschrieben. Mir ist das Problem bewusst, vor
allem im Zusammenhang mit dem "sorting"-Feld, wo dann schnell man ein
Fehler geworfen wird. Aber das Ansprechen von Feldern mit
Tabellen-"Vorsilbe" innerhalb des renderObj funktioniert bei mir nicht -
sollte das deiner Meinung nach gehen?
Also zB:
{field:stytic_countries.cn_short_de}
vs
{field:cn_short_de}
im renderObj-Abschnitt.
Öder könnte das ein bug sein???
Und zu letzt zu Extbase:
Wenn das mit dem m:m jetzt wegfällt und nur einfach auf die static-info
zugegriffen werden soll, ist die dann ein Weg bekannt?
Danke nochmals!
Gruß, Robert
> Am 10.08.13 17:12, schrieb Robert Wildling:
>
> Hallo Robert,
>
> > Folgende Situation (Extbase 6.1, TYPO3 CMS 6.1.3, php 5.4.10):
>> Eine Tabelle "tx_kofomi_domain_model_persons" hat beim Feld
>> "nationality" eine m:m-Relation zu static_info_tables. (Die Person kann
>> mehrere Nationalitäten besitzen.) Am Kopf der Seite soll ein Menü gebaut
>> werden, dass die Länder, die in Verwendung sind, als Dropdown-Liste
>> anzeigt (bei Auswahl eines Landes greift dann ein Isotopes-Script und
>> filtert die Anzeigt.)
>>
>> Ich will das mit TypoScript lösen, aber sobald ich ein leftjoin einbaue,
>> funktioniert das nicht mehr. Das ist das Script:
>>
>>
>> lib.MENU_COUNTRIES=CONTENT
>> lib.MENU_COUNTRIES{
>> table=tx_kofomi_domain_model_persons
>> select{
>> selectFields=tx_kofomi_domain_model_persons.nationality,static_countries.cn_short_de
>>
>> leftjoin=static_countriesON(tx_kofomi_domain_model_persons.nationality=static_countries.uid)
>>
>> #where = static_countries.deleted=0 AND static_countries.hidden=0 AND
>> tx_kofomi_domain_model_persons.deleted = 0 AND
>> tx_kofomi_domain_model_persons.hidden=0
>> groupBy=tx_kofomi_domain_model_persons.nationality
>> pidInList = 0
>> #orderBy = cn_short_de
>> }
>> renderObj=COA
>> renderObj{
>> 10=TEXT
>> 10.dataWrap=<li>{field:static_countries.cn_short_de}</li>
>> }
>> }
>
> [schnipp]
>
>> Kann mir jemand erklären, warum das mit TS nicht geht? Ich weiß, dass
>> TS-select-Abfragen nicht funktionieren, wenn kein pidInList angegeben
>> wird, weswegen im angegebenen Abschnitt ein pidInlist angegeben wird...
>> Auch stellt sich mir die Frage, wie im renderObj ein Feld angesprochen
>> wird, wenn man mit m:m-Tabellen arbeitet - mit dem Tabellennamen vorm
>> Feld? Dazu finde ich absolut gar keine Dokumentation und auch keine
>> Beispiele. (Das renderObj zu Debug-Zwecken einfach nur mit einem
>> value=Test zu ersetzen, erzeigt übrigens auch keine Ausgabe...)
>
> Das bei Verwendung von value=Test nichts ausgegeben wird, sagt uns
> schon mal, daß die Abfrage kein Ergebnis liefert. Mit pidInList = 0
> bekommst du natürlich nur Datensätze zurück, wenn auch die Einträge
> für tx_kofomi_domain_model_persons auf der Seite mit der ID 0 liegen.
>
> Insgesamt wundere ich mich etwas über die verwendeten Tabellen. In
> tx_kofomi_domain_model_persons stehen die Personen und in
> static_countries die Länder. Dann fehlt hier für eine n:m-Situation
> aber die Verknüpfungstabelle, oder steh ich gerade auf dem Schlauch?
>
> Die Felder sprichst du normal über ihre Namen an. Problematisch wird
> das, wenn Feldnamen doppelt vorkommen, weil dann nur das Feld einer
> der Tabellen zugänglich ist. In solchen Fällen sollte die Verwendung
> von AS im Parameter selectFields helfen. Im vorliegenden Fall sollte
> aber folgendes gehen:
>
> 10.dataWrap = <li>{field:cn_short_de}</li>
>
>> Und schließlich: Kann man dieses Problem auch mit Extbase selbst lösen?
>> Sprich: ist es möglich, im Controller "Person" in der listAction eine
>> Funktion einzubauen, die dieses Ländermenü bastelt? Meine Versuche, im
>> Repository bzw. im Controller eine Funktion zu bauen, die auf eine
>> Tabelle und deren Inhalt außerhalb des eigenen Objekts zuzugreifen
>> versucht, sind bislang gescheitert. Und TYPO3 v4
>> $GLOBALS[''].exec_SELECTquery ... möchte ich (noch) nicht verwenden,
>> weil es darum geht, Extbase und TYPO3 6.1 zu lernen.
>
> Bei Extbase und n:m schnalle ich derzeit auch noch ab. :-(
>
> Gruß
> Christian
More information about the TYPO3-german
mailing list