Zum Inhalt springen

realurl und die sprachumschaltung

Erstellt am 12. Juli 2004 · 42 Antworten · letzte Antwort am 16. November 2005 · Seite 2 von 3

Tags: RealURL, Frage

doku ·

ok, hier also die zusammenfassung für alle anderen zum mitschreiben... 😉

zwei (beispiel)versionen einer angepaßten example_languageMenu.php. sie dienen zum "seitengenauen" umschalten bei einer one-tree-fits-all umsetzung von mehreren sprachversionen einer website bei verwendung der extension realurl:

da wäre zum einen die klassische version mit den flaggen, die ja standardmäßig von typo3 mitgeliefert wird. hier mit english als id=0 und deutsch als id=1

<?php
/***************************************************************
*  Copyright notice
*
*  (c) 1999-2004 Kasper Skaarhoj (kasper@typo3.com)
*  All rights reserved
*
*  This script is part of the TYPO3 project. The TYPO3 project is
*  free software; you can redistribute it and/or modify
*  it under the terms of the GNU General Public License as published by
*  the Free Software Foundation; either version 2 of the License, or
*  (at your option) any later version.
*
*  The GNU General Public License can be found at
*  http://www.gnu.org/copyleft/gpl.html.
*  A copy is found in the textfile GPL.txt and important notices to the license
*  from the author is found in LICENSE.txt distributed with these scripts.
*
*
*  This script is distributed in the hope that it will be useful,
*  but WITHOUT ANY WARRANTY; without even the implied warranty of
*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
*  GNU General Public License for more details.
*
*  This copyright notice MUST APPEAR in all copies of the script!
***************************************************************/

$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').'" 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').'" target="_top"><img src="media/uploads/flag_de'.($langArr[1]?'':'_d').'.gif" width="21" height="13" hspace="5" border="0" alt="" /></a>';

$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>';

?>

zum anderen eine version, die textlinks liefert ("deutsch", bzw. "english"). es wird dabei immer nur ein link angezeigt (logischerweise nur der, der zur jeweils anderen sprache führt... 😉).

<?php
/***************************************************************
*  Copyright notice
*
*  (c) 1999-2003 Kasper Skårhøj (kasper@typo3.com)
*  All rights reserved
*
*  This script is part of the Typo3 project. The Typo3 project is
*  free software; you can redistribute it and/or modify
*  it under the terms of the GNU General Public License as published by
*  the Free Software Foundation; either version 2 of the License, or
*  (at your option) any later version.
*
*  The GNU General Public License can be found at
*  http://www.gnu.org/copyleft/gpl.html.
*  A copy is found in the textfile GPL.txt and important notices to the license
*  from the author is found in LICENSE.txt distributed with these scripts.
*
*
*  This script is distributed in the hope that it will be useful,
*  but WITHOUT ANY WARRANTY; without even the implied warranty of
*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
*  GNU General Public License for more details.
*
*  This copyright notice MUST APPEAR in all copies of the script!
***************************************************************/

$query = "SELECT * FROM pages_language_overlay WHERE pid=".$GLOBALS["TSFE"]->id.$GLOBALS["TSFE"]->sys_page->enableFields("pages_language_overlay")." GROUP BY sys_language_uid";

$res = mysql(TYPO3_db,$query);
$langArr=array();
while($row=mysql_fetch_assoc($res))        {
        $langArr[$row["sys_language_uid"]]=$row["title"];
}

$english = '[<a href="'.htmlspecialchars('index.php?id='.$GLOBALS['TSFE']->id.'&L=0&ch_lang=1').'">english</a>]';
$deutsch = '[<a href="'.htmlspecialchars('index.php?id='.$GLOBALS['TSFE']->id.'&L=1&ch_lang=1').'">deutsch</a>]';

$flags = array();
$flags[] = ($GLOBALS["TSFE"]->sys_language_uid==0?$deutsch:"");
$flags[] = ($GLOBALS["TSFE"]->sys_language_uid==1?$english:"");

$content = '<div style="position: absolute; text-align: right; right:0px; width:200px; height:15px; background-color:#ffffff;" class="language">'.implode("",$flags).'</div>';

?>

ich hatte hier übrigens einfach keinen bock $flags umzubenennen. es gibt natürlich keine flaggen...

alles funktioniert aber nur dann so schön, wenn man folgende änderung in typo3conf/ext/realurl/class.ux_tslib_fe.php (ungefähr zeile 616) macht

[....] 
$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 
[....]

nochmals großen dank an AFisch! 🙂

jenses ·

Funktioniert auch bei mir hervorragend mit 3 Sprachen.
Vielen Dank !

