Zum Inhalt springen

RealUrl mit Sprachen und Flaggen

Erstellt am 27. August 2006 · 7 Antworten · letzte Antwort am 22. Oktober 2006

Tags: RealURL, URLs & Routing, Frage

Outlaw ·

Hallo Leute,

habe gestern den ganzen Tag damit verbracht RealUrl zufriedenstellend zum Laufen zu bekommen, habe es dann aber letztendlich aufgegeben, da mir das Teil dann doch zu viel war.

Versteht mich nicht falsch, ich schrecke normalerweise vor nix zurück und überwiegend habe ich die Zeit hier im Forum gesucht, alles ausprobiert und auch Google kennt mih jetzt mit dem Vornamen aber alles half nichts.

Nun wende ich mich an Euch.

Mein Wunsch:

2 Sprachen (DE und EN), gescheite URLs und das Flaggenmenü von Kaspars Beispiel.

Die URLs sollten so aussehen:

www.testtest.tld/de/test.html
www.testtest.tld/en/test.html

Also die Sprache soll in der URL immer erscheinen, auch wenn die Standardsprache aktiv ist und beim 1. Start der Seite die Sprache nicht gewechselt wurde.

Zudem soll das Menü (ala left-menue) nicht mit erscheinen. Hier wurde immer wieder darauf hingewiesen, daß man das im RealUrl einzeln änderbar sei, ich habe aber auch gelesen, daß das über das RealURL Script generell anpassbar sein soll, das habe ich aber nicht mehr ausprobiert, da ich erst die anderen Probleme beseitigen muß.

Ich bin soweit gekommen, daß im Prinzip alles so lief, wie ich mir das vorgestellt hatte, bis auf die Flaggen, da musste noch was angepasst werden, danach fingen die Probleme an.

Denn dann ging plötzlich RealUrl nicht mehr komplett, es wurden zwar die URLs noch umgewandelt, jedoch nur noch in Verzeichnisse in Zahlen ..../10/.

Ich habe aufgegeben und Real komplett neu installiert und konfiguriert, jedoch habe ich jetzt trotz cleaner Datenbanken andere Probleme:

1. Neue Seiten werden nicht berücksichtigt

Hierbei stellte ich fest, daß bei neuen Seiten im ID-To-Path Bereich die neue Sprache nicht berücksichtigt wird, auch hatte ich ausversehen beim Impressum eine Sprache gelöscht, weil ich statt auf edit auf den trash geklickt hatte. Ich habe es nicht geschafft, das wieder hinzubekommen, lediglich eine Kopie der 1. Sprache mit passender Fehlermeldung war noch zu schaffen.

2. Fehlermeldungen nach Leeren des Caches

Wenn ich die Caches geleert hatte, kam beim 1. Aufruf (egal welcher Seite) nach dem ändern der Sprache eine Fehlermeldung, bei der ein 2. Argument vermisst wurde. Ich vermutete den Zusammenhang mit Punkt 1.
Wenn ich einen Browserrerload machte, war der Fehler weg und die Seiten in Ordnung, bis ich wieder die Chaches manuell leerte.
Wenn ich das Impressum mit der fehlenden Sprachberücksichtigung bei RealUrl entfernt habe, lief wieder alles einwandfrei, auch nach dem Leeren der Chaches, daher vermute ich das Problem eben in diesem Zusammenhang.
Natürlich habe ich das Problem auch, wenn ich eine völlig neue Seite anlege, die mir aus unerfindlichen Gründen die 2. Sprache in RealUrl nicht berücksichtigt (ID-To-Path nur mit Standardsprache). Alle Seiten, die vor RealUrl erstellt wurden, passen prima, jedoch wenn ich jetzt RealUrl lösche, weitere Seiten hinzufüge und dann RealUrl installiere, geht es plötzlich auch nicht mehr, zudem kann das ja nicht die Lösung sein.

Ich habe jetzt alles wieder komplett entfernt (also RealUrl und die passende Erweiterung, die Fehler beseitigen soll).

