Mehrsprachigkeit programmieren?! Variable? [Gelöst]


  • 0 x
    27. 04. 2006, 17:42

    Wie erhalte ich in der Ausgabe einer selbstprogrammierten Extension, die mehrsprachigkeit? Bisher werden alle Datensätze angezeigt. Über "if else Abfrage" sollte dies doch möglich sein oder?

    Welche Variable wird gebraucht? "sys_language_uid" ist bereits im Datenbank Schema der Extension angelegt und wird auch richtig zugeordnet - "L" als Sprachvariable in Typo bereits konfiguriert....

    Kann mir jemand auf die Sprünge helfen...

    Gruß
    Andy


  • 0 x
    30. 04. 2006, 13:42 - Lösung

    Ich stehe auf dem Schlauch.... :0

    Hier erfolgt das erstellen...

    1. <?
    2. /**
    3. * Liste erstellen
    4. */
    5. function makelist($res) {
    6. $items=Array();
    7.  
    8. // $GLOBALS["TSFE"]->sys_language_uid
    9.  
    10.  
    11. // Sprache auslesen
    12.  
    13. while($temp = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)) {
    14. // get the translated record if the content language is not the default language
    15. if ($GLOBALS['TSFE']->sys_language_content) {
    16. $OLmode = ($this->sys_language_mode == 'strict'?'hideNonTranslated':'');
    17. $temp = $GLOBALS['TSFE']->sys_page->getRecordOverlay('tx_extension', $temp, $GLOBALS['TSFE']->sys_language_content, $OLmode);
    18. }
    19. $data[] = $temp;
    20. }
    21.  
    22.  
    23.  
    24. // Liste erstellen
    25. while($this->internal['currentRow'] = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)) {
    26. $items[]=$this->makeListItem();
    27. }
    28.  
    29. // Ausgabe
    30.  
    31. $out = '<div'.$this->pi_classParam('listrow').'>
    32. '.implode(chr(10),$items).'
    33. </div>';
    34.  
    35.  
    36. return $out;
    37. }
    38. ?>


  • steffenk steffenk
    Obi-Wan Kenobi
    0 x
    4666 Beiträge
    0 Hilfreiche Beiträge
    27. 04. 2006, 19:31

    aber klar doch

    1. $GLOBALS["TSFE"]->sys_language_uid
    gibt Dir die eingestellte Sprache zurück

    Und so liest Du den richtigen Datensatz aus:

    1. <?php
    2. while($temp = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)) {
    3. // get the translated record if the content language is not the default language
    4. if ($GLOBALS['TSFE']->sys_language_content) {
    5. $OLmode = ($this->sys_language_mode == 'strict'?'hideNonTranslated':'');
    6. $temp = $GLOBALS['TSFE']->sys_page->getRecordOverlay('tx_extension', $temp, $GLOBALS['TSFE']->sys_language_content, $OLmode);
    7. }
    8. $data[] = $temp;
    9. }
    10. }
    11. ?>


  • 0 x
    30. 04. 2006, 13:42

    Ich stehe auf dem Schlauch.... :0

    Hier erfolgt das erstellen...

    1. <?
    2. /**
    3. * Liste erstellen
    4. */
    5. function makelist($res) {
    6. $items=Array();
    7.  
    8. // $GLOBALS["TSFE"]->sys_language_uid
    9.  
    10.  
    11. // Sprache auslesen
    12.  
    13. while($temp = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)) {
    14. // get the translated record if the content language is not the default language
    15. if ($GLOBALS['TSFE']->sys_language_content) {
    16. $OLmode = ($this->sys_language_mode == 'strict'?'hideNonTranslated':'');
    17. $temp = $GLOBALS['TSFE']->sys_page->getRecordOverlay('tx_extension', $temp, $GLOBALS['TSFE']->sys_language_content, $OLmode);
    18. }
    19. $data[] = $temp;
    20. }
    21.  
    22.  
    23.  
    24. // Liste erstellen
    25. while($this->internal['currentRow'] = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)) {
    26. $items[]=$this->makeListItem();
    27. }
    28.  
    29. // Ausgabe
    30.  
    31. $out = '<div'.$this->pi_classParam('listrow').'>
    32. '.implode(chr(10),$items).'
    33. </div>';
    34.  
    35.  
    36. return $out;
    37. }
    38. ?>

  • steffenk steffenk
    Obi-Wan Kenobi
    0 x
    4666 Beiträge
    0 Hilfreiche Beiträge
    30. 04. 2006, 16:13

    Du kombinierst 2 Methoden der Datensatzauslese - das kann nicht klappen.


  • 0 x
    30. 04. 2006, 16:18

    Sollte ich nach der Funktion "makelist" eine funktion "sprache" erstellen und dort die while abfrage reinbauen...?! alles als out ausgaben und danach die liste bauen?!

  • steffenk steffenk
    Obi-Wan Kenobi
    0 x
    4666 Beiträge
    0 Hilfreiche Beiträge
    30. 04. 2006, 16:59

    nimm den Schnipsel von mir wieder raus und mach die Unterscheidung der Sprache in der Funktion makeListItem.


  • 0 x
    30. 04. 2006, 18:52

    Hey danke für die Hilfe - aber irgendwie klemmt es immer noch... (ich denke meine PHP-Erfahrung ist zu gering)

    1. <? /**
    2. *AUSGABE
    3. */
    4. function makeListItem() {
    5.  
    6. while($out = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)) {
    7. // get the translated record if the content language is not the default language
    8. if ($GLOBALS['TSFE']->sys_language_content) {
    9. $OLmode = ($this->sys_language_mode == 'strict'?'hideNonTranslated':'');
    10. $out = $GLOBALS['TSFE']->sys_page->getRecordOverlay('tx_cdcstaff', $out, $GLOBALS['TSFE']->sys_language_content, $OLmode);
    11. }
    12. }
    13.  
    14. $out='<p>.$this->getFieldContent('name').</p>'&nbsp;'<p>.$this->getFieldContent('vorname').</p>';
    15. return $out;
    16. }?>

    Danke

  • steffenk steffenk
    Obi-Wan Kenobi
    0 x
    4666 Beiträge
    0 Hilfreiche Beiträge
    30. 04. 2006, 19:07

    m.E. müsste das so aussehen:

    1. <?
    2. /**
    3. *AUSGABE
    4. */
    5. function makeListItem() {
    6.  
    7. // get the translated record if the content language is not the default language
    8. if ($GLOBALS['TSFE']->sys_language_content) {
    9. $OLmode = ($this->sys_language_mode == 'strict'?'hideNonTranslated':'');
    10. $this->internal['currentRow'] = $GLOBALS['TSFE']->sys_page->getRecordOverlay('tx_cdcstaff', $this->internal['currentRow'], $GLOBALS['TSFE']->sys_language_content, $OLmode);
    11. }
    12.  
    13. $out='<p>'.$this->getFieldContent('name').' '.$this->getFieldContent('vorname').'</p>';
    14. return $out;
    15. }
    16. ?>

    ohne gewähr


  • 0 x
    30. 04. 2006, 19:36

    Jetzt habe ich verstanden! Allerdings geht es (immer) noch nicht... Ich denke mir fehlt die verknüpfung....

    Ich überlege mal und werden dann nochmals posten!!
    Gruß und Vielen Dank - ich melde mich...
    :-)

    MELDE MICH NOCHMAL!!! HIER DIE MELDUNG....

    1. <?
    2. function makeListItem() {
    3.  
    4. // get the translated record if the content language is not the default language
    5. if ($GLOBALS['TSFE']->sys_language_content) {
    6. $OLmode = ($this->sys_language_uid == 'strict'?'hideNonTranslated':'');
    7. $this->internal['currentRow'] = $GLOBALS['TSFE']->sys_page->getRecordOverlay('tx_cdcstaff_cdc_staff', $this->internal['currentRow'], $GLOBALS['TSFE']->sys_language_content, $OLmode);
    8. }
    9.  
    10. $out= $this->getFieldContent('vorname');
    11. return $out;
    12. } ?>

    Erzeugt keinen Fehler, gibt allerdings auch alle Datensätze aus - obwohl "L=0" ist....

    Sind denn alle Variablen bzw. Datenbankfelder abgefragt...
    [b]sys_language_content als echo ergibt bei DE 0,0,0,0
    sys_language_uid ergibt als echo bei DE "1,0,1,0" dies stimmt auch überein mit den Datenfelder der Datenbank. [/b]

    Die Datenbankfelder müssten doch nun nur noch mir der aktullen "L" Variable verglichen werden... dies scheint aber nicht zu gehen....

    RATLOS?!


  • 0 x
    01. 05. 2006, 01:23

    1. <? $out= $this->getFieldContent('sys_language_uid'); ?>

    ergibt bei 4 Datensätzen in 2 Sprachen 0,1,1,0

    Dies stimmt, da der erste und letzte Deutsch, die anderen Spanisch sind!