[Frage] Datenbankabfrage auf Tabelle mit sys_language_uid Feld

  • Spielverderber Spielverd...
    Typ im Roten Hemd
    0 x
    2 Beiträge
    0 Hilfreiche Beiträge
    02. 09. 2013, 10:50

    Moin Moin liebe Forenteilnehmer,

    ich habe gerade eine funktion für ein Plugin geschrieben, welches eine Datenbankabfrage auf eine von mir, per extension_builder erstellte, Tabelle ausführt.
    Ich möchte abhängig der gewählten Sprache auf der Webseite unterschiedliche Inhalte der Tabelle erhalten.

    Diese Funktion sieht wie folgt aus:

    1. public function meineFunktionAction(){
    2. $xxx = trim( $this->request->getArgument('xxx') );
    3. $sysLanguageUid = $GLOBALS['TSFE']->sys_language_uid;
    4. $query = $this->xyzRepository->createQuery();
    5.  
    6. $constraints[] = $query->equals('xxx', $xxx);
    7. $constraints[] = $query->equals('sys_language_uid', $sysLanguageUid);
    8.  
    9. $query->matching($query->logicalAnd($constraints));
    10. $xxxResults = $query->execute();
    11.  
    12.  
    13. $this->view->assign('abc', $xxxResults);
    14. }

    Das funktioniert auch soweit ganz gut. Nur habe ich dazu zwei Fragen:

    • Wenn ich das Plugin auf einer Seite einsetze, und für diese Seite keine Übersetzung mit der sprachid z.B. 2 angelegt habe, erhalte ich für diese Sprachid keine Ergebnisse, obwohl in der Datenbank sehr wohl Ergebnisse für z.B. sprachid 2 vorhanden wären.
    • Daraus folgernd... mache ich das überhaupt richtig, wie ich sprachabhängige inhalte aus der Datenbank lade? oder gibt es da einen ganz anderen weg?

    Vielen Dank schon mal im Voraus.

    mfg
    Spielverderber

  • Hilfreichster Beitrag

  • einpraegsam.net einpraegs...
    MacGyver
    1 x
    9340 Beiträge
    80 Hilfreiche Beiträge
    03. 09. 2013, 21:48 - Hilfreichster Beitrag

    Hmm, also Extbase macht das was du benötigst bereit automatisch. Wenn dein TYPO3 also richtig konfiguriert ist, Du kannst dir Zeile 3 und 7 sparen.

    Aber auch diese Lösung benötigt eine übersetzte Seite. Ist die Seit nicht übersetzt, handelt TYPO3 völlig richtig und liefert die Datensätze der Standardsprache aus (auch dein HMENU müsste eigentlich in der Standardsprache sichtbar sein). Wenn du dies explizit nicht möchtest, musst du erst auf sys_language_uid abfragen.

    BTW: Datenbankabfragen gehören eigentlich ins Repository und nicht in den Controller (schneller auffindbar, besser wiederverwendbar, weniger Code)

    in2code.de - Wir leben TYPO3
    - Möchtest du TYPO3 komplett verstehen? Eigene Erweiterungen erstellen? Bei uns gibt es auch Schulungen https://www.in2code.de/produkte/typo3-schulungen/
    - Die Arbeit mit TYPO3 macht dir Spaß? Du stehst auf Berge? Komm zu uns! https://www.in2code.de/agentur/karriere/


  • 1
  • einpraegsam.net einpraegs...
    MacGyver
    1 x
    9340 Beiträge
    80 Hilfreiche Beiträge
    03. 09. 2013, 21:48

    Hmm, also Extbase macht das was du benötigst bereit automatisch. Wenn dein TYPO3 also richtig konfiguriert ist, Du kannst dir Zeile 3 und 7 sparen.

    Aber auch diese Lösung benötigt eine übersetzte Seite. Ist die Seit nicht übersetzt, handelt TYPO3 völlig richtig und liefert die Datensätze der Standardsprache aus (auch dein HMENU müsste eigentlich in der Standardsprache sichtbar sein). Wenn du dies explizit nicht möchtest, musst du erst auf sys_language_uid abfragen.

    BTW: Datenbankabfragen gehören eigentlich ins Repository und nicht in den Controller (schneller auffindbar, besser wiederverwendbar, weniger Code)

    in2code.de - Wir leben TYPO3
    - Möchtest du TYPO3 komplett verstehen? Eigene Erweiterungen erstellen? Bei uns gibt es auch Schulungen https://www.in2code.de/produkte/typo3-schulungen/
    - Die Arbeit mit TYPO3 macht dir Spaß? Du stehst auf Berge? Komm zu uns! https://www.in2code.de/agentur/karriere/

  • Spielverderber Spielverd...
    Typ im Roten Hemd
    0 x
    2 Beiträge
    0 Hilfreiche Beiträge
    04. 09. 2013, 13:26

    Vielen Dank für die Erklärung.
    Diese Automatismen sind Segen und Fluch zugleich.
    Kann man dieses Verhalten denn abschalten?
    Wenn ich zum Beispiel deutsche und englische Texte gleichzeitig auf der Webseite haben möchte?
    (Der Sinn sei mal dahin gestellt - mir gehts nur darum wie man das dann machen würde)

    Vielen Dank schon mal im Voraus.

  • 9pm 9pm
    T3PO
    0 x
    23 Beiträge
    0 Hilfreiche Beiträge
    09. 09. 2013, 09:16

    Guten Morgen!

    Ich würde dir auch raten im entsprechenden Repository eine Funktion für deine Abfrage zu erstellen. Dort kannst du dann mit

    1. $query->getQuerySettings()->setRespectSysLanguage(FALSE);

    bestimmen, dass die aktuelle Sprache nicht berücksichtig wird. Wenn ich es richtig im Kopf habe, werden dir dann alle Datensätze ausgegeben.

    Wenn du doch eine bestimmte Sprache mit [i]sys_language_uid[/i] abfragen willst, musst du in deinem Model dieses Feld noch hinzufügen (als Getter/Setter). Die Variable muss dann aber [b]$_languageUid[/b] heißen.

    Viele Grüße
    9pm

  • 1