
rauben
Ich baue eine Website mit zwei Sprachen und zwei Flaggen als Einstiegsseite. Ich plane die Verwendung <form method="post">
um die Flaggen, damit der Benutzer die gewünschte Sprache auswählen kann.
Dann möchte ich auf den folgenden Seiten so etwas verwenden wie:
<?php
if( $_POST['language']=='uk' ){
echo $uk;
}elseif( $_POST['language']=='french' ){
echo $french;}
?>
Wenn sie also auf die Flagge klicken, haben sie die gewünschte Sprache ausgewählt. Funktioniert das nur auf der nächsten Seite, nachdem sie auf die Flagge geklickt haben, oder können sie weiter zu verschiedenen Seiten navigieren und trotzdem erkennen, welche Sprache ausgewählt wurde?
Wenn das nicht geht, wie kann man es sonst machen?
AKTUALISIEREN:
Ich glaube nicht, dass ich vorher klargestellt habe, dass ich WordPress verwende, was anscheinend nicht gefällt $_SESSION
.
Ich habe dies auf einer Vorlage namens region.php, um die Sprachauswahl zu übermitteln:
<form action="<?php the_permalink(); ?>/home" name="region" method="post">
<div id="uk">
<a href="https://stackoverflow.com/questions/11796046/javascript:document.region.submit()" name="UK">
<img style="margin-bottom:10px;" src="https://stackoverflow.com/questions/11796046/<?php%20bloginfo("stylesheet_directory'); ?>/images/-uk.png" width="259" height="160" alt="UK" />
</a>
<h1 style="color:black!IMPORTANT;">Enter United Kingdom site</h1>
</div>
<div id="world">
<a href="https://stackoverflow.com/questions/11796046/javascript:document.region.submit()" name="World">
<img style="margin-bottom:10px;" src="https://stackoverflow.com/questions/11796046/<?php%20bloginfo("stylesheet_directory'); ?>/images/
world.png" width="258" height="160" alt="
Rest of the World" />
</a>
<h1 style="color:black!IMPORTANT;">Enter Rest of the World site</h1>
</div>
</form>
Was muss ich in jede andere Vorlage einfügen, um zu überprüfen, welche Sprache ausgewählt wurde? Um das Beispiel zu unterstützen, wenn UK ausgewählt wurde, kann es einfach “UK” wiedergeben, wenn der Rest der Welt ausgewählt wurde, kann es einfach “Welt” anzeigen.
Dies muss über mehrere Seiten hinweg funktionieren, wenn sie also auf die About-Seite gehen, wird die Sprache überprüft, und wenn sie dann zur Kontaktseite navigieren, wird die Sprache erneut überprüft – all das muss von der anfänglichen Sprachauswahl kommen.

Fluffeh
Ich würde die Auswahl in a fallen lassen $_SESSION
Variable. Das wird bei ihnen bleiben, bis sie gehen. Du könntest auch ganz nett ein Cookie verwenden. Eigentlich wäre eine Kombination der beiden großartig, sie bindet Benutzer, die Cookies nicht zulassen, auf einer Visit-to-Visit-Basis, und Leute, die Cookies aktiviert haben, müssen nur einmal auswählen.
Bearbeiten: Beispiel für Arbeitscode:
<form action="<?php the_permalink(); ?>/home" name="region" method="post">
<div id="uk">
<a href="https://stackoverflow.com/questions/11796046/javascript:document.region.submit()" name="UK">
<img style="margin-bottom:10px;" src="https://stackoverflow.com/questions/11796046/<?php%20bloginfo("stylesheet_directory'); ?>/images/=uk.png" width="259" height="160" alt="UK" />
</a>
<h1 style="color:black!IMPORTANT;">Enter United Kingdom site</h1>
</div>
<div id="world">
<a href="https://stackoverflow.com/questions/11796046/javascript:document.region.submit()" name="World">
<img style="margin-bottom:10px;" src="https://stackoverflow.com/questions/11796046/<?php%20bloginfo("stylesheet_directory'); ?>/images/world.png" width="258" height="160" alt="Rest of the World" />
</a>
<h1 style="color:black!IMPORTANT;">Enter Rest of the World site</h1>
</div>
</form>
// I assume that this form sends a POST request to the following page URL.
Seite, auf die das Formular umleitet:
<?php
session_start();
if(isset($_POST['country']))
// assuming that your form returns a field called 'country'...
{
$_SESSION['myCountry'] = htmlspecialchars($_POST['country']);
// Assumes that myCountry is now 'UK' or 'World'...
}
header('Location: http://www.example.com/yourIndexPage.php');
// You want to use a quick snippet to process the form and
// then redirect them away. This makes for less stupid BACK actions
// in the browser as well as data being resent to the code.
?>
IhreIndexseite.php
<?php
// As the $_SESSION is now set, we can use it in the page as follows:
session_start();
switch($_SESSION['myCountry'])
{
case 'UK':
echo $UK;
// And anything else you want to do with the UK language.
break;
case 'World':
echo $world;
// etc etc etc...
break;
default:
// echo out default stuff, probably 'World' at a guess.
break;
}
?>
Wenn Sie WordPress verwenden, sollten Sie dies wahrscheinlich tun lesen Sie dies.

