Zum Inhalt springen

IRRE und Sortierung

Erstellt am 23. September 2011 · 6 Antworten · letzte Antwort am 19. Juli 2012

Tags: Frage

Typo3Cuckoo ·

Hi,

Ich nutze in meiner Extbase Extension die IRRE Funktionalität. Tut soweit alles sehr gut!

Jedoch hab ich ein Problem mit der Sortierung:

Wie kann man die Child-Elemente automatisch nach einem bestimmten Feld sortieren?
Konkreter Fall: die Child-Element haben ein Feld date_start nach dem die Einträge absteigend sortiert werden sollen.

Im TCA der Child-Elemente hab ich hierfür folgendes eingetragen:

<?php
$TCA['tx_myext_domain_model_child'] = array(
	'ctrl' => array(
		[...]
		'default_sortby' => 'ORDER BY date_start ASC',
		[...]
	)
);
?>

Z.B. trage ich drei Child-Elemente in folgender Reihenfolge über die IRRE-Funktion ein:

1. Child: date_start => 23.09.2011
2. Child: date_start => 01.01.2011
3. Child: date_start => 09.10.2011

Schau ich mir die Child-Elemente im Backend in der Listenansicht an, sind sie korrekt sortiert (d.h: 2.Child, 1.Child, 3.Child). Im Bearbeitungsformular des Parent-Elements stimmt die Sortierung jedoch nicht. Hier bleiben sie genau in der Reihenfolge stehen wie ich sie eingetragen habe.

Die IRRE Einbindung im Parent-Element sieht wie folgt aus (TCA):

<?php
$TCA['tx_myext_domain_model_parent']['columns']['children']['config'] = array(
	'type' => 'inline',
	'foreign_table' => 'tx_myext_domain_model_child',
	'MM' => 'tx_myext_parent_child_mm',
	'maxitems' => 9999,
	'foreign_selector' => 'uid_foreign',
	'appearance' => array(
		'useSortable' => 1,
		'useCombination' => 1,
		'newRecordLinkPosition' => 'top'
	)
);
?>

Mir ist klar, dass ich mit useSortable = 1 die Sortierung auf "manuell" geschalten habe. Aber selbst wenn ich das auf "0" setze stimmt die Sortierung immer noch nicht. Im Frontend werden die Child-Elemente nach der IRRE-Sortierung ausgegeben (also genau so, wie sie im Bearbeitungsformular des Parent-Elements sortiert sind).

Gibt es eine Möglichkeit, die manuelle Sortierung komplett zu deaktivieren die Child-Elemente über ein vorgegebenes Feld zu sortieren?

Danke schon mal für eure Hilfe 🙂

Julian.​Hofmann ·

Hallo.

Für inline gibt es die Konfigurationsmöglichkeit eines foreign_default_sortby:

TYPO3 Core API schrieb

If a fieldname for foreign_sortby is defined, then this is ignored.
Otherwise this is used as the “ORDER BY” statement to sort the records in the
table when listed.

Viele Grüße
Julian

Typo3Cuckoo ·

Hi,

danke für den Hinweis 🙂 aber was fange ich damit an? Wo muss ich das einbauen?

Hab folgendes versucht:

<?php
$TCA['tx_myext_domain_model_parent']['columns']['children']['config'] = array(
	'type' => 'inline',
	'foreign_table' => 'tx_myext_domain_model_child',
	'MM' => 'tx_myext_parent_child_mm',
	'maxitems' => 9999,
	'foreign_selector' => 'uid_foreign',
	'foreign_default_sortby' => 'ORDER BY date_start ASC', // <--- HIER EINGEFÜGT
	'appearance' => array(
		'useSortable' => 1,
		'useCombination' => 1,
		'newRecordLinkPosition' => 'top'
	)
);
?>

Hat leider nichts gebracht 🙁

In der MM-Tabelle sind die Felder sorting und sorting_foreign vorhanden. Müssen die vielleicht entfernt werden?

bikila ·

Vielen Dank, genau das hab ich gesucht.
Jetzt werden bei mir die Childs in der Extbase Extension in der richtigen Reihenfolge ausgegeben.

@ Typo3Cuckoo - du hast einen kleinen fehler in deinem code...

<?php
...
	'foreign_default_sortby' => 'ORDER BY date_start ASC', // hier muss ein feld angegeben werden, kein sql statement
...

/* bei mir siehts jetzt so aus */

        'foreign_sortby' => 'sorting',
	'foreign_default_sortby' => 'sorting',				


?>

LG
ben

ToBe ·

bei mir geht es leider noch immer nicht...

hier mal ein Auszug meiner TCA:

'addresses' => array(
            'exclude' => 0,
            'label' => 'LLL:EXT:extkey/Resources/Private/Language/locallang_db.xml:tx_extkey_domain_model_coursesupplier.addresses',
            'config' => array(
                'type' => 'select',
                'foreign_table' => 'tx_extkey_domain_model_address',
                'MM' => 'tx_extkey_coursesupplier_address_mm',
                'foreign_sortby' => 'a_name',
                'foreign_default_sortby' => 'a_name',
                'size' => 10,
                'autoSizeMax' => 30,
                'maxitems' => 9999,
                'wizards' => array(
                    '_PADDING' => 1,
                    '_VERTICAL' => 1,
                    'edit' => array(
                        'type' => 'popup',
                        'title' => 'Edit',
                        'script' => 'wizard_edit.php',
                        'icon' => 'edit2.gif',
                        'popup_onlyOpenIfSelected' => 1,
                        'JSopenParams' => 'height=350,width=580,status=0,menubar=0,scrollbars=1',
                    ),
                    'add' => Array(
                        'type' => 'script',
                        'title' => 'Create new',
                        'icon' => 'add.gif',
                        'params' => array(
                            'table' => 'tx_extkey_domain_model_address',
                            'pid' => '###CURRENT_PID###',
                            'setValue' => 'prepend'
                        ),
                        'script' => 'wizard_add.php',
                    ),
                ),
            ),
        ),

ich hoffe ihr könnt mir weiterhelfen.

LG Tobi

daniz78 ·

Nimm mal die folgende Zeile raus, sonst wird das Feld im Formular nicht mehr angezeigt:

'foreign_sortby' => 'a_name',

Damit sollte die Sortierung klappen!

Ciao Daniz

ToBe ·

Danke für die Antwort!

...hatte es mittlerweile anders gelöst, aber werde mir das mal merken falls ich wieder mal auf das Problem stoße.

LG Tobi