2016-04-04 10 views
4

Ich möchte eine eigene Extbase-Erweiterung für TYPO3 CMS 7.6 erstellen. Die Erweiterung muss in verschiedenen Sprachen ausgeführt werden. Ich habe herausgefunden, dass der Repository-Abgleich nur für mich mit nicht lokalisierten Datensätzen funktioniert.Typo3 7.6 Extbase-Repository-Abgleich wirkt sich nur auf nicht lokalisierte Datensätze aus

Meine Repository-Funktion sieht wie folgt aus:

public function findNew() { 
    $query = $this->createQuery(); 
    $query->getQuerySettings()->setRespectSysLanguage(true); 
    $query->matching($query->equals('new', 1)); 
    return $query->execute(); 
} 

Diese Funktion sagt: Alle Datensätze anzeigen mit neu = 1

Beispiel: Ich habe einen Standard-Datensatz, der das Kontrollkästchen hat „Neu“ nicht aktiviert . Jetzt erstelle ich eine lokalisierte Version dieses Datensatzes und setze das "Neu" -Kontrollkästchen aktiviert.

Wenn ich die Funktion findNew() in der Standardsprache ausführen, wird der Datensatz nicht angezeigt. Wenn ich die Funktion in einer anderen Sprache ausführe, wird der Datensatz auch nicht angezeigt, obwohl das "Neu" -Flag gesetzt ist!

Mit anderen Worten: Die Übereinstimmung wirkt sich nur auf den Standard/übergeordneten Datensatz aus.

Ich verwende die folgenden config-Einstellungen:

config { 
    sys_language_mode = strict 
    sys_language_overlay = hideNonTranslated 
} 

[Edit:] Hier ist die komplette generierten SQL-Abfrage:

SELECT tx_extension_domain_model_table.* 
FROM 
tx_extension_domain_model_table 
WHERE 
    tx_extension_domain_model_table.new = '1' 
    AND (
    tx_extension_domain_model_table.sys_language_uid = -1 
    OR (
     tx_extension_domain_model_table.sys_language_uid = 1 
     AND tx_extension_domain_model_table.l10n_parent = 0 
    ) 
    OR (
     tx_extension_domain_model_table.sys_language_uid = 0 
     AND tx_extension_domain_model_table.uid IN (
     SELECT tx_extension_domain_model_table.l10n_parent 
     FROM tx_extension_domain_model_table 
     WHERE tx_extension_domain_model_table.l10n_parent > 0 
      AND tx_extension_domain_model_table.sys_language_uid = 1 
      AND tx_extension_domain_model_table.deleted = 0 
    ) 
    ) 
) 
    AND tx_extension_domain_model_table.deleted = 0 
    AND tx_extension_domain_model_table.t3ver_state <= 0 
    AND tx_extension_domain_model_table.pid <> -1 
    AND tx_extension_domain_model_table.hidden = 0 
    AND tx_extension_domain_model_table.starttime <= 1459780380 
    AND (tx_extension_domain_model_table.endtime = 0 OR  tx_extension_domain_model_table.endtime > 1459780380) 
ORDER BY tx_extension_domain_model_table.sorting ASC 

... und der wichtige Teil:

AND (
     tx_extension_domain_model_table.sys_language_uid = -1 
    OR (
     tx_extension_domain_model_table.sys_language_uid = 1 
     AND tx_extension_domain_model_table.l10n_parent = 0 
    ) 
    OR (
     tx_extension_domain_model_table.sys_language_uid = 0 
     AND tx_extension_domain_model_table.uid IN (
     SELECT tx_extension_domain_model_table.l10n_parent 
     FROM tx_extension_domain_model_table 
     WHERE tx_extension_domain_model_table.l10n_parent > 0 
      AND tx_extension_domain_model_table.sys_language_uid = 1 
      AND tx_extension_domain_model_table.deleted = 0 
    ) 
    ) 
) 

Das erklärt mein Problem. TYPO3 sucht nicht nach neu = 1 in sys_language_uid = 1, wenn es lokalisiert ist ... aber warum?

Frage: Ist das ein Fehler oder eine Funktion?

Antwort

Verwandte Themen