tt_content über php auslesen (Mit mehreren Sprachen und TV) [Gelöst]

  • MrLight MrLight
    Padawan
    0 x
    35 Beiträge
    1 Hilfreiche Beiträge
    31. 05. 2010, 00:35

    Hallo gemeinde.

    ich versuche in meiner kleinen Extension Contentelemente auszulesen und dann auszugeben. Das klappt ganz gut, solange ich nicht die Sprache umschalte. Die Übersetzung kommt nicht raus. Was mache ich falsch?

    Hier meine Snipets:
    (Hauptteil)

    1. /*
    2.  * Content holen
    3.  */
    4. public function getDescriptionContent ($uid) {
    5. // Prüfen ob wir eine andere Sprache haben, und die $uid korrigieren
    6. $uid = $this->checkForTranslationOfContentElement ($uid);
    7. // Configurieren
    8. $conf['tables'] = 'tt_content';
    9. //$conf['conf.']['tt_content'] = '< tt_content';
    10. $conf['conf.']['sys_language_uid'] = $GLOBALS['TSFE']->sys_language_uid;
    11. $conf['source'] = $uid;
    12. $conf['dontCheckPid'] = '1';
    13. // content holen
    14. $content = $this->cObj->cObjGetSingle('RECORDS', $conf);
    15. return $content;
    16. }

    Dann das Snippet, dass die UID des tt_content Elements der Übersetzung herausbekommt. Es werden zwar die UIDs richtig ermittelt, jedoch gibt die Hauptfunktion nichts aus.

    1. /*
    2.  * passende UID der Übersetzung ermitteln
    3.  */
    4. public function checkForTranslationOfContentElement ($uid) {
    5. $LangUid = $GLOBALS['TSFE']->sys_language_uid;
    6. if ($LangUid != '0') {
    7. $table = "tt_content";
    8. $additionalWhereString = "sys_language_uid = '".$LangUid."' AND l18n_parent IN (".$uid.')';
    9. $requestedUid = false;
    10. $hidden = false;
    11. $deleted = false;
    12. $requestedFields = "uid, sys_language_uid, l18n_parent";
    13. $groupBy = "";
    14. $orderBy = "";
    15. $limit = "";
    16. $result = $this->get_db_data ($table, $additionalWhereString, $requestedUid, $hidden, $deleted, $requestedFields, $groupBy, $orderBy, $limit);
    17. $resultArray = array();
    18. if (is_array($result)) {
    19. foreach ($result AS $key => $value) {
    20. $resultArray[] = $value['uid'];
    21. }
    22. }
    23. $uid = implode(",", $resultArray);
    24. }
    25. return $uid;
    26. }

    .. und der Vollständigkeit halber meine get_db_data:

    1. private function get_db_data ($table, $additionalWhereString = false, $requestedUid = false, $hidden = false, $deleted = false, $requestedFields = "*", $groupBy='', $orderBy='', $limit='') {
    2. $requestedData = array();
    3.  
    4. if (($table) && ($table != '')) {
    5. if ($deleted) {
    6. $deletedString = "";
    7. } else {
    8. $deletedString = " AND deleted = 0";
    9. }
    10.  
    11. if ($hidden) {
    12. $hiddenString = "";
    13. } else {
    14. $hiddenString = " AND hidden = 0";
    15. }
    16.  
    17. if (($additionalWhereString) && ($additionalWhereString != '')) {
    18. $additionalWhereString = " AND ".$additionalWhereString;
    19. } else {
    20. $additionalWhereString = "";
    21. }
    22.  
    23. if (($requestedUid) && ($requestedUid != '')) {
    24. $requestedUidString = " AND uid = ".$requestedUid;
    25. } else {
    26. $requestedUidString = "";
    27. }
    28.  
    29. $whereString = "1".$deletedString.$hiddenString.$requestedUidString.$additionalWhereString;
    30. $requestDataRes = $GLOBALS['TYPO3_DB']->exec_SELECTquery($requestedFields, $table, $whereString, $groupBy, $orderBy, $limit);
    31.  
    32. if ($requestDataRes) {
    33. while ($temp = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($requestDataRes)) {
    34. if ($temp['uid']) {
    35. $requestedData[$temp['uid']] = $temp;
    36. } else {
    37. $requestedData[] = $temp;
    38. }
    39. }
    40. }
    41. }
    42.  
    43. return $requestedData;
    44. }

    Der Content der Hauptsprache wird ganz normal ausgegeben, doch die Übersetzungen kommen einfach nicht raus, obwohl die UIDs richtig ermittelt werden. Ich stecke wirklich fest, und ein Wink in die richtige Richtung währe echt hilfreich. Habe schon das Netzt durchsucht und nichts passendes gefunden.

    Grüße, und Danke im Voraus.

    Mr Light :-)


  • 1
  • MrLight MrLight
    Padawan
    0 x
    35 Beiträge
    1 Hilfreiche Beiträge
    31. 05. 2010, 03:56

    Manchmal sieht man den Wald vor lauter Bäumen nicht mehr, oder Die Lösung ist doch so einfach.

    Der Fehler war, dass die Seite auf der das Plugin läuft, und das Plugin selbst keine Sprachversion hatten, und somit auch keine Übersetzung geladen wird. Fügt man der Seite die Sprache hinzu, und kopiert man das Plugin auch in die Sprache, klappt es auch mit den geladenen tt_content Elementen.

    Man muss nicht einmal mehr die UIDs von den Übersetzungen herausfinden.

    Der Vollständigkeitshalber hier meine neue Funktion (welche sich nicht vom Standart mehr unterschiedet):

    1. public function getDescriptionContent ($uid) {
    2. // Configurieren
    3. $conf['tables'] = 'tt_content';
    4. $conf['conf.']['tt_content'] = '< tt_content';
    5. $conf['source'] = $uid; //"tt_content_".$uid
    6. $conf['dontCheckPid'] = '1';
    7. // content holen
    8. $content = $this->cObj->cObjGetSingle('RECORDS', $conf);
    9. return $content;
    10. }

    Die funktion zum holen der UID für die Übersetzung kann man sich komplett sparen, und meine Funktion zum Auslesen der Datenbankeiträge ist somit auch überflüssig ...

    Mr Light :-)

  • 1