10.10.2012

TCA: sortby und default_sortby

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. ...

TCA: sortby und default_sortby

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',

),

)