.php?section=...-Navigation

kajen_jeyam

Grünschnabel
Hallo liebe php-olics,

Ich arbeite gerade an einer website, die zwei sprachen hat, english und deutsch.

Auf der startseite sucht sich der Besucher die Sprache aus. http://jesmedia.comoj.com/enter_page/lang.php

Wenn man jetzt auf "Deutsch" klickt, wird mit der GET funktion lang.php?section=de aufgerufen. Nun meine Frage, wenn der Besucher sich auf der deutschen Seite befindet, ist es dann möglich die auf der Seite befindenden links mit der GET funktion zu laden? Also z.B. lang.php?section=de&news oder lang.php?section=de&kontakt. Oder gibt es da eine andere Lösung?

Bitte habt ein wenig Verständniss, da ich neu in php bin.

Hier die Datein, die ich benutzt habe:

lang.php
PHP:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Thomas Abend</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<link rel="stylesheet" type="text/css" media="all" href="style_lng.css" />

</head>



<body>
<?php
if($_GET['section'] != ""){
    $filename = $_GET['section'].".php";
    if(file_exists($filename)){
        include($filename);
    }
        else{
               include ('enterpage.php');
        }
}
else{
    #echo "Text für die Startseite oder den Inhalt aus einer Datei Includen!";
    
    $filename = 'enterpage.php';
    if(file_exists($filename)){
        include($filename);
    }
}
?>




</body>
</html>



<div id="wrapper">


<div id="div_1_left"><img src="img/div_1_left.jpg" width="315" height="176" alt="thomas_abend" />
</div>

<div id="div_2">

<div id="div_2_1_middle"></div>
<a href="lang.php?section=de"><div id="div_2_2_middle" class="lng_select">Deutsch</div></a>
<div id="div_2_3_middle"></div>
<a href="lang.php?section=en"><div id="div_2_4_middle" class="lng_select">English</div></a>
<div id="div_2_5_middle"></div>

</div>


<div id="div_3_right">
</div>






</div>

<div id="welcome" class="welcome1">
  <p>Bitte wählen Sie eine Sprache aus.<br />
    Please choose a language.<br />
  </p>
</div>

de.php
German

en.php
English


Hier nochmals der Weblink, um es sich live anzusehen: http://jesmedia.comoj.com/enter_page/lang.php

Vielen Dank schonmal im Vorraus!
 
Zuletzt bearbeitet von einem Moderator:
Guten Morgen,

erst mal ein Tip vorweg. Es ist alles viel besser lesbar, wenn du auch die HTML Bereiche als Codebereiche definierst.
Ansonsten funktioniert das natürlich schon, sofern du die GET Werte richtig übergibst. Jeder Wert muß mit einem eigenen Namen übergeben werden.
HTML:
<a href="lang.php?lang=de&section=news'>Deutsch</a>
Außerdem muß natürlich noch ein zweites include mit rein, mit dem du die Sprachdatei importierst. In dem Fall sind also Texte und Layout sind von einander getrennt. Das macht vor allem dann Sinn, wenn immer wieder mal am Seitenaufbau gearbeitet wird oder später noch mehr Sprachen dazu kommen.
Eine alternative Möglichkeit wäre, jede Seite in jeder Sprache anzulegen, d.h. Kontakt und News und ... in deutsch und Kontakt und News und ... in englisch usw. Bei Designumbauten mußt du dann natürlich doppelt so viele Seiten ändern. Dann kannst du aber Sprache und Seite in einen Wert packen und die Datei auch entsprechend benennen.
HTML:
<a href="lang.php?section=denews'>Deutsch</a>
 
Guten Morgen,

erst mal ein Tip vorweg. Es ist alles viel besser lesbar, wenn du auch die HTML Bereiche als Codebereiche definierst.
Ansonsten funktioniert das natürlich schon, sofern du die GET Werte richtig übergibst. Jeder Wert muß mit einem eigenen Namen übergeben werden.
HTML:
<a href="lang.php?lang=de&section=news'>Deutsch</a>
Außerdem muß natürlich noch ein zweites include mit rein, mit dem du die Sprachdatei importierst. In dem Fall sind also Texte und Layout sind von einander getrennt. Das macht vor allem dann Sinn, wenn immer wieder mal am Seitenaufbau gearbeitet wird oder später noch mehr Sprachen dazu kommen.
Eine alternative Möglichkeit wäre, jede Seite in jeder Sprache anzulegen, d.h. Kontakt und News und ... in deutsch und Kontakt und News und ... in englisch usw. Bei Designumbauten mußt du dann natürlich doppelt so viele Seiten ändern. Dann kannst du aber Sprache und Seite in einen Wert packen und die Datei auch entsprechend benennen.
HTML:
<a href="lang.php?section=denews'>Deutsch</a>

Vielen dank....ich glaub die erste variante sieht mir einfacher aus, gibt es da irgendwelche tutorials? Oder wie würde das funktionieren mit dem "index.php?lang=de&section=news" ?
 
Hi

du könntest dir entweder die Texte in einer Datenbank bzw in extra Dateien speichern und diese dann an entsprechender Stelle anzeigen. Oder du machst es dir einfach und speicherst jede Seite (inkl. HTML-Code) doppelt ab, einmal in einem ordern "./de" und einmal in "./en". Dann kannst du jenachdem welche Sprache angezeigt wird die entsprechende Datei includen:
PHP:
$default_language = "de";
$valid_languages = array("en","de");
$language = (isset($_GET["language"]) && in_array($_GET["language"],$valid_languages) )?$_GET["language"]:$default_language;

$default_section = "home";
$valid_sections = array("home","contact");
$section = (isset($_GET["section"]) && in_array($_GET["section"]) )?$_GET["section"]:$default_section;