Ein kleines Problem gibt es jedoch :

Die EXT: Language Detection, die vorher automatisch die
entsprechende Startseite aufrief, je nachdem welche Sprache im Browser eingestellt war,
machts nicht mehr !

Habt ihr irgendwelche Tips dazu ?

mit freundlichen Grüßen
jenses

AFisch ·

Hy Jenses

Versuch mal in deinem TS-Template folgendes.

config.linkVars = L

und schau ob es dann wieder geht. Wenn nicht, muss ich mal in die Ext reinschauen.

Gruß AFisch

jenses ·

Hy AFisch,
das war ja 'ne schnelle Antwort !

Das config.linkVars = L habe ich natürlich im Template,
sonst würde ja auch die ganze Sprachumschaltung nicht laufen.

Das Problem muß woanders liegen,
vermutlich in der EXT: Language Detection.

viele Grüße
jenses

AFisch ·

Nein, brauchen tut man die bei RealUrl nicht. Bei mir gehts auch ohne. Und aus dem Grund; versuch es mal ohne.

Ansonsten wird da wohl was bei der zusammenarbeit der beiden Ext durch den kleinen Patch falsch laufen.

Die EXT: Language Detection macht nähmlich am Ende der main() Funktion folgendes:

header('Location: '.$locationURL.'&L='.$L);

Und dann kommt unser RealUrl Patch daher und schmeisst das doch gleich wieder raus.

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

Wird man nicht viel machen können so auf die schnelle.

Gruß AFisch

Edit: Hast du schon mal die RealURL Tabelle geleert?

jenses ·

Hai Afisch !

Danke für deine Mühe !

Also,
die config.linkVars = L habe ich auskommentiert,
real_url-Tabelle geleert, alle Chaches geleert,
Ergebnis:
EXT: Language Detection läuft nicht,
es wird immer Standardsprache Schwedisch aufgerufen.
Da kann man wohl nichts machen.

Gibt´s irgendeine andere Möglichkeit,
dem Zuschauer seine Sprachseite zu servieren ?

viele Grüße
jenses

AFisch ·

Rein theoretisch könnte man die Aufgabe der Spracherkennung einem externen index.php übertragen, das dann jeweils die von Typo3 richtig anspricht.

Das kann aber nicht die Lösung sein. Ich werd mich mal ran machen, wenn ich Zeit dazu finde. Im Moment siehts da aber mau aus. Kunden sind wie Wölfe. Die kommen immer im Rudel hab ich bald das Gefühl. *Nicht das ich mich beklagen würde* :-)

Gruß AFisch

jenses ·

Hallo AFisch!

Hab gerade festgestellt, das tt_news,
wenn man zur Single-Ansicht will,
schon die richtige Meldung aufruft,
aber das Template der Standardsprache benutzt
und auch auf das Standardsprachen-Menü umschaltet!

Also wieder rein mit config.linkVars = L ,
und tt_news funzt!

Immer diese gegenseitigen Auswirkungen in T3 #evil#

viele Grüße
jenses

jenses ·

Habe Robert Lemke, dem Autoren der EXT: Language Detection,
das Problem im Zusammenhang mit dem Real-URL-Hack erläutert.
Er hats auf seine ToDo-List gesetzt.
Weiß aber nicht, wann er da was machen kann.

AFisch ·

Super!

Ist sowieso sinnvoller wenn es auf der ToDo Liste der Autoren landet, als wenn ich in dem Zeug rumpatche :-)

Gruß AFisch

jenses ·

Bin gerade am Testen meiner neuen Seite.
[ RealUrl installiert und Hack eingebaut ]
Und was muß ich da feststellen ?

Das Klick-Vergrößern von Bildern funktioniert nicht mehr !
Es öffnet sich ein neues Fenster, die aber nicht das vergrößerte Bild enthält,
sondern die komplette Seite.
Breite und Höhe des Browserfensters haben wiederum
die zum Bild passenden Abmesseungen.

1. Spracherkennung funzt nicht
2. Klick-Vergrößern funzt nicht

--->> RealURL fliegt wieder raus !

viele Grüße
jenses

doku ·

das klick vergrößern funktioniert problemlos, wenn du die .htaccess so ergänzt, daß der weg zu showpic.php uploads/pics und /typo3temp gewiesen wird.

jenses ·

Hallo Doku !

Wie genau müßte denn dieser Eintrag aussehen ?

So

RewriteRule ^uploads/pics$ typo3/showpic.php [L]

funktioniert es nicht.

vielen Danke
jenses

