[Frage] übersetzte Inhaltselemente aus tt_content rendern TYPO3-Version: 6.2.7

  • Nasenbluten Nasenblut...
    TYPO3-Anwärter
    0 x
    7 Beiträge
    0 Hilfreiche Beiträge
    25. 07. 2016, 19:06

    Hallo,

    ich möchte gern in einer Extension per PHP einige content elemente rendern, die in der tt_content Tabelle gespeichert sind. Das funktioniert auch wunderbar mit folgendem Code:

    1. public function renderContentObject($uid)
    2. {
    3. $conf = array(
    4. 'tables' => 'tt_content',
    5. 'source' => $uid,
    6. 'dontCheckPid' => 1,
    7. );
    8. return $this->configurationManager->getContentObject()->cObjGetSingle('RECORDS', $conf);
    9. }

    Allerdings funktioniert das NUR mit der Default language. Wenn ich das mit übersetzten Elementen versuche krieg ich nur einen leeren String zurück.

    Das gleiche Problem wurde hier schon mal diskutiert und bisher keine Lösung gefunden:
    http://thebesthacker.com/question/typo3-how-to-render-translated-content-in-extension.html

    Was ich zusätzlich hinbekommen habe: Mit getRecordOverlay bekomme ich ein Record zurück welches die übersetzen Inhalte enthält. Aber was mache ich mit diesem "Record"... ? wie kann ich dieses Record rendern? Natürlich kann ich einfach auf das Feld "bodytext" zugreifen und mir dort den Inhalt direkt holen, aber das reicht ja meistens nicht aus(z.b. wenn bilder enthalten sin etc.).


  • 1
  • Julian.Hofmann Julian.Ho...
    Flash Gordon
    0 x
    2848 Beiträge
    105 Hilfreiche Beiträge
    26. 07. 2016, 08:43

    Hallo.

    In der [url=http://stackoverflow.com/questions/16597561/typo3-how-to-render-localized-tt-content-in-own-extension]weiteren Verlinkung[/url] Deines Links dürfte Joey die Antwort geben: ersetze RECORDS gegen CONTENT und gibt das languageField mit an. Wenn Du dann als $uid die des [b]Default-sprachigen[/b] Datensatzes angibst, solllte es klappen.

    Viele Grüße
    Julian

  • Nasenbluten Nasenblut...
    TYPO3-Anwärter
    0 x
    7 Beiträge
    0 Hilfreiche Beiträge
    26. 07. 2016, 10:49

    habe ich auch shcon ausprobiert.. ist leider genau wie der Autor in dem verlinkten Post geschrieben hat, die Angabe des "languageField"-Attributes im "select."-Array aht keinerlei Auswirkungen ("It is not affected by a language change."). Hat vielleicht jemand ein funktionierendes Beispiel?

  • Julian.Hofmann Julian.Ho...
    Flash Gordon
    0 x
    2848 Beiträge
    105 Hilfreiche Beiträge
    28. 07. 2016, 11:18

    Gehen wir mal das Szenario durch:

    • Wir haben eine Seite, die es auch in einer übersetzten Version gibt.
    • Auf dieser Seite ist unser Plugin eingebunden, und auch in der übersetzten Version ist das Plugin eingebunden.
    • Wir haben ein Inhaltselement (UID=86), welches ebenfalls in einer Übersetzen Variante existiert

    Dann funktioniert:

    1. class TypoScriptTestController extends ActionController
    2. {
    3. public function testAction()
    4. {
    5. $contentInDefaultLanguageUid = 86;
    6. $this->view->assign('content', $this->renderContentObject($contentInDefaultLanguageUid));
    7. }
    8.  
    9. private function renderContentObject($uid)
    10. {
    11. $conf = array(
    12. 'table' => 'tt_content',
    13. 'select.' => array(
    14. 'uidInList' => $uid,
    15. 'where' => 'colPos=0',
    16. 'orderBy' => 'sorting',
    17. 'languageField' => 'sys_language_uid'
    18. )
    19. );
    20. return $this->configurationManager->getContentObject()->cObjGetSingle('CONTENT', $conf);
    21. }
    22. }

    D.h. auf der Seite wird der Inahlt der Default-Sprache ausgegeben, falls die Seite in Defaul-Sprache aufgerufen ist. Und es kommt das ContentObject in übersetzter Version raus, falls die übersetzte Seite aufgerufen wurde.

  • Nasenbluten Nasenblut...
    TYPO3-Anwärter
    0 x
    7 Beiträge
    0 Hilfreiche Beiträge
    01. 08. 2016, 14:53

    ja das hab ich schon mehrfach genau so probiert...

    die gepostete "renderContentObject" Funktion funktioniert bei mir nichtmal auf der default sprache. Es funktioniert nur wenn ich die funktion wie folgt anpasse, dann bekomme ich zumindest die Default-sprache:

    1. private function renderContentObject($pid,$uid)
    2. {
    3. $conf = array(
    4. 'table' => 'tt_content',
    5. 'select.' => array(
    6. 'pidInList' => $pid,
    7. 'orderBy' => 'sorting',
    8. 'languageField' => 'sys_language_uid',
    9. 'where' => 'uid=' . $uid,
    10. )
    11. );
    12. return $this->configurationManager->getContentObject()->cObjGetSingle('CONTENT', $conf);
    13. }

    Der Parameter "uidInList" funktioniert bei mir nicht. Wenn ich es aber so umbaue, dass ich die korrekte PageId angeben und per where-Klausel die uid bestimme, bekomme ich wenigstens schon mal das Element in der Defaultsprache. Übersetzungen funktionieren damit aber immer noch nicht.

    Hat vielleicht jemand eine Vermutung warum der von Julian netterweise gepostete Code bei mir nicht funktioniert?

  • Julian.Hofmann Julian.Ho...
    Flash Gordon
    0 x
    2848 Beiträge
    105 Hilfreiche Beiträge
    02. 08. 2016, 10:20

    Knackpunkt ist glaube ich irgendwie Deine where-Klausel - oder irgendetwas ganz, ganz anderes abseits dieses PHP-Codes.

    Eben nochmal probiert mit Content einer anderen Seite (d.h. mit Angabe einer pid und uid):

    1. private function renderContentObject($uid, $pid)
    2. {
    3. $conf = array(
    4. 'table' => 'tt_content',
    5. 'select.' => array(
    6. 'uidInList' => $uid,
    7. 'pidInList' => $pid,
    8. 'where' => 'colPos=0',
    9. 'orderBy' => 'sorting',
    10. 'languageField' => 'sys_language_uid'
    11. )
    12. );
    13. return $this->configurationManager->getContentObject()->cObjGetSingle('CONTENT', $conf);
    14. }
    Funktioniert bei mir.

  • Nasenbluten Nasenblut...
    TYPO3-Anwärter
    0 x
    7 Beiträge
    0 Hilfreiche Beiträge
    02. 08. 2016, 14:56

    ok... danke für die vielen Antworten.. ich denke auch dass mein Fehler anscheind irgendwo ganz anders liegt.

  • 1