Nun suche ich was Passendes, bei dem mein Wunsch doch noch in Erfüllung gehen kann, vielleicht könnt Ihr mir ja mit Schritt für Schritt Hilfen weiterhelfen, zudem bräuchte ich noch ein passendes Skript für die Datei ext_localconf.php, alles, was ich gefunden habe, passte entweder nicht zu den Sprachen oder es waren diverse Erweiterungen dabei (wie tt_news oder so), bei denen ich nicht wusste, was nun zu meinem Vorhaben gehört und was nicht.

Meine Konfig:

SuSE 9.1 Server mit Apache 2 und KrimsKrams,
Safe_Mode on (läuft prima),
Register_globals off (läuft auch prima)
(zu SM und RG: auch off und on brachte nix)
Typo3 4.0.1

Mein KnowHow:
Reicht zum Designen und im TypoScripten bin ich Newbee, habe aber keine Angst davor, mein Template hat schon 102 Zeilen (*stolzbin*), für TemplaVoila hat mein Wissen aber noch nicht gereicht, daher lerne ich jetzt erst mal die Standardgeschichte.

Und ein Buch habe ich auch, ein 2. kommt bald, Ihr seht also, ich bemühe mich ....

Gruß
Outi

steffenk ·

moin outlaw,

Du gehst da vielleicht zu radikal ran - immer deinstallieren und installieren löst keine Probleme, die kommen dann an den Stellen wieder neu.

Realurl ist nicht leicht zu konfigurieren, da braucht man php-Kentnisse, um den Schnipsel in der localconf.php zu bearbeiten.

Das Flaggenmenü schreibt die Links "hart" - das muss also mit Typo3-Methoden umgeschrieben werden.

Es gibt aber komfortable Tools, die einem das Konfigurieren von realurls abnehmen, so gibt es seit kurzem eine Ext "NETFORMIC individual RealURL" die einem die ganze Arbeit abnimmt und man gezielt das Aussehen der Url vorgeben kann.
Gib doch mal in der Extensionsuche realurl ein - da siehst Du wieviel es da gibt.

Outlaw ·

Hallo steffenk,

danke für Deine Info, werde mir das mal ansehen.

Generell stimme ich Dir da zu, jedoch sehe ich bei mir ein anderes Problem:

Meine Probleme liegen nicht im generellen Verwalten und Benutzen dieser Erweiterungen und auch PHP ist kein Neuland für mich. Bei mir scheitert es an der generellen Funktion.

Das Deinstallieren/Neuinstallieren war leider notwendig, da nichts mehr funktionierte, nach der Neuinstallation klappte wenigstens das Umwandeln der URLs wieder. Vorher ging aus unerfindlichen Gründen plötzlich das Skript nicht mehr, was /de/ und /en/ in die URL einbauen sollte. Das war dann eben damit wieder behoben.

Die anderen Fehler konnte ich nicht mehr nachvollziehen bzw. beseitigen, weil eben nur noch /6/ usw. angezeigt wurde.

Vielleicht kannst Du mir ja soweit helfen, in dem Du mir sagst, wo mein Problem liegt und was ich wo tun muß ....

Wie gesagt, die Konfiguration ist weniger das Problem, es geht mehr um die Funktion überhaupt, da scheitert es bereits.

Evtl. kann ich es ja nochmal dank Eurer Hilfe wagen, ich denke, mit der von Dir genannten Erweiterung kann ich was anfangen, wenn die Grundlagen funktionieren.

Zuerst muß ich aber das Phänomen mit der "Impressumsgeschichte" und der Nichtberückischtigung neuer danach angelegter Seiten beseitigen.

Evtl. habt Ihr mir ja noch den richtigen Teil für meine ext_localconf.php

Die selber zu schreiben, bin ich noch nicht fit genug ....

Gruß
Outi

Outlaw ·

So, da man ja ohne Infos nicht helfen kann, hier mal meine Schritte:
(ich habe RealURL komplett deleted, damit alles wieder sauber ist)

