Zum Inhalt springen

realUrl, Multilanguage, Alias

Erstellt am 23. November 2006 · 16 Antworten · letzte Antwort am 26. November 2009

Tags: Frage

Unbekannter Benutzer ·

Hallo,
derzeit versuche ich mich mit realUrl auseinanderzusetzen - angemerkt sei, dass ich Dummie im Typo3-Bereich bin. Meine Suchen hier im Forum und im Internet führten mich zu Informationen, die ich derzeit leider nicht dechiffrieren kann.

Der Link von steffenk hat mir geholfen, das Prinzip der Mehrsprachigkeit und die erforderliche Anpassung für das One-Tree-Konzept auf die Beine zu stellen - klappt wunderbar.

Jetzt habe ich die realUrl-Extension installiert und die notwendigen Default-Anpassungen hinter mir. Habe ich einen Alias für eine Seite, so wird der Alias verwendet, sonst die ID - ich habe also sprechende links.

Genau hier liegt jedoch mein Problem. Unsere Defaultsprache ist de und jede Seite hat darüber hinaus noch die Sprachen tr + en. Einen Alias kann ich jedoch nur für die Defaultseite vergeben. Das hat zur Folge, dass wenn ich auf türkisch umstelle, der deutsche Seitenalias verwendet wird.

Wie kann ich jedoch dem System mitgeben, dass ich folgende Aufbauten möchte:
bei deutsch - pageid: 1, Titel: Home
www.xyz.com/de/home
bei türkisch - pageid: 1, Titel: Ana sayfa
www.xyz.com/tr/anasayfa
?
Das würde bedeuten, dass ich den Titel nicht benutzen kann, unter anderem auch wegen der sprachabhängigen Zeichenkodierung.
Gruss Mensch

Unbekannter Benutzer ·

😃 Tja, mein Problem ist gelöst.

PS an Moderator: Falls dies zuviel Overhead ist, bitte ich um Rückmeldung, so dass ich diesen Thread lösche.

Zusammenfassung für Dummies wie mich:

