Zum Inhalt springen

Sorting Problem bei Datensätzen... aber nur bei Templa Voila.

Erstellt am 27. September 2007 · 9 Antworten · letzte Antwort am 1. Oktober 2007

Tags: Datenbank, Frage

ManuP ·

Hallo alle miteinander,

ich habe eine kleine Extension geschrieben.
Dabei habe ich auch den Befehl "ORDER BY sorting" drin.
Leider zieht die Funktion nicht und er ordnet auch nicht.
Sobald ich die Extension in einer anderen TYPO3 Installation ausprobiere geht das Sortieren.
Bei einer älteren Extension, wo die Sortierungsfunktion funktionierte, tritt das selbe Problem auf.
Dachte erst das es an der Version lag. Mittlerweile haben aber beide TYPO3-Installationen die selbe Version.
Die eine Version läuft allerdings mit Voila.
Die anderen basiert noch auf den subparts/marker-Prinzip.

Kann mir vielleicht jemand sagen, woran das liegen könnte?

Folgende Version: TYPO3 4.1 mit Templa Voila 1.1.1

Bin für jede Hilfe dankbar #angry#

Winddancer ·

meinst Du die Sortierung im Frontend oder im Backend?

Im Frontend sollte die Sortierung analog zu der Listenansicht des Backend sein.

Hast Du Dir mal via phpmyadmin die Tabelle angesehen und die Ausgabe damit verglichen?

ManuP ·

Hi Winddancer,

also ich meine die Sortierung im Frontend.
Möchte über die Pfeile im Backend selbst die Sortierung fürs Frontend festlegen.
Die Angabe in der DB stimmt mit der Sortierung im Backend [sorting] überein.

Es sind zurzeit drei Einträge:

In der DB steht folgendes
sorting = 1152
sorting = 768
sorting = 1536

Im Backend bei dem Modul List folgendes
sorting = 1152
sorting = 768
sorting = 1536

Im Frontend gibt er folgendes aus
sorting = 768
sorting = 1152
sorting = 1536

Er sortiert als aufsteigend im Frontend.
Wie kann ich ihn überreden nach "SORTING BY sorting" zu ordnen.
Wie gesagt. Bei dem anderen TYPO3-System ohne Voila funktioniert die Erweiterung.
(Selber Server mit selben Einstellungen)

Es muss also intern liegen?!?
Danke für jede Hilfe 🙂

Winddancer ·

hmm...

also wenn ich das jetzt richtig verstanden habe, dann sortiert er deiner Meinung nach falsch im Frontend.

Allerdings sieht:

sorting = 768
sorting = 1152
sorting = 1536

für mich korrekt aus und wäre in der Abfrage wie 'ORDER BY sorting ASC' das sollte auch in deiner Extension in der Datenbankabfrage stehen. Wenn Du das nach den Coding Guidelines machst, könnte das so aussehen:

$res = $GLOBALS['TYPO3_DB']->exec_SELECTquery(
                '*',         // SELECT ...
                'mytable',     // FROM ...
                'uid=123 AND title LIKE "%blabla%"',    // WHERE...
                '',            // GROUP BY...
                'sorting ASC',    // ORDER BY...
                '5,10'            // LIMIT to 10 rows, starting with number 5 (MySQL compat.)
            );