Francis Yaconiello
Antworten
Erstens gibt es für das Hinzufügen regionaler / mehrsprachiger Unterstützung zu einer WordPress-Site keine bessere Alternative als dieses Plugin: http://wpml.org/. Es ist mit Kosten verbunden, aber es ist nicht unerschwinglich (Sie zahlen für großartigen Support).
Zweitens können Sie $_SESSION nicht standardmäßig verwenden. WP ist per Design zustandslos. Allerdings gibt es online unzählige Plugins und Tutorials, um diese Funktionalität zu erhalten.
Code-Zeug
Ihr ursprüngliches HTML-Formular hatte keine Eingaben. Es war ein Formular, das nichts übermittelte. Dieses Formular hat zwei Übermittlungen mit dem gleichen Namen location
. Unabhängig davon, welche Schaltfläche angeklickt wird, wird ihr Wert an die gesendet $_POST['location']
.
<form action="<?php the_permalink(); ?>/home" name="region" method="post">
<div id="uk">
<input type="submit" name="location" value="UK" />
<img style="margin-bottom:10px;" src="https://stackoverflow.com/questions/11796046/<?php%20bloginfo("stylesheet_directory'); ?>/images/uk.png" width="259" height="160" alt="UK" />
<h1 style="color:black!IMPORTANT;">Enter United Kingdom site</h1>
</div>
<div id="world">
<input type="submit" name="location" value="World" />
<img style="margin-bottom:10px;" src="https://stackoverflow.com/questions/11796046/<?php%20bloginfo("stylesheet_directory'); ?>/images/world.png" width="258" height="160" alt="Rest of the World" />
<h1 style="color:black!IMPORTANT;">Enter Rest of the World site</h1>
</div>
</form>
Schreiben Sie eine WordPress-Aktion, um den Beitrag zu bearbeiten. Fügen Sie dies der Funktionsdatei Ihres Designs hinzu. ansehen http://php.net/manual/en/function.setcookie.php für setcookie-Dokumente.
function set_location_cookie()
{
if(isset($_POST['location']))
{
setcookie('location', $_POST['location'], time()+1209600);
}
}
add_action('init', 'set_location_cookie');
Dann, wo immer Sie den Standort wissen möchten:
<?php echo $_COOKIE["location"]; ?>
ZUSÄTZLICHE INFORMATION
Ich habe zunächst auf UK geklickt, um damit zu beginnen, und dies hat das Cookie gesetzt. Ich bin dann zurückgegangen und habe auf World geklickt, aber das hat das Cookie mit world nicht kopiert, es hat nur wieder UK angezeigt. Ist es möglich, bei jeder anderen Auswahl über das Cookie zu wischen?
Dies ist also ein Problem bezüglich der Funktionsweise von Cookies auf technischer Ebene:
Wenn der Browser dies tut [requests a site]wird es auf Ihrem Computer nach einer Cookie-Datei suchen, die [your site] wurde festgelegt. Wenn es eine Cookie-Datei findet, sendet Ihr Browser alle Name-Wert-Paare in der Datei an [the] Server zusammen mit der URL. Wenn es keine Cookie-Datei findet, werden keine Cookie-Daten gesendet.
Die neuen Cookie-Daten werden zunächst nicht gesendet, b/c erst nachdem die Anfrage von Ihrem Browser an den Server gesendet wurde, dass die neuen Cookie-Daten gespeichert werden und mit der Anfrage versendet werden können.
Wie machst du das dann?
Umleitung nach einem erfolgreichen Set-Cookie-Event.
function set_location_cookie()
{
if(isset($_POST['location']))
{
// Set Cookie
setcookie('location', $_POST['location'], time()+1209600);
// Reload the current page so that the cookie is sent with the request
header('Location: '.$_SERVER['REQUEST_URI']);
}
}
add_action('init', 'set_location_cookie');
Ist es auch möglich, die Bilder der Flaggen als Submit-Buttons zu verwenden?
Ja, verwenden Sie CSS, um Ihre Eingabeschaltflächen zu gestalten.
Fügen Sie jeder Eingabe eine ID hinzu: id="uk-button"
und id="world-button"
CSS:
#uk-button {
background-image: url(uk-flag.png);
background-size: 100%;
background-repeat:no-repeat;
}
#world-button {
background-image: url(world-flag.png);
background-size: 100%;
background-repeat:no-repeat;
}
Wenn Sie keine Cookies verwenden möchten, können Sie dies auf diese Weise tun.
session_start();
if(!isset($_SESSION['language'])){
$_SESSION['language'] = 'English'; //default language
}
dann, wenn Sie 2 Knöpfe haben, wo einer Englisch und der andere Deutsch ist oder was auch immer Sie wünschen.
<a href="https://stackoverflow.com/questions/11796046/?language=English">English</a>
<a href="?language=German">German</a>
Sie können diese Prüfung verwenden, um zu überprüfen, welche Sprache die Seite haben soll.
if(isset($_GET['language'])){
if($_GET['language'] == 'English'){
$_SESSION['language'] = 'English';
}
if($_GET['language'] == 'German'){
$_SESSION['language'] = 'German';
}
}
Die Variable $_POST enthält Daten, die nur in Einzelanfragen enthalten sind (siehe POST (HTTP)), damit sie nach dem “Klicken” oder dem Posten eines Formulars entsprechende Inhalte sehen, also nur nach Aufforderung auf Ihrer Seite.
Für eine dauerhaftere Speicherung der Benutzereinstellungen ist es notwendig, diese Einstellungen in den “Sitzungsdaten” zu speichern, die in der Variablen $_SESSION verfügbar und dauerhaft sind, also verfügbar sind, bis Ihre Besucher Ihre Seiten durchsuchen. Eine dauerhaftere, aber etwas weniger reine Lösung ist das Speichern von Einstellungen für die Cookies, für die Sie das Ablaufdatum definieren können, damit sie auch beim nächsten Besuch verwendet werden.
Siehe einige Beispiele:
<?php
session_start();
$language = $_POST['language'];
$_SESSION['language'] = $language;
…und anderswo:
<?php
session_start();
$language = $_SESSION['language'];
Oder Sie können Cookies verwenden:
<?php
session_start();
$language = $_POST['language'];
set_cookie('language', $language, 365 * 24 * 60 * 60);
// will live for one year
…und anderswo:
$language = $_COOKIE['language'];
Auf anderen Seiten funktioniert es nicht. POST-Variablen werden nicht immer gesendet. Es wird nur gesendet, wenn das Formular abgeschickt wird. Sie können COOKIES für Ihre Aufgabe verwenden. Speichern Sie die Variable dort und überprüfen Sie sie auf jeder Seite.