1. Umgebung auf Mehrsprachigkeit umstellen (hilfreicher link von steffenk: http://www.sk-typo3.de/Sprachumschaltung-mit-Links.210.0.html)

2. .htaccess - Datei installieren (hilfreicher link: http://typo3.org/documentation/document-library/extension-manuals/realurl/1.1.0/view/1/2/)

3. Über den Extension-Manager vom Backend die realUrl-Extension laden und installieren

4. Hier meine vorinstallierte Extension-Konfigurationsdatei (ext_localconf.php), an der ich nichts geändert habe im realUrl-Extension-Verzeichnis:

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

5. Mein auf der Root-Seite abgelegtes Template:

# RealURL konfigurieren
config.simulateStaticDocuments = 0
config.baseURL = http://www.MeineSeite.com/
config.tx_realurl_enable = 1
config.prefixLocalAnchors = all

# Multilanguage als HTML-Charset verwenden
config.renderCharset = utf-8
config.additionalHeaders = content-type:text/html;charset=utf-8

# PAGE-Objekt konfigurieren
r = PAGE
r.bodyTagMargins = 10
r.headerData.10 = TEXT
r.meta {
  keywords.field = keywords
  keywords.ifEmpty ( 
    xyz
  )
}

#Sprachkonfiguration
config.linkVars = L
config.uniqueLinkVars = 1

#Default-Sprache konfigurieren
config.sys_language_uid = 0
config.language = de
config.locale_all = de_DE.UTF8

#Wenn gewählte Sprache bzw. Default deutsch
temp.langlink1 = TEXT
temp.langlink1.value=türkçe
temp.langlink1.typolink.parameter.data = page:uid
temp.langlink1.typolink.additionalParams = &L=1
temp.langlink1.typolink.ATagParams = lang="tr" xml:lang="tr"

temp.langlink2 = TEXT
temp.langlink2.value=english
temp.langlink2.typolink.parameter.data = page:uid
temp.langlink2.typolink.additionalParams = &L=2
temp.langlink2.typolink.ATagParams = class="first" lang="en" xml:lang="en"

r.headerData.10.value = <meta name="content-language" content="deutsch, de" />

#Wenn gewählte Sprache türkce
[globalVar = GP:L = 1]
  config.sys_language_uid = 1
  config.language = tr
  config.locale_all = tr_TR.UTF8

  temp.langlink1 = TEXT
  temp.langlink1.value=deutsch
  temp.langlink1.typolink.parameter.data = page:uid
  temp.langlink1.typolink.additionalParams = &L=0
  temp.langlink1.typolink.ATagParams = class="first" lang="de" xml:lang="de"

  temp.langlink2 = TEXT
  temp.langlink2.value=english
  temp.langlink2.typolink.parameter.data = page:uid
  temp.langlink2.typolink.additionalParams = &L=2
  temp.langlink2.typolink.ATagParams = lang="en" xml:lang="en"

  r.headerData.10.value = <meta name="content-language" content="türkce, tr" />
[global]

#Wenn gewählte Sprache english
[globalVar = GP:L = 2]
  config.sys_language_uid = 2
  config.language = en
  config.locale_all = en_EN.UTF8

  temp.langlink1 = TEXT
  temp.langlink1.value=türkçe
  temp.langlink1.typolink.parameter.data = page:uid
  temp.langlink1.typolink.additionalParams = &L=1
  temp.langlink1.typolink.ATagParams = lang="tr" xml:lang="tr"

  temp.langlink2 = TEXT
  temp.langlink2.value=deutsch
  temp.langlink2.typolink.parameter.data = page:uid
  temp.langlink2.typolink.additionalParams = &L=0
  temp.langlink2.typolink.ATagParams = class="first" lang="de" xml:lang="de"

  r.headerData.10.value = <meta name="content-language" content="english, en" />
[global] 

r.10 = TEMPLATE
r.10 {
  template = FILE
  template.file = fileadmin/templates/designvorlage.html
  workOnSubpart = BODY

  marks.SPRACHE = COA
  marks.SPRACHE {
    10 < temp.langlink1
    10.wrap = |<br />
  
    20 < temp.langlink2
    20.wrap = |<br />
  }
}

6. In der localconf.php, von mir manuell eingetragene Konfigurationsparameter für realUrl:

$TYPO3_CONF_VARS['EXTCONF']['realurl']['_DEFAULT'] = array(
   'preVars' => array(
      array(
         'GETvar' => 'L',
         'valueMap' => array(
            'de' => '0',
            'tr' => '1',
            'en' => '2',
         ),
         'valueDefault' => 'de',
      ),
   ),
   'pagePath' => array(
      'type' => 'user',
      'userFunc' =>
      'EXT:realurl/class.tx_realurl_advanced.php:&tx_realurl_advanced->main',
      'spaceCharacter' => '-',
      'languageGetVar' => 'L',
      'expireDays' => 3,
      'rootpage_id' => '70'
   ),
   'fileName' => array (
      'defaultToHTMLsuffixOnPrev' => 1,
      'index' => array(
         'page.html' => array(
            'keyValues' => array (
            'type' => 1,
            ),
         ),
      ),
   ),
 );

Nach diesem gesamten sieht meine sprechende URL folgendermassen aus:
http: // www. MeineSeite. com / de / rezepte / rezeptesuchen.html
Typo3_site_url: http: // www. MeineSeite. com /
realUrl-Arraybereich preVars: entweder de/ oder tr/ oder en/
realUrl-Arraybereich pagePath: rezepte/rezeptesuchen
realUrl-Arraybereich fileName: .html

Ohne den gesamten Bereich von FileName, würde die URL so aussehen:
http: // www. MeineSeite. com / de / rezepte / rezeptesuchen /
Bei dieser Variante würde eine Fehlermeldung ausgegeben, falls jemand manuell die URL eingibt und das Slash am Ende vergisst. Um dies zu verhindern, ist diese Einstellung, die das fehlende End-slash ergänzt, hilfreich:

   'init' => array(
      'appendMissingSlash' => 'TRUE',
   ),

Was ich nicht wusste und auch nirgendwo nachlesen konnte, war, was der Aufruf von class.tx_realurl_advanced.php automatisch im PagePath-Bereich bewirkt:
1. Falls kein Alias vorhanden ist, nimmt er den Seiten-Titel und wandelt die Zeichen in URL-konforme Zeichen um. Kleinschreibung, aus ä wird ae und über den spaceCharacter werden Seitennamen, die aus mehreren Wörtern bestehen, in folgender Form zusammengefügt: wort1-wort2.
2. Gibt man noch den Parameter bei languageGetVar mit, so werden sogar die Seitentitel der für die jeweilige Sprache definierten Seiten genommen. Also de = rezepte, tr = tarifler, en = recipes

Bei diesem gesamten Konstrukt bin ich jedoch auf Fehler gelaufen, weil auf einer Seite noch ein Alias lag. Nachdem ich diesen gelöscht habe, klappte alles so wie ich es wollte.

Gruss Mensch

Unbekannter Benutzer ·

Hi Daviz,
nach wie vor mache ich viel ohne Sachverstand und mit der Zeit kommt auch zwar wenig aber doch etwas Verständnis in diese gesamte Sache. Nur - leider kann ich Dir adhoc nicht helfen. Als erstes käme mir in den Sinn, dass der Cache von RealUrl nicht gelöscht wird. Hast Du in der localconf.php nachfolgende Zeilen stehen?

// Begin: inserted by Mensch realurl - Flush RealURL Cache
$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['SC_OPTIONS']['t3lib/class.t3lib_tcemain.php']['clearAllCache_additionalTables']['tx_realurl_pathcache'] = 'tx_realurl_pathcache';
// End: inserted by Mensch realurl - Flush RealURL Cache

Diese Codezeilen habe ich auch aus diesem Forum und sie bewirken, dass wenn Du in Deiner Backend-Administration auf "FE-Cache löschen" gehst, auch die virtuellen Pfade von RealUrl gelöscht werden, sonst bleiben diese für immer und ewig stehen. Ganz schön blöde, da ich zwei Tage vor diesem Problem stand - Grund: hatte eine Seite umbenannt und anders positioniert, aber der virtuelle Pfad war nach wie vor der alte.

Wenn das nicht hilft, dann hast Du eine andere Konfiguration als ich. Hier müsstest Du dann vergleichen.

Ach ja, damit Deine Seite auch automatisch (ohne Änderungen an der Konfiguration) index.html durch RealUrl benannt werden soll, muss Deine Seite auch index heissen (meine Startseite heisst home), nur ich weiss nicht, ob dies eventuell zu Kollisionen führen kann. Musste mal testen.
Gruss Mensch

Daviz ·

Hallo Mensch,

danke für deine Antwort. Ich benutze RealUrl Managment um den Cache von RealUrl zu löschen.

Meine Startseite index zu nennen wird nicht helfen. Sie hat ja einen Namen der aber schon nicht beachtet wird. Die Startseite wird einfach "unterschlagen" (www.meinesite.de) bzw wenn ich auf eine andere Sprache klicke dann heisst sie www.meinesite.de/en.html oder www.meinesite.de/es.html.

Den Hebel wird man wohl woanders ansetzen müssen. Falls ich eine Antwort finde (ich weiss noch nicht wieviel Suchen mir sie wert ist) dann melde ich mich.

Liebe Grüße,
David

ktm-david ·

Hallo Mensch

Vielen Dank für Deine Ausführungen!

Ich habe soeben alles von Dir kopiert (Ja, ich schulde Dir was!).

Resultat:
- Die sprechenden URLs werden fein generiert - das ist schon wesentlich mehr, als ich ohne Deine Hilfe auf die Reihe gekriegt habe.
- Die entsprechenden Seiten werden jedoch nicht gefunden:

Error!
Error. Reason: "hauptbereiche/reisen.html" could not be found, closest page matching is

Woran könnte das liegen?

Gruss David

ktm-david ·

Ach ja, hier noch die Daten

.htaccess:

RewriteEngine On
RewriteRule ^typo3$ - [L]
RewriteRule ^typo3/.*$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule .* index.php
# -------------------------
# ------ Define page ------
# -------------------------

seite = PAGE
seite {

# ------ Statische Seiten simulieren ------

	config.simulateStaticDocuments = 0
	config.baseURL = http://www.ktm-adventure.ch/typo3/
	config.tx_realurl_enable = 1
	config.prefixLocalAnchors = all

...}

localconf:

$TYPO3_CONF_VARS['EXTCONF']['realurl']['_DEFAULT'] = array(
   'pagePath' => array(
      'type' => 'user',
      'userFunc' =>
      'EXT:realurl/class.tx_realurl_advanced.php:&tx_realurl_advanced->main',
      'spaceCharacter' => '-',
      'languageGetVar' => 'L',
      'expireDays' => 3,
      'rootpage_id' => '70'
   ),
   'fileName' => array (
      'defaultToHTMLsuffixOnPrev' => 1,
      'index' => array(
         'page.html' => array(
            'keyValues' => array (
            'type' => 1,
            ),
         ),
      ),
   ),
 );

Ich hoffe, einem der Profis springt gleich der Fehler ins Auge...

Danke und Gruss
David

Unbekannter Benutzer ·

hi ktm-david,
leider bin ich bis auf einen Fall nicht auf Probleme gestossen, die derartiges bewirken. Ist Deine Präzens eine ganz normale, also ohne Redirect etc.?

Wenn ja, probiere folgendes mal aus:
FE Cache löschen
Auf die Startpage gehen
F5
und die Seiten einzeln abgrasen.

Sonst kann ich Dir leider nicht weiterhelfen, Recherchen über Google haben leider auch nix gebracht.
Gruss Mensch

Unbekannter Benutzer ·
seite = PAGE
seite {
 
# ------ Statische Seiten simulieren ------
 
        config.simulateStaticDocuments = 0
        config.baseURL = http://www.ktm-adventure.ch/typo3/
        config.tx_realurl_enable = 1
        config.prefixLocalAnchors = all
 
...}

Nimm bitte die Configuration aus PAGE raus.
Gruss Mensch

Unbekannter Benutzer · · Beste Antwort

Hallo zusammen,
nun hätte ich noch ne Frage zur RealURL.
Wie kann ich die .htaccess bzw. die RealURL so konfigurieren, daß die RealURL auf ein tatsächlich vorhandenes Unterverzeichnis nicht angewendet wird.
Beispiel:
www.meine-domain.de/Unterverzeichnis/index.html
Im Moment bringt mir Typo3 durch die RealURL folgenden Fehler:

Error!
Reason: Segment "Unterverzeichnis" was not a keyword for a postVarSet as expected!

Bei www.meine-domain.de/typo3 gehts ja auch, sonst käme keiner mehr ins Backend. Kann also nicht wirklich kompliziert sein, aber ich komm nicht drauf.
Wenn ich die .htaccess um das Unterverzeichnis ertweitere, kommt der Fehler trotzdem.

RewriteEngine On
RewriteCond %{HTTP_HOST} !^meine-domain\.de$
RewriteRule ^(.*)$ http://meine-domain..de/$1 [L,R=301]
RewriteRule ^typo3$ - [L]
RewriteRule ^typo3/.*$ - [L]
RewriteRule ^Unterverzeichnis/.*$ - [L]
RewriteRule ^Unterverzeichnis$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule .* index.php

Danke für die Antworten!
Beste Grüße,
Mimung

ktm-david ·

Hi Mensch

Besten Dank für Deine Antwort!

1) Nein, meine Page hat ein Redirect. Ich habe Typo3 aus historischen Gründen in einem Subverzeichnis (typo3) angelegt. Auf der Domain liegt nun ein htaccess, dass alles auf das Subverzeichnis umschreibt. Also: http://www.ktm-adventure.ch -> http://www.ktm-adventure.ch/typo3/
Könnte das einen negativen Einfluss haben?

2) Config habe ich aus Page rausgenommen, das hat aber keine Verbesserung gebracht.