(siehe Referenz: http://typo3.org/documentation/document-library/core-documentation/doc_core_cgl/4.1.0/view/1/4/)

So wie ich Dein Post verstanden habe, ist aber die Anzeige im Backend falsch.
sorting = 1152
sorting = 768
sorting = 1536

Dann musst Du darauf achten, was Dein "default order by" ist. Steht glaub ich in der ext_table.php bzw. einfacher über den Kickstarter falls Du den benutzt.

Du kannst im Backend Listenmodus auch explizit nach "sorting" sortieren lassen (sollte denn eine andere Sortierung ausgewählt sein). Dazu musst Du das Feld "sorting" einblenden und es anklicken.

hoffe das hilft Dir irgendwie!

Grüße

Sven

ManuP ·

Guten Morgen Sven,

ich will es im Frontend so anzeigen lassen, wie ich es im Backend ordne.
Im Backend kann ich es auch ordnen... manuell mit den Pfeilen.

Ich habe nun auch das Problem gefunden... nun muss ich es nur noch beheben.
Es liegt an der Sprache.
Wenn ich auf Default L=0 schalte, ordnet er es im Frontend so an wie ich es in Backend einstelle mit dem Pfeilen.
Allerdings zeigt er nur Inhalt an, wenn ich eine lokalisierte Version davon habe.

Also wie folgt zur besseren Erklärung:

1. Standarddatensatz im Backend erstellt.
2. Seite wird über Parameter L=5 (deutsch) oder L=0 (standard) aufgerufen. Da zeigt er allerdings keinen Inhalt an.
3. Lokalisierte Version im Backend für Deutsch erstellt. Jetzt zeigt er sowohl für L=0 als auch L=5 Inhalt an. Bei L=0 ordnet er, bei L=5 nicht.
Ich benötige aber die geordnete Version für L=5.

Verstanden?

Vielleicht kannst du mir helfen.

P.S. Deshalb hat es auch in der anderen Installation von Anhieb funktioniert.
Die ist nur einsprachig.

Danke... #giggle#

Winddancer ·

muahhh...

ok ich versuchs mal 😉

Wenn Du eine lokalisierte Version hast, wird diese ja als eigener Datensatz gespeichert. Ergo haben diese Datensätze auch ein eigenes Sorting. Stimmt das sorting bei den lokalisierten Datensätzen?

Falls ja, stimmt die Query für die lokalisierte Anzeige?
Hau das mal in Deine Extension hinter die entsprechende Abfrage, um zu sehen, was er da an die DB schickt.

die($GLOBALS['TYPO3_DB']->debug_lastBuiltQuery);

Ich vermute mal, dass er aufgrund der Lang Variable die Query so verändert, dass das Sorting nicht mehr passt.

ManuP ·

Hi Sven,

leider sind meine PHP-Kenntnisse nur begrenzt.
Ich habe folgende Abfrage zur Anzeige der Daten:

$query = "SELECT tx_xxx_db.wert1, tx_xxx_db.wert2 FROM tx_xxx_db WHERE pid='".$GLOBALS["TSFE"]->id."' ".$this->cObj->enableFields('tx_xxx_db')." AND sys_language_uid='".$GLOBALS['TSFE']->sys_language_content."' ORDER BY sorting";

Wenn ich bei sys_language_uid die 0 eingebe, zeigt er den default-Content an und ordnet ordentlich.
Bei der 5 (für deutsch) zeigt er den übersetzten Content (Lokalisierung) an, ordnet aber nicht analog 0 (default).
Nun weiß ich aber nicht wie ich sorting auf language_uid abfragen kann :o

Vielleicht kannst du einen Tipp geben,
danke dir.

P.S. Also er soll einfach nur die sortierte Variante in der Sprache anzeigen, sich bei der Sortierung aber an default richten.

Winddancer ·

hmmm... ich habe jetzt nicht nachgeguckt, aber was liefert denn die ... ->sys_language_content zurück? die ID der Sprache?

In der tt_news extension wird das Beispielsweise noch anders gehandelt:

// get the translated record if the content language is not the default language
if ($GLOBALS['TSFE']->sys_language_content) {
        $OLmode = ($this->sys_language_mode == 'strict'?'hideNonTranslated':'');
        $row = $GLOBALS['TSFE']->sys_page->getRecordOverlay('tt_news', $row, $GLOBALS['TSFE']->sys_language_content, $OLmode);
}

Um zu sehen wie fertig geschrieben DB Abfrage aussieht, füg nach deinem Codestring mal:

die($query);

ein.

Jag das mal durch phpmyadmin oder co und guck Dir die Ergebnisse an.

ManuP ·

Hi Sven,

die sys_language_uid liefert die ID der Sprache zurück.
Habe es auch schon hinbekommen, dass immer nur die Sprache angezeigt wird, die verfügbar ist. Leider ordnet er immer noch nicht in der Sprache nach den Vorgaben im Backend. Er ordnet da nach dem sorting-Wert der Sprache, aufsteigend.

Also z. b. bei der default-Sprache steht
[Record 1] = sorting=12
[Record 2] = sorting=15
[Record 3] = sorting=24

Im Frontend steht folgendes:

[Record 1]
[Record 2]
[Record 3]

Ist ja richtig so. Wenn ich jetzt die Records verschiebe ändert er den Wert für sorting dementsprechend ab und sortiert korrekt.

Bei der Übersetzung legt er einmal den Wert für sorting fest und bleibt dabei:
Z. B. im Backend...
[Record 1] = sorting=18
[Record 2] = sorting=9

und im Frontend dann die Reihenfolge:
[Record 2]
[Record 1]

Kann ich irgendwie auf den Wert sorting Einfluss nehmen.
Also die Abfrage lautet ja ORDER BY sorting.
Kann ich irgendwie ORDER BY sorting=sys_language_uid=0 eingeben?

Da fällt mir leider keine Lösung ein da meine PHP und MySQL-Kenntnisse begrenzt sind.

Danke dir.

ManuP ·

Hi,

habe es mit dem "Sortieren" gelöst.
Es lag an der Anzeigesprache... aber das nächste Problem ist gleich da.

siehe hier #68739.
Vielleicht kann jemand helfen.

Ciaoi der Manu.