RealURL preVar für Defaultsprache generell weglassen

  • krisc krisc
    T3PO
    0 x
    12 Beiträge
    0 Hilfreiche Beiträge
    15. 07. 2013, 14:48

    Hallo,

    wir arbeiten an einer Website mit TYPO3 6.0.2 und u.a. RealURL 1.12.6 und diversen fedext Extensions (vhs etc.)

    Es sind zwei Sprachen definiert:
    - Deutsch als Default (L=0)
    - Englisch (L=1)

    Wir benutzen das v:page.languageMenu zur Sprachumschaltung, was sehr gut funktioniert.

    In RealURL wird der L-Parameter auf eine preVar gemapped. was zu folgenden URLs führt:
    - http://www.example.com/startseite
    - http://www.example.com/de/startseite
    - http://www.example.com/en/start-page

    Ohne preVar wird versucht, die deutschen Inhalte abzurufen. Wenn man in die Seite einsteigt, landet man auf der deutschen Version, sämtlichen Links fehlt der preVar. Das ist aber von uns auch so gewünscht.

    Die Problemstellung: Springe ich in die englische Version der Seite und schalte dann über das languageMenu wieder auf deutsch um, so enthält die aufgerufene URL die preVar "/de/". Das funktioniert zwar und ist per se richtig, führt aber zu scheinbar doppeltem Content.

    Die Aufgabe lautet also, bei den Links zu deutschen Seiten nie den preVar "/de/" anzuzeigen bzw. allgemeiner: bei Links zur Defaultsprache nie den preVar für diese Defaultsprache anzuzeigen.

    Schaue ich in den Quellcode des languageMenu, so wird dort in der Funktion getLanguageUrl() u.a. der Parameter L in einem Array $getValues auf die entsprechende Sprache gesetzt, dann wird $this->cObj->typoLink aufgerufen. Dort wird intern noch RealURL verwendet, um den Link zu bilden.

    Ich habe in der RealURL-Doku nichts darüber gefunden, wie man über die Config den preVar für die Defaultsprache ausschalten könnte.

    Wenn ich in getLanguageUrl() im Falle der Standardsprache einfach die Definition für "L" in $getValues weglasse, so erzeugt typoLink/RealURL einen Link auf die englische Seite, weil das System aufgrund des Fehlens des Parameters "L" wohl denkt (denken muss), dass ein Link in der aktuellen Sprache erzeugt werden soll.

    Ich vermute also, dass der Parameter "L" auch bei einem Link für die Defaultsprache (auf einer Seite in einer anderen Sprache) übergeben werden muss an typoLink/RealURL.

    Daher sehe ich nur die Möglichkeit, in der RealURL-Config oder durch einen Hook (encodeSpURL_postProc) die URL zu verändern..

    Da ich für die Config nichts gefunden habe, bleibt nur der Hook. Vorher würde ich aber gerne nachfragen, ob ich evtl. irgendeine Konfigurationsmöglichkeit übersehen habe und es nicht doch ohne Hook geht.

    Für den Moment habe ich getLanguageUrl() gepatched, indem ich aus der von typoLink/RealURL zurück gelieferten URL einfach den preVar für die Standardsprache entferne. Was natürlich unsauber ist. Daher die Frage nach einer besseren Lösung.


  • 1
  • karlchen karlchen
    Jedi-General
    0 x
    1433 Beiträge
    30 Hilfreiche Beiträge
    15. 07. 2013, 20:44

    HI,

    im nächsten Projekt werde ich vor genau der Aufgabe stehen wie du jetzt, wäre daher auch an einer sauberen Lösung interessiert. :)

    Hast du eventuell schon probiert die realUrl Config an dieser Stelle anzupassen

    1. ...
    2. //Orig
    3. '1' => array (
    4. 'GETvar' => 'L',
    5. 'valueMap' => array (
    6. 'de' => '0',
    7. 'en' => '1',
    8. ),
    9. 'noMatch' => 'bypass',
    10. ),
    11.  
    12. //zu so was
    13. '1' => array (
    14. 'GETvar' => 'L',
    15. 'valueMap' => array (
    16. // 'de' => '0',
    17. 'en' => '1',
    18. ),
    19. 'noMatch' => 'bypass',
    20. ),

    Habe gerade nur keine Möglichkeit das zu testen.

  • Chrissli Chrissli
    Jedi-General
    0 x
    1015 Beiträge
    28 Hilfreiche Beiträge
    16. 07. 2013, 00:02

    Habt ihr mal getestet was passiert, wenn die Standardsprache per "valueDefault" in der RealURL-Config gesetzt ist? Wird diese dann trotzdem mit in die URL aufgenommen oder entfallen damit die doppelten URLs? Könnte mich täuschen, aber ich meine ich hatte mal eine Konstellation in der das (ungewollt) funktioniert hat.

    Alternativ könnte ich mir aber auch folgende Möglichkeiten vorstellen, auch wenn diese vielleicht nicht euren Zielen weiterhelfen:

    1. Wenn die Seite in der Standardsprache aufgerufen wird ( z.b. http://www.example.com/de/startseite ) automatisch einen Canonical-Tag zur sprachfreien URL generieren ( http://www.example.com/startseite ) oder umgekehrt, je nachdem was gewünscht ist. Das sollte sich ja mit stdWrap und typolink-Funktion relativ gut umsetzen lassen.

    2. Die Seiten ohne Sprache per .htaccess auf die Standardsprache leiten:

    1. RewriteEngine On
    2. #slash am ende erzwingen
    3. RewriteCond %{REQUEST_URI} !(.*)/$
    4. RewriteRule (.*) http://%{HTTP_HOST}/\$1/
    5. #so oder aehnlich muesste das aussehen
    6. RewriteRule ^/[^(a-z){2}]/(.*)$ http://%{HTTP_HOST}/de/\$2/ [R=301,L]

    Hab' leider die konkreten Regeln nicht zur Hand, aber ein wenig google und probieren führt sicher zum Ziel.

    God's in his heaven, all's right with the world

  • krisc krisc
    T3PO
    0 x
    12 Beiträge
    0 Hilfreiche Beiträge
    16. 07. 2013, 11:39

    Hallo,

    vielen Dank für die Rückmeldungen.

    @Chrissli: valueDefault hatte ich schon drin, das hatte nicht geholfen. EIn Redirect von URLs ohne Sprache auf die Standardsprache wäre genau das, was wir nicht wollen. o.O

    @karlchen: Es scheint tatsächlich zu funktionieren, wenn man "'de' => '0'," weglässt (und dann natürlich auch ''valueDefault' => 'de',').

    Ich werde die Seite mal eine Weile so laufen lassen und es beobachten.

  • karlchen karlchen
    Jedi-General
    0 x
    1433 Beiträge
    30 Hilfreiche Beiträge
    16. 07. 2013, 14:01

    [quote="krisc"]
    Hallo,

    vielen Dank für die Rückmeldungen.

    @Chrissli: valueDefault hatte ich schon drin, das hatte nicht geholfen. EIn Redirect von URLs ohne Sprache auf die Standardsprache wäre genau das, was wir nicht wollen. o.O

    @karlchen: Es scheint tatsächlich zu funktionieren, wenn man "'de' => '0'," weglässt (und dann natürlich auch ''valueDefault' => 'de',').

    Ich werde die Seite mal eine Weile so laufen lassen und es beobachten.

    [/quote]

    cool :)
    würde mich freuen wenn du noch mal Bescheid sagst ob doch noch irgendwo Probleme aufgetaucht sind :)

  • 1