Zum Inhalt springen

Datensatz in default Sprache (egal welcher language Parameter)

Erstellt am 24. Februar 2014 · 3 Antworten · letzte Antwort am 25. Februar 2014

Tags: Kategorien, Frage

zappzarapp ·

Hallo,

ich versuche gerade von einem Datensatz die default Sprache auszulesen egal welcher Language-Parameter gerade an der URL hängt.

Prinzipiell möchte ich alle (default und übersetzten) Datensätze bekommen und bin bis jetzt so weit gekommen:

function getLLCategories($categoryUid) {
    $query = $this->createQuery();
    $query->getQuerySettings()->setRespectSysLanguage(FALSE);
    $query->matching($query->logicalOr($query->equals('l10n_parent', $categoryUid),$query->equals('uid',$categoryUid)));
    $query->setOrderings(array('sys_language_uid' => Tx_Extbase_Persistence_QueryInterface::ORDER_ASCENDING));
    $categories = $query->execute();
    return $categories;
}

Das funktioniert super solange meine sys_language_uid = 0 ist:
'Kategoriename ' - sys_language_uid
'Kategorie (de)' - 0
'Kategorie (en)' - 1
'Kategorie (fr)' - 2

Sobald ich aber eine andere Sprache einstelle bekomme ich den Datensatz der eigentlich in der sys_language_uid 0 auf Deutsch sein sollte immer in der übersetzten Sprache (wenn es eine Übersetzung gibt)

'Kategorie (en)' - 1
'Kategorie (en)' - 1
'Kategorie (fr)' - 2

Habe auch versucht eine Funktion zu machen die mir nur diesen einen Datensatz ausliest:

function getDefaultCategory($categoryUid) {
    $query = $this->createQuery();
    $query->getQuerySettings()->setRespectSysLanguage(FALSE);
    $query->matching($query->logicalAnd($query->equals('uid', $categoryUid),$query->equals('sys_language_uid', 0)));
    $category = $query->execute();
    return $category;
}

Habe hier auch schon extra ein sys_language_uid=0 dazugegeben und dachte, dass mit $query->getQuerySettings()->setRespectSysLanguage(FALSE); die Sprache quasi komplett ignoriert wird aber ich bekomme den Datensatz immer übersetzt zurück (was ich in dem Fall eben nicht mag)

Liebe Grüße,
Matthias

zappzarapp ·

Auch ein "raw sql statement" macht mir _immer_ ein language overlay über meinen default Datensatz (was ich ziemlich bescheiden finde)

function getLLCategories1($categoryUid) {
    $query = $this->createQuery();
    $query->getQuerySettings()->setRespectSysLanguage(FALSE);
    $sql = 'SELECT * FROM tx_affiliate_domain_model_category WHERE l10n_parent='.$categoryUid.' OR uid='.$categoryUid;
    $result = $query->statement($sql)->execute();
    return $result;
}

Wenn ich die SQL Query in phpMyAdmin ausführe bekomme ich korrekt meine Kategorien in der richtigen Sprache zurück:
'Kategorie (de)' - 0
'Kategorie (en)' - 1
'Kategorie (es)' - 2
'Kategorie (fr)' - 3

Aber sobald das mit $query->execute() ausgeführt wird bekomme ich das wenn ich L=1 habe:
'Kategorie (en)' -- 1
'Kategorie (en)' -- 1
'Kategorie (fr)' -- 3
'Kategorie (es)' -- 2

Muss ich hier jetzt wirklich ein $GLOBALS['TYPO3_DB'] in die extbase Extension hineinpfuschen?

$res = $GLOBALS['TYPO3_DB']->exec_SELECTquery('*','tx_affiliate_domain_model_category','l10n_parent='.$categoryUid.' OR uid='.$categoryUid);

Das klappt nämlich natürlich.

lg Matthias

Julian.​Hofmann ·

Hallo Matthias.

Beim genaueren betrachten der Methode setRespectSysLanguage() in die Klasse \TYPO3\CMS\Extbase\Persistence\Generic\Typo3QuerySettings fiel mir eine weitere Methode auf, die Dein Problem betreffen könnte: setSysLanguageUid()
Evtl. klappt's damit.

Viele Grüße
Julian

zappzarapp ·

Hallo Julian,

diese Option dürfte es aber noch nicht in Extbase für die Version 4.5 geben (für die ich diese Extension derzeit entwickeln muss) - werde es jetzt einfach mit $GLOBALS['TYPO3_DB'] lösen müssen (und evtl. ändern wenn die Extension dann 6.2 fit gemacht werden soll in den nächsten Monaten)

lg Matthias