doku ·
RewriteRule .*/showpic.(php)$ showpic.php [L]
RewriteRule .*/uploads/pics/(.*)$ uploads/pics/$1 [L]
RewriteRule .*/typo3temp/(.*)$ typo3temp/$1 [L]
eberhardt ·

Hallo,

dank der tollen Beiträge von AFisch und doku habe ich unter typo3_src-3.6.2 die realurl mit mehrsprachigkeit (de,L=0/en,L=1) ans Laufen gekriegt. Dafür zunächst ein herzliches Dankeschön!!!
Zusätzlich dazu möchte ich gerne auch noch die printer-friendly version aktivieren.

Habe in meinem typo3-Template-setup zu diesem Zweck folgendes:

marks.PRINT = TEXT 
marks.PRINT.data = field:uid
#marks.PRINT.parameter.data = field:uid
#marks.PRINT.data = getenv: REQUEST_URI 
#marks.PRINT.wrap = <a href="|.98.html"><img src="fileadmin/images/navi/print_icon.gif" border="0" alt="print page" title="Print Version"></a>
marks.PRINT.wrap = <a href="index.php?id=|&type=98"><img src="fileadmin/images/navi/print_icon.gif" border="0" alt="print page" title="Print Version"></a>
#marks.PRINT.wrap = <a href="|&type=98" target="_blank"><img src="fileadmin/images/navi/print_icon.gif" border="0" alt="print page" title="Print Version"></a>
#marks.PRINT.wrap = <a href="|&type=98"><img src="fileadmin/images/navi/print_icon.gif" border="0" alt="print page" title="Print Version"></a>

habe mal die auskommentierten - vergeblich probierten Varianten - dabeigelassen.

Dieses setup gibt natürlich immer nur die deutsche Seite aus. Müsste also die Sprachvariable mit übergeben, so etwa:

marks.PRINT.wrap = <a href="index.php?id=|&L=0&type=98"><img src="fileadmin/images/navi/print_icon.gif" border="0" alt="print page" title="Print Version"></a>

für deutsch, bzw.

marks.PRINT.wrap = <a href="index.php?id=|&L=1&type=98"><img src="fileadmin/images/navi/print_icon.gif" border="0" alt="print page" title="Print Version"></a>

für englisch.

Habe auch schon den Tipp von doku versucht, die Unterscheidung zwischen die globalVars zu schreiben in dem Stil:

config.linkVars = L

# English language, sys_language.uid = 1
[globalVar = GP:L = 1]
config.sys_language_uid = 1
config.language = en

#---------------------------------

marks.PRINT = COA 
marks.PRINT.wrap = <a href="index.php|&type=98&L=1"><img src="fileadmin/images/navi/print_icon.gif" border="0" alt="print page" title="Print Version"></a>
[else] 
marks.PRINT.wrap = <a href="index.php|&type=98"><img src="fileadmin/images/navi/print_icon.gif" border="0" alt="print page" title="Print Version"></a>

#---------------------------------

# French language, sys_language.uid = 2
#[globalVar = GP:L = 2]
#config.sys_language_uid = 2
#config.language = fr

# Italian language, sys_language.uid = 3
#[globalVar = GP:L = 3]
#config.sys_language_uid = 3
#config.language = it

[global]

Klappt aber nicht.
Hat jemand eine Ahnung, wie ich sich die 3 Komponenten
vereinbaren lassen?
Danke im Voraus

Eckhard

eberhardt ·

Hat sich erledigt, habs selbst gefunden:
warum schwierig wenns, auch einfach geht mit der
make_printlink extension:

marks.PRINT = IMAGE 
marks.PRINT.file = fileadmin/images/navi/print_icon.gif 
marks.PRINT.postUserFunc = tx_make_printlink 
marks.PRINT.stdWrap.postUserFunc = tx_make_printlink

ciao

eckhard

user667 ·

Hallo,

wollte eben Euren HH-Hack einbauen, musste aber feststellen, dass es die Datei
typo3conf/ext/realurl/class.ux_tslib_fe.php in RealURL Version 0.3.0 nicht mehr gibt. Desweiteren haben sich wohl die Variablennamen geändert (ich habe einfach mal nen grep über das Verzeichnis gemacht).

Weiss jemand, wie man es bei der neuen Version implementiert? Womöglich habe ich ja einfach etwas übersehen.

Thx...

Proximo ·

Sorry wenn ich nicht alle Posts gelesen habe aber meine Lösung schaut einfach so aus:

# simStatic
config.simulateStaticDocuments = 1
config.simulateStaticDocuments_pEnc = md5
config.simulateStaticDocuments_addTitle=22
config.simulateStaticDocuments_pEnc_onlyP = L

MFG Proximo