ACJ
Sie brauchen wirklich Sitzungen/Cookies, wenn Sie möchten, dass die Auswahl bestehen bleibt (oder den Wert weiter durchgibt GET
wie ?lang=uk
, aber das ist nicht sehr elegant). Übrigens benötigen Sie kein Bild innerhalb eines Hyperlinks, dessen Standardverhalten blockiert ist und dessen übergeordnetes Formular mit JavaScript gesendet wird. Du könntest einfach so etwas verwenden:
<input alt="en-UK" name="lang" src="https://stackoverflow.com/questions/11796046/uk-flag.png" type="image" value="en-UK">
Dies würde als Bild funktionieren, das auch eine Schaltfläche zum Senden eines Formulars ist.
9151400cookie-checkWordPress: Verwenden Sie method=”post” für die Auswahl mehrerer Sprachenyes
Was Ihr Code tun wird (wenn der Benutzer das Formular absendet, nachdem er seine Auswahl getroffen hat, und wenn der PHP-Code auf der Seite ausgeführt wird, die Sie in der definieren
action
Attribut Ihres Formulars) ist Echo, was auch immer Sie eingestellt haben$uk
oder$french
zu. Es sieht so aus, als hätten Sie diese Variablen auf keinen Wert gesetzt, also wird nichts gedruckt.– Matt
3. August 2012 um 12:51 Uhr
Außerdem sollten Sie in Zukunft WP-bezogene Fragen an posten wordpress.stackexchange.com
– Francis Yaconiello
16. August 2012 um 14:38 Uhr
@FrancisYaconiello Mir wurde gesagt, dass es dort eine PHP-Frage gibt, ein paar Leute sind dort übertrieben!
– Rauben
16. August 2012 um 14:59 Uhr