Anfängerin braucht Hilfe - Navigation über URL
Lili
- php
0 fastix®0 Daniel0 Tobias Kloth0 Daniel0 Tobias Kloth0 Daniel0 Tobias Kloth0 Daniel
Hi ihr lieben,
habe heut zum ersten Mal mit PHP rumexperimentiert - jedoch weiß ich schon jetzt nicht mehr weiter :-|
Ich möchte eine Navigation über URL machen und über den Link noch zusätzliche Werte übergeben.
Aufbau der 2-Sprachigen-Seite:
index.php (Hier kann zwischen deutsch und englisch gewählt werden - Verknüpfung geht zu content_uk/index.php oder content_de/index.php)
config.php (Code s.h. unten)
info.php (Hier befindet sich ein Bild, welches in beiden Versionen vorkommen soll - lediglich der Text soll in der vorher ausgewählten Sprache angezeigt werden. Daher wäre es prima, wenn nur der eigentliche Text eingelesen wird: include ("content_de/info_text.php");
) - und dort komme ich nicht weiter.
test.php (unwichtig)
content_de/index.php (Hier befindet sich das Deutsche Menü mit dem Link: <a href="index.php?id=de_info">INFO</a>
)
content_de/info_text.php (Deutscher Text)
content_uk/index.php (Hier befindet sich das Englische Menü mit dem Link: <a href="index.php?id=uk_info">INFO</a>
)
content_uk/info_text.php (Englischer Text)
<?php
// config.php
$page = array();
// NEWS
$page['info'] = "../info.php";
$page['test'] = "../test.php";
?>
<?php
// news.php
include ("content_de/info_text.php");
?>
<?php
// content_de/index.php
include('../config.php');
if(isset($_GET['id']) AND isset($page[$_GET['id']]))
{
if(!file_exists($page[$_GET['id']])) echo "Die Seite ist nicht vorhanden.";
include $page[$_GET['id']];
}
else
{
include $page['test];
}
?>
Was kann ich machen, damit Werte, oder Variablen in der URL, oder config.php aus dem Deutschen- oder Englischen Menü übergeben werden?
Wichtig ist, beide sprechen "info.php" an, - jedoch sollen unterschiedlichen Seiten "includet" werden...
Liebe Grüße, Lili
Moin!
Aufruf mit
http://deinServer/seite.php?lang=de
oder
http://deinServer/seite.php?lang=en_uk
---
# Wir testen, ob Sprache gesetzt ist, ansonsten setzten wir diese auf deutsch:
if (!isset($_GET['lang']) {
$_GET['lang']='de';
}
# Festlegen des Include-Verzeichnisses:
$strIncludeDir='content_'.$_GET['lang']
# Testen, ob vorhanden:
if ( !file_exists ($_SERVER["DOCUMENT_ROOT"].$strIncludeDir.$_SERVER["SCRIPT_NAME"] ) {
# $_SERVER["DOCUMENT_ROOT = Serververzeichnis der Wurzel Deines Webauftritts
# $strIncludeDir: relativer Pfad zur Sprachdatei
# $_SERVER["SCRIPT_NAME"] = Verzeichnis und Name des aktuellen Skriptes
# Das zu includierende Skript muss in diesem Beispiel
# also einfach den gleichen Name haben wie
# das includierende Skript. -> info.php -> info.php
# Die Datei wurde also nicht gefunden:
header("HTTP/1.0 404 Not Found");
# Hier einbauen, was Du noch zu tun gedenkst
# zum Beispiel Weiterleitung zur Default-Sprache:
header ('Location: '.$_SERVER["HTTP_HOST"].$_SERVER["SCRIPT_NAME"].'?lang=de';
} else {
include $_SERVER["DOCUMENT_ROOT"].'content_'.$_GET['lang'].$_SERVER["SCRIPT_NAME"];
}
...
Die Bilder musst Du jetzt ausgehend von der includierenden (nicht der includierten!) Datei aus aufführen oder noch besser; verwende keine relativen Pfade, sondern absolute ('http://server.tld/verz/grafik.img')
MFFG (Mit freundlich- friedfertigem Grinsen)
fastix®
Ahoi fastix®,
Wir testen, ob Sprache gesetzt ist, ansonsten setzten wir diese auf deutsch:
if (!isset($_GET['lang']) {
$_GET['lang']='de';
}
Also ich hab das ganze etwas "genauer" bei einem von mir erstellten
projekt und setzt nicht gleich automatisch auf deutsch. allerdings
gings bei mir um deutsch/französisch statt deutsch/englisch, kann man
ja aber anpassen.
~~~php
if(isset($_GET['lang']))
{
if($_GET['lang'] == "de" || $_GET['lang'] == "fr")
{
$anzeige_sprache = $_GET['lang'];
}
else
{
$suchsprachen = array ('de', 'fr');
$anzeige_sprache = lang_getfrombrowser ($suchsprachen, 'de', null, false);
}
}
else
{
$suchsprachen = array ('de', 'fr');
$anzeige_sprache = lang_getfrombrowser ($suchsprachen, 'de', null, false);
}
// Browsersprache ermitteln
function lang_getfrombrowser ($sprachen_array, $stnd_sprache, $sprachen_variable = null, $strict_mode = true)
{
// $_SERVER['HTTP_ACCEPT_LANGUAGE'] verwenden, wenn keine Sprachvariable mitgegeben wurde
if ($sprachen_variable === null)
{
$sprachen_variable = $_SERVER['HTTP_ACCEPT_LANGUAGE'];
}
// wurde irgendwelche Information mitgeschickt?
if (empty($sprachen_variable))
{
// Nein? => Standardsprache zurückgeben
return $stnd_sprache;
}
// Den Header auftrennen
$aktezptierte_sprachen = preg_split('/,\s*/', $sprachen_variable);
// Die Standardwerte einstellen
$akt_sprache = $stnd_sprache;
$akt_quality = 0;
// Nun alle mitgegebenen Sprachen abarbeiten
foreach ($aktezptierte_sprachen as $aktzepiterte_sprache)
{
// Alle Infos über diese Sprache rausholen
$res = preg_match ('/^([a-z]{1,8}(?:-[a-z]{1,8})*)'.
'(?:;\s*q=(0(?:\.[0-9]{1,3})?|1(?:\.0{1,3})?))?$/i', $aktzepiterte_sprache, $matches);
// war die Syntax gültig?
if (!$res)
{
// Nein? Dann ignorieren
continue;
}
// Sprachcode holen und dann sofort in die Einzelteile trennen
$lang_code = explode ('-', $matches[1]);
// Wurde eine Qualität mitgegeben?
if (isset($matches[2]))
{
// die Qualität benutzen
$lang_quality = (float)$matches[2];
}
else
{
// Kompabilitätsmodus: Qualität 1 annehmen
$lang_quality = 1.0;
}
// Bis der Sprachcode leer ist...
while (count ($lang_code))
{
// mal sehen, ob der Sprachcode angeboten wird
if (in_array (strtolower (join ('-', $lang_code)), $sprachen_array))
{
// Qualität anschauen
if ($lang_quality > $akt_quality)
{
// diese Sprache verwenden
$akt_sprache = strtolower (join ('-', $lang_code));
$akt_quality = $lang_quality;
// Hier die innere while-Schleife verlassen
break;
}
}
// Wenn wir im strengen Modus sind, die Sprache nicht versuchen zu minimalisieren
if ($strict_mode)
{
// innere While-Schleife aufbrechen
break;
}
// den rechtesten Teil des Sprachcodes abschneiden
array_pop ($lang_code);
}
}
// die gefundene Sprache zurückgeben
return $akt_sprache;
}
MfG
Hallo Daniel,
function lang_getfrombrowser ($sprachen_array, $stnd_sprache, $sprachen_variable = null, $strict_mode = true)
[...]
Dass die Funktion aus http://aktuell.de.selfhtml.org/tippstricks/php/httpsprache/index.htm ist (nur mit deutschen Variablennamen), hättest du aber dazusagen und dir das Posten des Codes sparen können ...
Grüße aus Nürnberg
Tobias
Ahoi Tobias Kloth,
Dass die Funktion aus http://aktuell.de.selfhtml.org/tippstricks/php/httpsprache/index.htm ist (nur mit deutschen Variablennamen), hättest du aber dazusagen und dir das Posten des Codes sparen können ...
ich wusst nichmehr woher ich die funktion hatte, ist wohl diese und ja
die variablennamen hab ich eingedeutscht.
Tut mir echt leid das ich das nicht dazu geschrieben hab, ich wusst echt
nichmehr woher ich die hatte, aber das es nicht meine ist wusst ich
noch, das hätt ich dazu schreiben sollen.
MfG
Hallo Daniel,
ich wusst nichmehr woher ich die funktion hatte,
Dann such mal mit Google nach "lang_getfrombrowser" :-)
[...] die variablennamen hab ich eingedeutscht.
warum denn eigentlich?
Grüße aus Nürnberg
Tobias
Ahoi Tobias Kloth,
warum denn eigentlich?
Weil cih deutsche Variablenname bevorzuge, manchmal sind mir aber auch
englische lieber, ist ganz verschickt bei mir. ich sitz als da und
überleg mir wie ich die variable nennen könnte und mal fällt mir ein
englischer ein, meistens aber ein deutscher.
Woran das genau liegt kann ich nicht sagen.
MfG
Hallo Daniel,
Weil cih deutsche Variablenname bevorzuge, manchmal sind mir aber auch
englische lieber, ist ganz verschickt bei mir.
mhh... ich verwende meistens auch deutsche Variablennamen - aber bei fertigen Funktionen (wie der lang_getfrombrowser() eben) ist es mir relativ egal, ob die Variablen innerhalb der Funktion deutsche oder englische Namen haben.
Grüße aus Nürnberg
Tobias
Ahoi Tobias Kloth,
mhh... ich verwende meistens auch deutsche Variablennamen - aber bei fertigen Funktionen (wie der lang_getfrombrowser() eben) ist es mir relativ egal, ob die Variablen innerhalb der Funktion deutsche oder englische Namen haben.
ich hab mir den code halt nichtnur kopiert sondern ihn mir auch noch
angeschaut und deshalb die Variablennamen geändert.
MfG