/ / Versuchen Sie, eine CodeIgniter-Sitzungsvariable vor dem Laden zu ändern. - PHP, Codeigniter, Sitzung, Cookies, Sitzungsvariablen

Versuchen Sie, eine CodeIgniter-Sitzungsvariable vor dem Laden zu ändern, nur beim Neuladen? - PHP, Codeigniter, Session, Cookies, Session-Variablen

Ok, also haben wir eine Anwendung mit CodeIgniter erhalten, die mehrere Sprachen unterstützt.

Das Problem, das wir haben, ist die SpracheDie Auswahl fand außerhalb von CodeIgniter auf einer Joomla-Website statt, von der aus auf die Anwendung zugegriffen werden konnte. Allerdings müssen wir die Spiele von der Joomla-Installation trennen und diesmal stattdessen die Sprachauswahl in WordPress vornehmen. Wir haben bereits einen Cookie für die ausgewählte Sprache in WordPress gesetzt (Cookie-Name ist lang, Werte entweder ru oder en (russisch und englisch)) und die allgemeine Idee ist, dass der Benutzerablauf so ist:

BESUCHER BESUCHT WORDPRESS-WEBSITE (wo ein Cookie gesetzt ist) -> KLICKS DURCH SPIELE (wo Codeigniter das Cookie prüfen und die Sitzungsvariable setzen muss)

In Anbetracht des obigen Ablaufs wird also ein Cookie geschriebenVon der WordPress-Seite aus, so kann auf dieses Cookie von der CodeIgniter-Anwendung zugegriffen werden, um die Sprache einzustellen. Der Code, der dabei erfolgreich war, ist folgender:

if (!isset($_COOKIE["lang"])) {
$this->session->set_userdata("lang", "en");
} else {
if ($_COOKIE["lang"] == "en") $this->session->set_userdata("lang", "en");
if ($_COOKIE["lang"] == "ru") $this->session->set_userdata("lang", "ru");
}

Das funktioniert gut, aber es wird nicht angezeigtausgewählte Sprache beim ersten Laden, aber nur beim Neuladen. Dieser Code befindet sich jedoch oben in der Kopfzeilenansicht der CodeIgniter-Anwendung, bevor alles an den Browser gesendet wird. Soweit wir wissen, ist dies die erste Datei, die für alle Vorlagen aufgerufen wird.

Gibt es eine andere Datei, auf die wir dies tun sollten? Wir sind keine Experten, nicht einmal Neulinge in CodeIgniter, also nicht sicher, wo wir anfangen sollen. Wir haben versucht, diesen Code in anderen Ansichten und sogar in Controllern zu platzieren, aber er bricht entweder oder funktioniert nicht.

Antworten:

0 für die Antwort № 1

Sie können versuchen, einen benutzerdefinierten Controller zu erstellen, der CI_Controller erweitert, und Ihre Logik für die Auswahl der richtigen Sprache entsprechend dem Cookie / der Sitzung einfügen.

Erstellen Sie eine neue Datei mit dem Namen MY_Controller.php in Ihrem Anwendungs- / Kernordner

class MY_Controller extends CI_Controller
{

function __construct()
{
parent::__construct();

//get the language from the cookie if its set and use it on the view
if (!isset($_COOKIE["lang"]))
{
$this->session->set_userdata("lang", "en");
}
else
{
if ($_COOKIE["lang"] == "en") $this->session->set_userdata("lang", "en");
if ($_COOKIE["lang"] == "ru") $this->session->set_userdata("lang", "ru");
}
}
}

Erweitern Sie dann MY_Controller auf jeden Controller, den Sie in Ihrer Anwendung erstellen.

class Frontpage extends MY_Controller

0 für die Antwort № 2

Das Cookie ist auf derselben Seite manchmal nicht in Codeigniter verfügbar.