RealURL 1.1.0 per EXT Manager installiert
RealURL 1.1.0 aktiviert
Caches gelöscht und Updates durchgeführt

Schon hier fängt es an:

Code warnings:
(developer-relevant) No XCLASS inclusion code found in file "class.tx_realurl_userfunctest.php"

und

Naming annoyances:
(developer-relevant) modname 0 xMOD_tx_realurl_test

Aber keine Ahnung, ob das wichtig ist.

Mein Template beginnt so:

config.simulateStaticDocuments = 0
# config.simulateStaticDocuments_noTypeIfNoTitle = 1
config.spamProtectEmailAddresses = 1
config.linkVars = L
config.sys_language_uid = 0
config.language = de
config.baseURL = http://www.meinedomain.tld/
config.tx_realurl_enable = 1
config.uniqueLinkVars = 1
config.prefixLocalAnchors = all

Am Schluß des Templates hängt noch Folgendes:

[globalVar = GP:L = 1]
    config.sys_language_uid = 1
    config.language = en
[global]

Meine URLs sehen jetzt so aus:

Vor dem Sprachwechsel:

und nach dem Sprachwechsel:

Was ja wegen den von Dir schon erwähnten Hardcodierungen kommt.

Springe ich wieder zurück oder bleibe in einer Sprache, sehen sie so aus:

Auch gut, soweit scheint RealURL noch zu funktionieren.

Auch das Impressum sieht noch gut aus, habe aber noch nix in ext_localconf.php eingetragen. Diese datei sieht noch so aus:

<?php

$TYPO3_CONF_VARS['SC_OPTIONS']['t3lib/class.t3lib_tstemplate.php']['linkData-PostProc']['tx_realurl'] = 'EXT:realurl/class.tx_realurl.php:&tx_realurl->encodeSpURL';
$TYPO3_CONF_VARS['SC_OPTIONS']['tslib/class.tslib_fe.php']['checkAlternativeIdMethods-PostProc']['tx_realurl'] = 'EXT:realurl/class.tx_realurl.php:&tx_realurl->decodeSpURL';
$TYPO3_CONF_VARS['SC_OPTIONS']['t3lib/class.t3lib_tcemain.php']['clearPageCacheEval']['tx_realurl'] = 'EXT:realurl/class.tx_realurl.php:&tx_realurl->clearPageCacheMgm';

$TYPO3_CONF_VARS['SC_OPTIONS']['t3lib/class.t3lib_tcemain.php']['clearAllCache_additionalTables']['tx_realurl_urldecodecache'] = 'tx_realurl_urldecodecache';
$TYPO3_CONF_VARS['SC_OPTIONS']['t3lib/class.t3lib_tcemain.php']['clearAllCache_additionalTables']['tx_realurl_urlencodecache'] = 'tx_realurl_urlencodecache';

$TYPO3_CONF_VARS['FE']['addRootLineFields'].= ',tx_realurl_pathsegment';

?>

Hier fiel mir bei der Webrecherche schon in der 1. Zeile der Unterschied auf:

$TYPO3_CONF_VARS['SC_OPTIONS']['t3lib/class.t3lib_tstemplate.php']['linkData-PostProc']['tx_realurl'] = 'EXT: ....

zu

$TYPO3_CONF_VARS['SC_OPTIONS']['t3lib/class.t3lib_tstemplate.php']['linkData-PostProc'][] = 'EXT: ....

Die 1. Zeile ist original aus RealURL, die 2. mit der leeren eckigen Klammer habe ich ausschließlich im Web gefunden und auch mehrmals hier ....

Nun schaue ich in den ID-To-Path und sehe bei allen Seiten mit beiden Sprachen sowas im Speaking-URL-Management:

Bild: img84.imageshack.us/…/pic1gs3.jpg

Aber leider wieder beim Impressum und analog zu allen neuen Seiten sieht es dann so aus oder teilweise nicht mal 1 Zeile:

Bild: img84.imageshack.us/…/pic2yn9.jpg

Wo ist also die 2. Zeile der englischen Sprache ??

Was mache ich jetzt ??

