[Frage] RealURL - "noMatch"=>"bypass" und "valueDefault" für Sprache gleichzeitig. [Gelöst] TYPO3-Version: 6.2.7

  • stefano37 stefano37
    Padawan
    0 x
    54 Beiträge
    0 Hilfreiche Beiträge
    14. 06. 2016, 16:15

    Hallo

    ich habe das Problem, das im RealURL Segment für die Sprache beliebieger Text eingegeben werden kann ohne das ein 404er geschmissen wird.
    Eine Besonderheit bei mir: meine Rootpage ist kein Shortcut mehr sondern vom Typ "Standard" und dafür "zeige Inhalt von Seite X".
    Als die Root-Seite noch ein Schortcut war, fiel das 404er Problem nicht so auf, da bei "not fopund" einfach auf die Shortcut-Seite weitergleiet wurde.

    ich habe hier folgende RealURL Einstellung (Auszug):

    1. 'preVars' => array(
    2. 'GETvar' => 'L',
    3. 'valueMap' => array(
    4. 'en' => '0',
    5. 'de' => '1',
    6. 'pl' => '2',
    7. 'es' => '3',
    8. 'nl' => '4',
    9. 'fr' => '5',
    10. 'cn' => '6',
    11. 'pt' => '7',
    12. 'it' => '8',
    13. 'sv' => '9',
    14. 'dk' => '10',
    15. 'ru' => '11',
    16. 'th' => '12',
    17. 'ua' => '13',
    18. 'hu' => '14',
    19. 'el' => '15',
    20. 'sr' => '16',
    21. 'sk' => '17',
    22. 'cs' => '18',
    23. 'bg' => '19',
    24. 'hr' => '20',
    25. 'tr' => '21',
    26. 'sl' => '22',
    27.  
    28. ),
    29.  
    30. 'valueDefault' => 'en',
    31. //'noMatch' => 'bypass', // muss auskommentiert sein, damit 'en' gesetzt wird, falls nichts gesetzt ist !
    32. ),

    Wenn ich "nomatch" einkommentiere, funktioniert der 404er, aber mein default value "en" wird nicht mehr gesetzt.

    Dieser soll aber unbedingt auch gesetzt werden, damit ich kein Duplicate Content bei den URLs habe (einmal mit und einmal ohne default langugage erreichbar).

  • stefano37 stefano37
    Padawan
    0 x
    54 Beiträge
    0 Hilfreiche Beiträge
    16. 06. 2016, 15:22 - Lösung

    Es sieht doch mehr so aus, als ob folgende Zeilen TS dafür gesorgt haben, dass "nomatch" und "valueDefault" gleichzeitig wirken.
    Durch diesen Code kann "valueDefault" in der realurl-config auskommentiert werden und stattdessen "nomatch" einkommentiert werden.

    1. //replaces realurl default
    2. config {
    3. defaultGetVars {
    4. L = 0
    5. }
    6. }


  • 1
  • stefano37 stefano37
    Padawan
    0 x
    54 Beiträge
    0 Hilfreiche Beiträge
    14. 06. 2016, 16:29

    ich habe nun die Klasse class.tx_realurl.php modifiziert so dass "valueDefault" und "nomatch=bypass" beide funktionieren:

    Ab Zeile 637die mit "stm" markierten Anpassungen gemacht:

    1. elseif ($setup['noMatch'] == 'bypass') {
    2. // If no match in reverse value map and "bypass" is set, remove the parameter from the URL
    3. // Must rebuild cHash because we remove a parameter!
    4. $this->rebuildCHash |= $parameterSet;
    5.  
    6. // stm - moved that part here to make work "nomatch" & "value default" together !
    7. if (isset($setup['valueDefault'])) {
    8. $prevVal = $setup['valueDefault'];
    9. $pathParts[] = rawurlencode($setup['valueDefault']);
    10. $this->cHashParameters[$GETvar] = $setup['valueMap'][$setup['valueDefault']];
    11. $this->rebuildCHash |= !$parameterSet;
    12. }
    13. }

    und in Zeile 671 die If Abfrage für ValueDefault etwas angepass:

    1. elseif (isset($setup['valueDefault']) && !($setup['noMatch'] == 'bypass')) { // stm - exclude case

    Somit laufen nun beide Optionen und ich kan in der realurl.conf folgendes Eintragen:

    1. ...
    2. 'tr' => '21',
    3. 'sl' => '22',
    4. ),
    5. 'valueDefault' => 'en', // valueDefault wird auch bei nomatch konsultiert (patched realurl)
    6. 'noMatch' => 'bypass', // muss normalerweise auskommentiert sein, damit 'en' gesetzt wird, falls nichts gesetzt ist ! realurl ist aber geptacht, so dass es geht
    7. ),// wir brauchen aber noMatch, um bei Pfadfehlern im ersten Segement einen 404er schmeissen zu können !

    Ausserdem bleibt bei dieser Version die Möglichkeit offen, die Sprachen für die Generierung der Links auf bestimmte Sprachen in einem Extension Template per TS zu beschränken. Dies geht z.B. mit folgendem Code:

    1. [globalVar = GP:L = 5]
    2. # limit the language to en,de so we wont produce links to pages in fr which doesnt exist
    3. config.linkVars = L(0-1)
    4. [global]

    In o.g. Beispiel habe ich eine einzelne Seite, die in der Sprache französich ist - Alle Links von ihr sollen aber in der Defaultsprache "en" abgehen.

  • stefano37 stefano37
    Padawan
    0 x
    54 Beiträge
    0 Hilfreiche Beiträge
    16. 06. 2016, 15:22

    Es sieht doch mehr so aus, als ob folgende Zeilen TS dafür gesorgt haben, dass "nomatch" und "valueDefault" gleichzeitig wirken.
    Durch diesen Code kann "valueDefault" in der realurl-config auskommentiert werden und stattdessen "nomatch" einkommentiert werden.

    1. //replaces realurl default
    2. config {
    3. defaultGetVars {
    4. L = 0
    5. }
    6. }

  • 1