$file = $language."/".$section.".php";
if( file_exists($file) )
  include_once $file;
else
  echo "Required page was not found.";
 
Die Version mit den gemischten Dateien hat Timestamp ja schon beschrieben. Ich persönlich bevorzuge die Variante mit den getrennten Sprachbereichen. Ist am Anfang etwas mehr Aufwand, dafür sind Änderungen am Layout später leichter auszuführen. Ist so ähnlich wie die Trennung von HTML und CSS.
Du mußt am Anfang nur beide übergebenen Werte empfangen und in die entsprechenden includes einfügen.
PHP:
// index.php
$lang = $_GET['lang'];
$section = $_GET['section'];
switch ($lang){
    case 'de':
        include ('lang/de.php');
        break;
    case 'gb':
        include ('lang/gb.php');
        break;
    default:
        include ('lang/de.php');
        break;
}
switch ($section){
    case 'home':
        include ('sites/home.php');
        break;
    case 'kontakt':
        include ('sites/kontakt.php');
        break;
    default:
        include ('sites/home.php');
        break;
}
In den Sprachdateien werden die einzelnen Inhalte z.B. als Konstanten eingetragen:
PHP:
// de.php
define('CONST_HOME', 'Hier der Text zu home');
define('CONST_KONTAKT', 'hier der Text für kontakt');

// gb.php
define('CONST_HOME', 'this is the home text');
define('CONST_KONTAKT', 'this is the text for kontakt');
Die layout-Datei ist dann eine ganz normale PHP Datei, in der an den entsprechenden Stellen die Konstanten aus der importierten Sprachdatei ausgegeben werden.
PHP:
// home.php
<div id="content"><?php echo CONST_HOME; ?></div>
 
Hi

du könntest dir entweder die Texte in einer Datenbank bzw in extra Dateien speichern und diese dann an entsprechender Stelle anzeigen. Oder du machst es dir einfach und speicherst jede Seite (inkl. HTML-Code) doppelt ab, einmal in einem ordern "./de" und einmal in "./en". Dann kannst du jenachdem welche Sprache angezeigt wird die entsprechende Datei includen:
PHP:
$default_language = "de";
$valid_languages = array("en","de");
$language = (isset($_GET["language"]) && in_array($_GET["language"],$valid_languages) )?$_GET["language"]:$default_language;

$default_section = "home";
$valid_sections = array("home","contact");
$section = (isset($_GET["section"]) && in_array($_GET["section"]) )?$_GET["section"]:$default_section;

$file = $language."/".$section.".php";
if( file_exists($file) )
  include_once $file;
else
  echo "Required page was not found.";

Danke dir, das hat mir etwas geholfen. Kann man das eigentlish per ID machen lassen? also vlt. "index.php?section=en&id=news" oder "index.php?section=en&id=contact" ?

Die Version mit den gemischten Dateien hat Timestamp ja schon beschrieben. Ich persönlich bevorzuge die Variante mit den getrennten Sprachbereichen. Ist am Anfang etwas mehr Aufwand, dafür sind Änderungen am Layout später leichter auszuführen. Ist so ähnlich wie die Trennung von HTML und CSS.
Du mußt am Anfang nur beide übergebenen Werte empfangen und in die entsprechenden includes einfügen.
PHP:
// index.php
$lang = $_GET['lang'];
$section = $_GET['section'];
switch ($lang){
    case 'de':
        include ('lang/de.php');
        break;
    case 'gb':
        include ('lang/gb.php');
        break;
    default:
        include ('lang/de.php');
        break;
}
switch ($section){
    case 'home':
        include ('sites/home.php');
        break;
    case 'kontakt':
        include ('sites/kontakt.php');
        break;
    default:
        include ('sites/home.php');
        break;
}
In den Sprachdateien werden die einzelnen Inhalte z.B. als Konstanten eingetragen:
PHP:
// de.php
define('CONST_HOME', 'Hier der Text zu home');
define('CONST_KONTAKT', 'hier der Text für kontakt');

// gb.php
define('CONST_HOME', 'this is the home text');
define('CONST_KONTAKT', 'this is the text for kontakt');
Die layout-Datei ist dann eine ganz normale PHP Datei, in der an den entsprechenden Stellen die Konstanten aus der importierten Sprachdatei ausgegeben werden.
PHP:
// home.php
<div id="content"><?php echo CONST_HOME; ?></div>

Danke! Könntest du vlt ein kleines Beispiel dafür uploaden? mit den ganzen files? wäre echt super!
 
kajen_jeyam hat gesagt.:
Danke! Könntest du vlt ein kleines Beispiel dafür uploaden? mit den ganzen files? wäre echt super!

www.sind-wir-deine-lakeien.de :D

Ne hier mal ein anderer Ansatz (für die Sprache) der dynamischer ist und ohne viele Zeilen auskommt:
PHP:
// Dateinamen erzeugen;
$file = "lang/" . basename($_GET['lang']) . ".php";
// Prüfen ob Datei existert
if (!file_exists($file))
{
  // Existiert nicht: Fehlermeldung und Standardsprache
  echo "Fehler. Standardsprache gewählt";
  $file = "lang/de.php";
}
// Sprachdatei einbinden
require_once $file;

Das einfache System kannst auf alle anderen Angaben (die per $_GET kommen) übertragen. Sollte wirklich (wirklich!) nicht schwer sein. Zur Not geb ich das bei meiner kleinen Schwester in Auftrag ;D
 
Dem ist eigentlich nichts hinzuzufügen.
Im Prinzip brauchst du die Codeteile nur in eigene Dateien Packen und bei der index noch das normale HTML Gerüst drumherum bauen und fertig ist das.
 
Zurück