********

Nachtrag:

So sieht meine Flaggengeschichte noch aus:

<?php
/***************************************************************
*  Copyright notice
*
*  (c) 1999-2005 Kasper Skaarhoj (kasperYYYY@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!
***************************************************************/
/**
 * Creates a language-selector menu with three flags, an english, a danish and a german flag for each language supported on the site.
 *
 * THIS IS AN EXAMPLE designed to work with the official TYPO3 testsite, section "Another site in the ..."
 * You will have to program a similar menu for your own case.
 *
 * $Id: example_languageMenu.php 1425 2006-04-12 19:42:41Z ingmars $
 * Revised for TYPO3 3.6 June/2003 by Kasper Skaarhoj
 * XHTML compliant
 *
 * @author	Kasper Skaarhoj <kasperYYYY@typo3.com>
 */

if (!is_object($this)) die ('Error: No parent object present.');

 // First, select all pages_language_overlay records on the current page. Each represents a possibility for a language.
$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'];
}

// Little red arrow, which is inserted to the left of the flag-icon if the TSFE->sys_language_uid equals the language uid (notice that 0=english, 1=danish and 2=german is SPECIFIC to this database, because these numbers refer to uid's of the table sys_language)
$pointer = '<img src="'.t3lib_extMgm::siteRelPath('cms').'tslib/media/icons_misc/content_client.gif" width="7" height="10" align="middle" alt="" />';

// Set each icon. If the language is the current, red arrow is printed to the left. If the language is NOT found (represented by a pages_language_overlay record on this page), the icon is dimmed.
$flags = array();
$flags[] = ($GLOBALS['TSFE']->sys_language_uid==0?$pointer:'').'<a href="'.htmlspecialchars('index.php?id='.$GLOBALS['TSFE']->id.'&L=0').'" target="_top"><img src="typo3/sysext/cms/tslib/media/uploads/flag_de.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').'" target="_top"><img src="typo3/sysext/cms/tslib/media/uploads/flag_us.gif" width="21" height="13" hspace="5" border="0" alt="" /></a>';

// Make the little menu. Notice, the menu does ONLY transfer the page-id and the "L" variable (which is also SPECIFIC for this website because "L" has been used in the extension template used to control the language setup)
$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>';

?>

Was mir auch noch aufgefallen ist:

Daß alle per Dateiliste hochgeladenen Files im Windowsformat vorliegen (inkl. CTRL-M Zeichen), was aber jetzt nix mit dem Problemen zu tun hat, habe alle Files wieder ins Linuxformat konvertiert ....

Evtl. hat ja da auch noch jemand nen Tip, wie man Typo3 dazu bringt, die Dateien per ASCII statt Binär hochzuladen ....

********

Gruß
Outi

(Meiomein, watt n langer Text .... *gg*)

Outlaw ·

So, meine Probleme sind endlich gelöst ....

Ich habe aus dem Buch "Typo3 Das Handbuch für Entwickler" den Beispielcode für die Datei ext_localconf.php in meine integriert und ein wenig mit den Optionen von RealURL "gespielt" und schon hat es geklappt.

Sowohl haben jetzt alle Seiten beide Pfade (Deutsch und Englisch) als auch ist die Fehlermeldung nach dem Cache leeren weg.

Die Sprachumschaltung mit den Flaggen konnte ich auch noch korrigieren, habe hier im Forum eine ältere Lösung gefunden, die die Links für RealURL unterstützt.

Fehlt nur noch die Möglichkeit, daß man statt in RealURL alle menue-links - und so weiter - nicht mühsam einzeln per Pfad rauswerfen muß, sondern daß man das im Skript von RealURL einfach ausblenden kann.

Habe mal irgendwo gelesen, daß das geht, kann es aber nicht mehr finden.

Soweit kann ich damit arbeiten, hab ja noch nicht so viele Seiten aber schön wäre es schon, zumal ja das bei jeder neu angelegten Seite (auch vom Redakteur) angepasst werden muß.

Gruß
Outi

