Beispiel Datensätze:
Bild: design-and-style.de/…/localize.gif
Object ist ganz einfach verknüpft mit Category
Hat jemand ein Beispiel Query mit Lokalisierung?
Mit $GLOBALS['TSFE']->sys_page->getRecordOverlay komme ich hier nicht zurande...
Grüße, Alex
wüsste nicht warum es nicht mit getRecordOverlay funktionieren sollte. Beide Tabellen benutzen ja Felder im gleichen Record für die Lokalisierung.
Hier mein Versuch:
$this->languid = $GLOBALS["TSFE"]->tmpl->setup['config.']['sys_language_uid'] ? $GLOBALS["TSFE"]->tmpl->setup['config.']['sys_language_uid'] : 0;
$this->query = array();
$this->query['select'] = 'object.*, category.*';
$this->query['from'] = 'object LEFT JOIN category ON (object.category = category.uid)';
$this->query['where'] = '1 ' . $this->cObj->enableFields('object') . $this->cObj->enableFields('category');
$this->query['groupby'] = 'object.uid';
$this->query['orderby'] = '';
$this->query['limit'] = '';
$res = $GLOBALS['TYPO3_DB']->exec_SELECTquery ($this->query['select'], $this->query['from'], $this->query['where'], $this->query['groupby'], $this->query['orderby'], $this->query['limit']);
$num = $GLOBALS['TYPO3_DB']->sql_num_rows($res); // numbers of all entries
if ($res) { // If there is a result
while ($row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)) { // One loop for every tt_address entry
$row = $GLOBALS['TSFE']->sys_page->getRecordOverlay('object', $row, $this->languid, ($this->sys_language_mode == 'strict' ? 'hideNonTranslated' : ''));
$this->content .= $row['title']. '/' . $row['title_cat'] . '<br />';
}
}
Problem und Verständnismangel habe ich mit den mehreren Tabellen, die ich miteinander verknüpfe (derzeit mit einem Join)
das sieht für mich korrekt aus. Was stimmt denn nicht beim Ergebnis?
Was nicht funktioniert (ist auch logisch irgendwie) ist die korrekte Ausgabe der verknüpften Tabelle category
Ja, viel mir nach meinem Post auch auf.
Ich kann Dich beruhigen, es gibt noch kein Konzept für diese Abfrage mit Join, erst recht nicht für Workspaces.
Also bleibt nichts anderes übrig als die Tabellen einzeln abzufragen und den Overlay zu nutzen.
steffenk schrieb
Also bleibt nichts anderes übrig als die Tabellen einzeln abzufragen und den Overlay zu nutzen.
Das kann doch nicht sein? Ich habe eigentlich 6 oder 7 Kategorietabellen (hier der einfachheit nur eine Kategorie) - das wären dann ja extrem viele Queries?
Geht das ohne Join eventuell einfacher? Will den Code nicht unnötig aufblähen...
Ehrlich gesagt verstehe ich sowieso nicht warum man mit enableFields nicht auf Lokalisierung und Workspace eingehen kann (anderes Thema)...
Grüße, Alex
Die Sache ist einfach komplex.
Workspaces sind noch mal ein anderes Thema, aber auch hier gibt es overlays. enableFields() berücksichtigt die schon, aber auch das ist nicht "fertig"
Francois versucht diesen Missstand zu beseitigen, stöhnt aber aufgrund der Komplexität, es müssen ja alle Joins aufgedröselt werden und entsprechend der Language die entsprechenden Felder, die in TCA definiert sind gegen die Originalfelder ausgetauscht werden.
Wenn Du eine Idee hast oder Francois Suter unterstützen möchtest. sag ihm einfach Bescheid, sein Kontakt findest Du z.B. bei typo3.org unter sponsored projects
steffenk schrieb
Wenn Du eine Idee hast oder Francois Suter unterstützen möchtest...
Dazu muss ich erst Mal für mein eigenes Problem eine Idee haben 🙂
Mach einen Workarround: eine Funktion der Du die uid der Kategorie übergibst und die Dir den lokalisierten Titel zurückgibt, dann kannst Du auf den Join verzichten.
steffenk schrieb
Mach einen Workarround: eine Funktion der Du die uid der Kategorie übergibst und die Dir den lokalisierten Titel zurückgibt, dann kannst Du auf den Join verzichten.
Ja, klingt gut - so werde ichs machen, dank dir!
Habe das jetzt umgesetzt - X-Zeilen 🙁
ist doch mehr oder weniger c&p, oder?
soviel kanns doch nicht geben, aber klar, ist umständlicher, hat mehr SQL-Queries und auf Dauer keine schöne Lösung.
Habe nur ein ellenlanges SQL Query und fülle dann ein Array $row_category mit uid, pid und title und lasse dann dieses Array wieder überschreiben.
Und da ich mehrere Kategorien habe, zieht sich das etwas...
Aber du hast Recht - es funktioniert 😃
Also ein Join sollte eigentlich so funktionieren:.
$this->andWhere('uid' => '666');
$res = $GLOBALS['TYPO3_DB']->exec_SELECTquery(
'*,V.title VT,V.uid VU,S.title ST,S.uid SU,S1.uid S1U, S1.title S1T, S2.uid S2U, S2.title S2T',
'pages WA INNER JOIN pages V ON WA.pid=V.uid INNER JOIN pages S ON V.pid=S.uid INNER JOIN pages S1 ON S.pid=S1.uid INNER JOIN pages S2 ON S1.pid=S2.uid',
'S2.uid='.$GLOBALS['TYPO3_DB']->cleanIntList($parentUid).' AND WA.deleted=0 AND WA.hidden=0'.(count($this->andWhere)?' AND '.implode(' AND ',$this->andWhere):'').(count($this->orWhere)?' AND ('.implode(' OR ',$this->orWhere).')':''),
'S1.uid','WA.pid','');
[/quote]
Tetramatrix schrieb
Also ein Join sollte eigentlich so funktionieren:.
ok, und wo ist die lokalisierung bei dir?
Also, ich denke mal, dass die Lokalisierungs-Tabellen auch über das Parent-Child-Modell verfügen. Mit diesem join, den ich Dir genannt habe, kann man über 3-Unterkategorien eine Tabelle mit Parent-Child-Modell abfragen (Orignalsprache + Lokalisierung gibt bei meir 2 Unterkategorien). Da wird dann sicherlich auch Deine Lokalisierung dabei sein.
pages ist die einzige Stelle bei TYPO3 wo die Übersetzungen in einer anderen Tabelle liegen, daher wird Deine genannte Query keine Übersetzung liefern.
In anderen Tabellen wird man tatsächlich unter Einbeziehung der Language-Felder einen Join hinbekommen.
Francois Suter versucht eine Lösung dafür zu finden und hat eine Testextension geschrieben
http://www.sk-typo3.de/stuff/T3X_overlays-0_0_0-z-200809161259.t3x