realurl und die sprachumschaltung

  • doku doku
    Jedi-General
    0 x
    1624 Beiträge
    0 Hilfreiche Beiträge
    12. 07. 2004, 12:06

    kurze, aber [b:29fe183f9c]wichtige[/b:29fe183f9c] frage:

    hat hier irgendjemand (schon) die sprachumschaltung über das language.php-skript (bei den meisten wird es ja mit den flaggen verwendet) in verbindung mit der realurl-extension hinbekommen?

    ich meine hier ganz konkret die möglichkeit innerhalb einzelner seiten umzuschalten. daß mit dem skript auf die startseite in der alternativen sprache umgelenkt wird, ist kein problem.


  • AFisch AFisch
    R2-D2
    0 x
    74 Beiträge
    0 Hilfreiche Beiträge
    20. 07. 2004, 09:37

    Ach, das ist ja Lustig. ich dachte du weisst wie es geht :-)

    Gruß AFisch

  • doku doku
    Jedi-General
    0 x
    1624 Beiträge
    0 Hilfreiche Beiträge
    20. 07. 2004, 09:45

    ja, du hast recht, meine bemerkung in einem anderen thread läßt darauf schließen, aber da hatte ich bei dem dortigen beispiel nicht genau genug hingeguckt... :o

  • AFisch AFisch
    R2-D2
    0 x
    74 Beiträge
    0 Hilfreiche Beiträge
    20. 07. 2004, 10:56

    Also, das hat mir jetzt keine Ruhe gelassen :-)

    Also, erstmal

    #config.linkVars = L

    Die L Var im Setup auskomentieren, das dieses Konstrukt weg ist.

    Dann mit einer kleinen Anpassung im Lang Menu die Url umschreiben:

    [code:1:22a14e1293]
    $flags[] = '<a href="'.htmlspecialchars('index.php?id='.$GLOBALS['TSFE']->id.'&L=2&ch_lang=1').'" onfoc.......

    //Wurde Flag angeklickt
    if($_GET['ch_lang']=="1") {

    $domain=$_SERVER['HTTP_HOST'];
    $url_2go=$_SERVER['REQUEST_URI'];

    $url_2go=str_replace('&ch_lang=1','',$url_2go);
    $url_2go = preg_replace("/?id=(d+)&L=(d+)/","",$url_2go);

    //Und ab in die Wüste mit der hässlichen Url
    header('location: http://'.$domain.$url_2go);
    }
    [/code:1:22a14e1293]

    Kann durchaus sein, das hier und da ein Fehler passiert. Ist nicht getestet und stellt nur eine Idee dar.

    Gruß Holger

  • AFisch AFisch
    R2-D2
    0 x
    74 Beiträge
    0 Hilfreiche Beiträge
    20. 07. 2004, 12:49

    Und noch ein kleiner Nachtrag.

    Obige Lösung greift leider nicht wegen dem Seiten Cache.

    Folgendes schafft Abhilfe:

    [code:1:daa474f47a]
    $flags[] = '<a href="'.htmlspecialchars('index.php?id='.$GLOBALS['TSFE']->id.'&L=0&ch_lang=1&no_cache=1')....

    [.....]
    $url_2go = preg_replace("/?id=(d+)&L=(d+)&no_cache=1/","",$url_2go);
    [.....]
    [/code:1:daa474f47a]

    Nachteil ist halt, das die Seite dann in dem Momant nicht aus dem Cache kommt. Aber wer schön sein will muss leiden :-)

    Gruß AFisch

  • doku doku
    Jedi-General
    0 x
    1624 Beiträge
    0 Hilfreiche Beiträge
    21. 07. 2004, 16:21

    hi, leider leider gips eine fehlermeldung[code:1:dc49a7daa3]Warning: Cannot modify header information - headers already sent by (output started at /typo3_src-3.6.1/typo3/sysext/cms/tslib/index_ts.php:433) in /html/fileadmin/scripts/language-realurl.php on line 82[/code:1:dc49a7daa3]
    die sich genau auf die wichtigste zeile bezieht[code:1:dc49a7daa3]//Und ab in die Wüste mit der hässlichen Url
    header('location: http://'.$domain.$url_2go);[/code:1:dc49a7daa3] o.O

    der komplette beispielcode sieht übrigens jetzt so aus. vielleicht hab ich es ja auch völlig falsch "eingebaut"...?
    [code:1:dc49a7daa3]<?php

    $res = $GLOBALS['TYPO3_DB']->exec_SELECTquery('*', 'pages_language_overlay', 'pid='.intval($GLOBALS['TSFE']->id).$GLOBALS['TSFE']->sys_page->enableFields('pages_language_overlay'), 'sys_language_uid');

    $langArr = array();
    while($row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)) {
    $langArr[$row['sys_language_uid']] = $row['title'];
    }

    $pointer = '<img src="t3lib/gfx/content_client.gif" width="7" height="10" align="middle" alt="" />';

    $flags[] = ($GLOBALS['TSFE']->sys_language_uid==0?$pointer:'').'<a href="'.htmlspecialchars('index.php?id='.$GLOBALS['TSFE']->id.'&L=0&ch_lang=1&no_cache=1').'" target="_top"><img src="media/uploads/flag_uk.gif" width="21" height="13" hspace="5" border="0" alt="" /></a>';

    $flags[] = ($GLOBALS['TSFE']->sys_language_uid==1?$pointer:'').'<a href="'.htmlspecialchars('index.php?id='.$GLOBALS['TSFE']->id.'&L=1&ch_lang=1&no_cache=1').'" target="_top"><img src="media/uploads/flag_de'.($langArr[1]?'':'_d').'.gif" width="21" height="13" hspace="5" border="0" alt="" /></a>';

    if($_GET['ch_lang']=="1") {

    $domain=$_SERVER['HTTP_HOST'];
    $url_2go=$_SERVER['REQUEST_URI'];

    $url_2go = str_replace('&ch_lang=1','',$url_2go);
    $url_2go = preg_replace("/?id=(d+)&L=(d+)&no_cache=1/","",$url_2go);

    //Und ab in die Wüste mit der hässlichen Url
    header('location: http://'.$domain.$url_2go);
    }

    $content = '<table border="0" cellpadding="0" cellspacing="0"><tr><td><img src="clear.gif" width="30" height="1" alt="" /></td><td>'.implode('',$flags).'</td></tr></table>';

    ?>[/code:1:dc49a7daa3]

  • AFisch AFisch
    R2-D2
    0 x
    74 Beiträge
    0 Hilfreiche Beiträge
    21. 07. 2004, 18:24

    [quote:8a57d18614]Warning: Cannot modify header information - headers already....[/quote:8a57d18614]

    Nein, Eingebunden hast du es sicherlich nicht falsch. Wie gesagt, das mit dem Header senden ist ein böser Hack. Wahrscheinlich hast du irgend ein Extension in deiner Installation drin, die vor dem header in langMenu.php schon etwas an den Browser sendet. Dann kommt nähmlich die Fehlermeldung s.o. Kann unter Umständen auch an den Einstellungen von PHP liegen.

    Tja, also bei meinem Projekt funktioniert das so. Aber für eine bessere und sicherere Lösung muss man da wohl RealUrl an der entscheidenden Stelle patchen. Nur da ist kein Quick Hack drin, das muss man richtig machen.

    Werd mich in einer ruhigen Minute mal hinsetzen und das entwursteln.

    Gruß AFisch

  • doku doku
    Jedi-General
    0 x
    1624 Beiträge
    0 Hilfreiche Beiträge
    21. 07. 2004, 18:35

    wenn du dir tatsächlich die mühe machen solltest (und realurl wird bestimmt auf kurz oder lang zu den gebräuchlichsten extensions gehören) möchte ich gerne eine information an dich weiterleiten. ich hatte die frage nämlich auch schon in der typo3.org-mailingliste gepostet und da hat ingmar schlecht (der auch an der t3-entwicklung mitarbeitet) folgendes geantwortet:
    [quote:a4f431685f="Ingmar Schlecht"]Kleiner Tipp:
    Du musst die Datei language-menu.php so ändern, dass die Funktion typolink aus der Datei class.tslib_content.php zum Erstellen des Links verwendet wird.

    Siehe auch:
    http://typo3.org/documentation/mailing-lists/user-list-archive/thread/62/?tx_maillisttofaq_pi1%5Bmode%5D=5

    und

    http://typo3.org/documentation/mailing-lists/user-list-archive/thread/66/?tx_maillisttofaq_pi1%5Bmode%5D=5 [/quote:a4f431685f]
    das wäre sicherlich die sauberste lösung, ich kann aber nunmal leider kein stück php...

  • AFisch AFisch
    R2-D2
    0 x
    74 Beiträge
    0 Hilfreiche Beiträge
    21. 07. 2004, 19:02

    Danke für den Hinweis.

    Werd das ganze mal den Debuger laufen lassen. Ich muss nur die Stelle finden, an der die Url im Seiten-Cache landet.

    Wenn ich das gefunden habe muss ich mal sehen, wie man das am besten da rein strickt. Soll ja unter allen Umständen funktionieren.

    Gruß AFisch

  • AFisch AFisch
    R2-D2
    0 x
    74 Beiträge
    0 Hilfreiche Beiträge
    21. 07. 2004, 21:19

    So, der nächste Hack :-)

    An deine Url im Lang Menu wie gehabt diesen Parameter "&ch_lang=1" anhängen:

    [code:1:cb766e7781]
    <a href="'.htmlspecialchars('index.php?id='.$GLOBALS['TSFE']->id.'&L=0&ch_lang=1').'" onfo.......
    [/code:1:cb766e7781]

    und in Zeile 616 in "typo3conf/ext/realurl/class.ux_tslib_fe.php" folgendes einfügen was in //HH-Hack einkommentiert ist:

    [code:1:cb766e7781]
    [....]
    $result = array();

    //HH-Hack
    if(preg_match("/ch_lang=1/",$uri))
    $uri = preg_replace("/?id=(d+)&L=(d+)&ch_lang=1/","",$uri);
    //HH-Hack ende

    $parsed = parse_url($uri); // Let PHP do the first run
    [....]

    [/code:1:cb766e7781]

    Danach Cache und die real_url Tabelle leeren und Testen.

    Feedback erwünscht.

    Gruß AFisch