3) Was meinst Du mit F5 und abgrasen? Also F5 hat bei mir einfach eine spezielle Funktion meines Browsers (Safari) unabhängig von Typo3.

Vielen Dank und Gruss
David

Unbekannter Benutzer ·

Hallo ktm-david,
leider muss ich jetzt das Handtuch schmeissen, da ich Dummie und kein Profi bin - ich kann Dir nicht weiterhelfen.
Hier muss ein Profi her.

Gruss Mensch

schikama ·
mensch schrieb

Bei dieser Variante würde eine Fehlermeldung ausgegeben, falls jemand manuell die URL eingibt und das Slash am Ende vergisst. Um dies zu verhindern, ist diese Einstellung, die das fehlende End-slash ergänzt, hilfreich:

   'init' => array(
      'appendMissingSlash' => 'TRUE',
   ),

Hallo Mensch!

dank deiner Hilfe konnte ich realurl ganz easy installieren und es läuft bestens. Allerdings hab ich das Problem mit den End-Slash, das oben beschrieben ist. Die Lösung steht ja schon da. Allerdings weiß ich nicht, wo ich den php-Code einfügen soll.

😢

Vielen Dank!
der Anfänger Schikama

Unbekannter Benutzer ·

Hallo Schikama,

dieses appendMissingSlash musst Du in der ext_localconf.php der realUrl-Extension eintragen und zwar:

$TYPO3_CONF_VARS['EXTCONF'] ['realurl'] ['_DEFAULT'] = array(
'init' => array(
...

Gruss Mensch

jesuspresley ·

Danke, Mensch, ganz hervorragende Beschreibung.
Ich musste nur die Liste der Sprachen anpassen:

'valueMap' => array(
            'de' => '0',
            'fr' => '2',
            'es' => '3',
            'en' => '4',            
         )

... sowie den Wert für die rootpage_id ändern:

      'rootpage_id' => '1'

Ansonsten konnte ich das Meiste 1:1 übernehmen.