Direkt zum Inhalt

Drupal 8: In Views nach Sprache filtern

veröffentlicht von um am Mi, 06/14/2017 - 14:47

Es gibt ein merkwürdiges Verhalten, wenn man in Views Inhaltstypen nach Sprache filtern möchte.

Intuitiv würde man den Sprachfilter auf den Inhalt setzen. Dies zeigt nur in der Standardsprache eine Ausgabe.

Das SQL der Abfrage zeigt den Unterschied schon in der ersten Zeile:

für die Standardsprache (hier Deutsch) sieht die Zeile so aus:

SELECT node_field_data.created AS node_field_data_created, node_field_data.nid AS nid ...

für Englisch:

SELECT node_field_data.langcode AS node_field_data_langcode, node_field_data.created AS node_field_data_created, node_field_data.nid AS nid ...

Das Feld node_field_data.langcode gibt es in der Abfrage nicht, weswegen die Abfrage scheitert und kein Ergebnis zurück liefert.

(Der Rest der Abfrage ist für beide Sprachen abgesehen von den unterschiedlichen Sprachwerten indentisch)

Anders verhält es sich, wenn man den Sprachfilter auf Inhalts Revision setzt.

Hier lautet die Abfrage in beiden Sprachen:

SELECT node_field_data.created AS node_field_data_created, node_field_data.nid AS nid ...

Für beide Sprachen wird das gewünschte Ergebnis zurückgeliefert.

Ist das ein Bug im Drupal Core oder habe ich etwas falsch verstanden? Kommentare willkommen.

Nachtrag:

Bei weiteren Tests habe ich herausgefunden, dass dieses Verhalten nur dann auftritt, wenn der View noch einen zusätzlichen Filter z.B. auf ein List-Feld oder ein Taxonomie-Feld hat und dieses Feld nicht übersetzbar ist. Es liegt also eher an dem INNER JOIN

SELECT node_field_data.created AS node_field_data_created, node_field_data.nid AS nid 
FROM 
{node_field_data} node_field_data
INNER JOIN {node__field_list_test} node__field_list_test ON node_field_data.nid = node__field_list_test.entity_id AND (node__field_list_test.deleted = '0' AND node__field_list_test.langcode = node_field_data.langcode)
WHERE ((node__field_list_test.field_list_test_value IN('eins', 'zwei'))) AND ((node_field_data.status = '1') AND (node_field_data.type IN ('test_filter_version')) AND (node_field_data.langcode IN ('en')))
ORDER BY node_field_data_created DESC

Nachtrag 2:

Nachdem ich herausgefunden habe, worum es genau geht, konnte ich gezielt in den Drupal 8 Issues suchen.

https://www.drupal.org/node/2451657

Es gibt dort auch einen Patch, der funktioniert.

 

Neuen Kommentar schreiben