djmk7000 ·

Hiho,

würde mich freuen, wenn Du mal Deine Lösung des Sprachmenus und der RealURL Config posten könntest. Ich such mir seit ein paar Tagen immer mal wieder nen Wolf daran... 😢

Sonst läuft bei mir auch Alles wunderbar, sprich, RealURL bindet die Sprache mit in die Links ein, nur mich würde halt interessieren, wie ich die PHP Datei ändern muss, damit die Links auf den Flaggen auch direkt "umgeschrieben" sind. (denn diese Links sind halt bei mir noch in der Form: index.php?id=32&L=2, als Bsp jetzt.)

Was hast Du denn gegen die Meldung "No XCLASS inclusion code found in file "class.tx_realurl_userfunctest.php"" im Ext-Manager unter RealURL gemacht? War die Meldung nach Deiner Reinstall von RealURL "einfach so" weg?

Schonmal vielen Dank! 😉

Outlaw ·

Die Reinstall hatte den Fehler nicht behoben, es waren dafür andere Probleme weg.

Wenn ich es noch richtig in Erinnerung habe, kann man die Meldung scheinbar ignorieren.

Hier meine Sprachauswahl Datei:

<?php
/***************************************************************
*  Copyright notice
*
*  (c) 1999-2005 Kasper Skaarhoj (kasperYYYY@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!
***************************************************************/
/**
 * Creates a language-selector menu with three flags, an english, a danish and a german flag for each language supported on the site.
 *
 * THIS IS AN EXAMPLE designed to work with the official TYPO3 testsite, section "Another site in the ..."
 * You will have to program a similar menu for your own case.
 *
 * $Id: example_languageMenu.php 1425 2006-04-12 19:42:41Z ingmars $
 * Revised for TYPO3 3.6 June/2003 by Kasper Skaarhoj
 * XHTML compliant
 *
 * @author	Kasper Skaarhoj <kasperYYYY@typo3.com>
 */

if (!is_object($this)) die ('Error: No parent object present.');

 // First, select all pages_language_overlay records on the current page. Each represents a possibility for a language.
$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'];
}

$linkarray = array(
    '0' => '',
    '1' => ''
);

$localTempl = new t3lib_TStemplate;
 
foreach($linkarray as $key=>$lang){
    $LD = $localTempl->linkData($GLOBALS['TSFE']->page,
	'', // $oTarget
        '', // $no_cache
	'', // $script
	'', // $overrideArray
	'&L='.$key, //.$def['uid'], // $addParams, need the & prefix to work
	'0');
    $linkarray[$key] = $LD['totalURL'];
}

// Little red arrow, which is inserted to the left of the flag-icon if the TSFE->sys_language_uid equals the language uid (notice that 0=english, 1=danish and 2=german is SPECIFIC to this database, because these numbers refer to uid's of the table sys_language)
$pointer = '<img src="'.t3lib_extMgm::siteRelPath('cms').'tslib/media/icons_misc/content_client.gif" width="7" height="10" align="middle" alt="" />';

// Set each icon. If the language is the current, red arrow is printed to the left. If the language is NOT found (represented by a pages_language_overlay record on this page), the icon is dimmed.
$flags = array();
$flags[] = ($GLOBALS['TSFE']->sys_language_uid==0?$pointer:'').'<a href="'.htmlspecialchars($linkarray[0]).'" target="_top"><img src="typo3/sysext/cms/tslib/media/uploads/flag_de.gif" width="21" height="13" hspace="5" border="0" alt="" /></a>';
$flags[] = ($GLOBALS['TSFE']->sys_language_uid==1?$pointer:'').'<a href="'.htmlspecialchars($linkarray[1]).'" target="_top"><img src="typo3/sysext/cms/tslib/media/uploads/flag_us.gif" width="21" height="13" hspace="5" border="0" alt="" /></a>';

// Make the little menu. Notice, the menu does ONLY transfer the page-id and the "L" variable (which is also SPECIFIC for this website because "L" has been used in the extension template used to control the language setup)
$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>';

?>