TCA: sortby und default_sortby

10. Oktober 2012 von Christoph Buchli Veröffentlicht unter Know-how/Tipps&Tricks, Wartung & Support Verschlagwortet mit

Es ist manchmal schön, wenn man Records sortieren kann. Hierzu gibt es diverse Möglichkeiten, die nächstliegende wird wohl sein, im TCA der Extension das zu sortierende Feld anzugeben. Hier gibt es die beiden Optionen des „ctrl“-Arrays: „sortby“ und „default_sortby“. Ich möchte den Unterschied kurz erklären.
Hinweis: Grundsätzlich steht alles, was in diesem Blogpost steht, auch in der Core-Doku:
http://typo3.org/documentation/document-library/core-documentation/doc_core_tca/4.7.1/view/1/3/#id581956
Da ich es aber bei einem kurzen Check diverse Extensions gefunden habe, welche diese Settings falsch verwenden, möchte ich diese Zeilen der ext_tables.php etwas genauer erläutern.

sortby

Mit sortby wird ein Feld definiert, welches von TYPO3 grundsätzlich nach Belieben überschrieben werden kann und einzig und allein der Sortierung dient. TYPO3 überschreibt dieses Feld beispielsweise beim neu Anlegen eines IRRE-Records, wenn man einen Record über „Create new record after this record“ anlegt, oder wenn man mit den Pfeilen im Listenmodul Records sortiert. (Daher tauchen diese Pfeile auch nur dann auf, wenn das die sortby-Option angegeben ist…).

Die ’sortby‘-Option ist also absolut ungeeignet, um beispielsweise Records nach ihrem crdate oder nach ihrem Namen etc. zu sortieren. Hier dürfen wirklich nur Felder eingetragen werden, welche ausschliesslich zum Sortieren benützt werden.

default_sortby

Die Option „default_sortby“ wird nur dann berücksichtigt, wenn für die Tabelle kein sortby angegeben ist. In dieser Option kann ein SQL-Statement angegeben werden, welches als „ORDER BY“-Teil an den SELECT angehängt wird. Dieses Feld wird von TYPO3 nur gelesen und dient dazu, die „natürliche“ Sortierreihenfolge der Records im Backend anzugeben. Beispielsweise, wenn man User nach Nachnamen, Vornamen und dann Erstelldatum aufsteigend sortieren möchte, sieht default_sortby so aus: „ORDER BY name,firstname,crdate ASC“.
Das „default“ steht übrigens hier, weil in der Table-View über klicken auf den Spaltennamen die Records beliebig sortiert werden können.

Beispiele

Nachdem nun jeder weis, wie diese Felder funktionieren, habe ich euch hier einige konkrete Beispiele aus der Konfiguration von Extension. Keines dieser Beispiele ist erfunden, ich habe das alles so angetroffen:

ACHTUNG: Diese Beispiele dienen der Illustration, wie es eben nicht gemacht werden darf. Entsprechend dem eben gelesenen Blog-Beitrag können sie als Quiz dienen, herauszufinden, was genau an den einzelnen Beispielen falsch ist.

$TCA[‚tx_something‘] = array(
‚ctrl‘ => array (
’sortby‘ => ‚crdate‘,
),
)

 

$TCA[‚tx_something‘] = array(
‚ctrl‘ => array (
’sortby‘ => ’sorting‘,
‚default_sortby‘ => ‚ ORDER BY name,sorting DESC‘,

),
)

 

$TCA[‚tx_something‘] = array(
‚ctrl‘ => array (
’sortby‘ => ‚lowerLimit‘,
),
)

 

Und mein Liebling:

$TCA[‚tx_something‘] = array(
‚ctrl‘ => array (
’sortby‘ => ‚uid‘,
),
)

 

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

4 Gedanken zu “TCA: sortby und default_sortby

  1. Gute Beschreibung, die Beispiele 1, 3 und 4 jedoch sind fatal:
    – Wie oben korrekt beschrieben, dürfen für sortby nur Felder angegeben werden, die „ausschliesslich zum Sortieren“ benutzt werden und von TYPO3 beliebig überschrieben werden dürfen. Das trifft bei der uid auf keinen Fall zu (würde überschrieben und somit jegliche Verknüpfungen zerstört!), ebenso wenig crdate und lowerLimit. Hier muss zwingend default_sortby verwendet werden. 🙂
    – Zudem wird da genau das vorgeschlagen, von dem oben steht, dass es absolut ungeeignet sei (sortby crdate).

    • Hallo Beno
      Möglicherweise ist es etwas zu wenig klar ersichtlich aus dem Artikel:
      Diese vier Beispiele sollen in der Tat angeben, wie man es genau NICHT machen darf. Sie dienen der Veranschaulichung, was für Missverständnisse zum Thema herumgeistern.

      Ich werde den Post entsprechend anpassen, damit dies klarer wird.

      Grüsse,
      Christoph