76 Nachrichten unter 21 Themen von 33 Mitgliedern
[SilverStripe Roadmap][Changelog]

Bild verlinkungen gehen beim Sprachenwechsel verloren

Seite: 1 731 mal gelesen
  • Ironcheese
    Community Member
    5 Beiträge

    Bild verlinkungen gehen beim Sprachenwechsel verloren

    Moin Moin,

    so, langsam aber sicher verlässt mich der Mut... ich kämpfe mit diesem Problem jetzt schon einige Zeit und hoffe das ihr mir vielleicht helfen könnt.

    Also ich arbeite zur Zeit an einer Website die mindestens 4-5 Sprachen haben muss. Standard Sprache ist Englisch. Soweit so gut.

    Da ich für die Verteilerseiten das gleiche Template benutze und bestimmte Bilder (Headergrafik z.b.) pro Kategorie im Template per $URLSegment einbinde gehen die Verlinkungen natürlich verloren sobald die Sprache gewechselt wird. Da wird aus "about-us" plötzlich "ueber-uns" und das Bild gibts natürlich nicht.

    Gibt es irgendwie eine Möglichkeit wie ich, egal in welcher Sprache die Seite gerade angezeigt wird, IMMER die erste/standard Sprache zurück bekomme? Also das URLSegment der englischen Seite.

    Ein ähnliches Problem habe ich bei "statischen" Links. So, die typischen Links oben rechts in der Ecke ala "Impressum, Kontakt, Sitemap" usw. Die Inline Übersetzung mit der "_t()" Funktion geht prima nur wie mache ich das mit dem Link Ziel?

    Dann wäre es noch super wenn es irgendwie ne Möglichkeit gäbe eine Art Fallback Sprache einzustellen. Also wenn bestimmte Seiten auf einer bestimmten Sprache nicht vorhanden sind, aber auf Englisch existieren, dann sollten die Links zumindest in Englisch angezeigt/angeboten werden.



    Vielen Dank im vorraus :)
    mfg
  • brokemeister
    brokemeister Community Member
    76 Beiträge

    Re: Bild verlinkungen gehen beim Sprachenwechsel verloren

    Hi Ironcheese,

    alles was du brauchst steht auf: http://doc.silverstripe.org/multilingualcontent#templates .
    --
    Für die Bilder machst du dir einfach eine Funktion getDefaultLanguageHeaderImage(). Der was da reinkommt kannst du dir vom Link oben ableiten.
    --
    Schau dir mal die PageByLang-Funktion (Link oben) an, die sollte dein Impressum-Problem lösen und dann in deinem Template

    <% control PageByLang(impressum,de_DE) %><a href="$Link">$Title</a><% end_control %>

    --
    Einfach der init-Funktion vom Page-Controller überprüfen (3-Zeiler), ob die Sprache vorhanden ist und ggfs. umleiten...

    Gruß

    Malte

    EOS Uptrade GmbH - Komplexes einfach machen | Certified Silverstripe Partner | www.eos-uptrade.de

  • Ironcheese
    Community Member
    5 Beiträge

    Re: Bild verlinkungen gehen beim Sprachenwechsel verloren

    Moin brokemeister,

    das mit der PageByLang Funktion hab ich inzwischen hinbekommen. Ich habs sogar hinbekommen dort einen Fallback auf Englisch einzubauen.

    public function PageByLang($url, $lang) {
          $SQL_url = Convert::raw2sql($url);
          $SQL_lang = Convert::raw2sql($lang);
       
             
          $page = Translatable::get_one_by_lang('SiteTree', $SQL_lang, "URLSegment = '$SQL_url'");
       
          if ($page->Locale != Translatable::get_current_locale()) {
             
             // Fallback to English
             if($page->hasTranslation(Translatable::get_current_locale())){
                $page = $page->getTranslation(Translatable::get_current_locale());
             }else{
                $page = $page->getTranslation('en_US');
             }
             
          }
          
          return $page;
       }


    Die anderen Probleme mit der englischen Masterpage habe ich heute vormittag auch (endlich) hinbekommen. Was mir jetzt noch fehlt ist diese "Fallback" Funktionalität in einem <% control Menu(x) %>

    Deine Tipp mit dem "dreizeiler" in der init() Funktion verstehe ich zwar, weiß aber nicht wie ich das umsetzen soll...
    Kann ich da einfach auf "$this->Locale" zugreifen? Und wie dann umleiten?

    Vielen Dank schonmal
  • brokemeister
    brokemeister Community Member
    76 Beiträge

    Re: Bild verlinkungen gehen beim Sprachenwechsel verloren

    Hi,

    Die anderen Probleme mit der englischen Masterpage habe ich heute vormittag auch (endlich) hinbekommen. Was mir jetzt noch fehlt ist diese "Fallback" Funktionalität in einem <% control Menu(x) %>

    Hier einfach eine neue Funktion MenuFallbackToDefaultLang() schreiben wie die PageByLang-Funktion, die ja eigentlich nur das gleiche macht wie die Page-Funktion.

    Deine Tipp mit dem "dreizeiler" in der init() Funktion verstehe ich zwar, weiß aber nicht wie ich das umsetzen soll...
    Kann ich da einfach auf "$this->Locale" zugreifen? Und wie dann umleiten?


    Im Controller befindet sich ja die Aktuelle-Seite. Hier kannst du einfach wie in deiner Funktion eine Überprüfen welche Sprache vorhanden ist...

    Gruß

    Malte

    EOS Uptrade GmbH - Komplexes einfach machen | Certified Silverstripe Partner | www.eos-uptrade.de

  • Ironcheese
    Community Member
    5 Beiträge

    Re: Bild verlinkungen gehen beim Sprachenwechsel verloren

    Moin Malte!

    Ich habs jetzt soweit hinbekommen, das die getMenu() Funktion mir die Level1 Punkte in der aktuellen Sprache und wenn es sie in dieser nicht gibt, in englisch zurückliefert. :D

    Aber ich brauche diese Funktionalität leider auch für die Unterseiten/level....

    Nur verstehe ich nicht genau wie ich das da anfassen soll.

    Hier meine aktuelle, modifizierte getMenu() Funktion.

       public function getMenu($level = 1) {
          if($level == 1) {
             $result = Translatable::get_by_locale("SiteTree", "en_US", "\"ShowInMenus\" = 1 AND \"ParentID\" = 0");

          } else {
             $parent = $this->data();
          
             $stack = array($parent);
             
             if($parent) {
                while($parent = $parent->Parent) {
                      
                   array_unshift($stack, $parent);
                }
             }
             
             if(isset($stack[$level-2])) $result = $stack[$level-2]->Children();
          }

          $visible = array();
          
          
          
          
          // Remove all entries the can not be viewed by the current user
          // We might need to create a show in menu permission
          if(isset($result)) {
             foreach($result as $page) {
                
                
                if($page->canView()) {
                   
                   if($page->hasTranslation(Translatable::get_current_locale())){
                      $page = $page->getTranslation(Translatable::get_current_locale());
                      $visible[] = $page;
                   }else{
                      $page = $page->getTranslation('en_US');
                      $visible[] = $page;
                   }
                   
                }
                
             }
             
          }
          
          return new DataObjectSet($visible);
       }


    Vielen Dank schon mal ;)

    gruß
    Alex
  • Ironcheese
    Community Member
    5 Beiträge

    Re: Bild verlinkungen gehen beim Sprachenwechsel verloren

    Moin Moin,

    kleines Update: ich habs ENDLICH so hinbekommen das ich (und später mein Kunde) damit arbeiten kann =)

    Hab das ganze jetzt per Decorator gelöst der sich beim "onBeforePublish" und "onAfterPublish" reinklinkt und einmal ein paar Custom DB Felder mit Variablen füllt und zum anderen automatisch für alle erlaubten Sprache ne Übersetzung anfertig, diese speichert und veröffentlicht.

    Diese Seite zeigt dann solange den "original" Content (also den der ersten Seite die erstellt worden ist) an, bis eine Checkbox im Backend deselektiert wird.

    *freu*

    Also, dieser Thread is damit praktisch *Solved*

Zur Zeit online: Zur Zeit ist leider niemand online.

Wir begrüßen unsere neuen Mitglieder: saerdna