2 Stimmen

Codeigniter verschiedene DB für jede Sprache

Ich benutze Codeigniter und das Projekt, an dem ich arbeite, muss in zwei Sprachen sein.

Das einzige, was ich nicht herausfinden kann, ist, wie man eine andere Datenbank in Codeigniter auswählt, wenn eine Sitzungsvariable auf einen bestimmten Wert gesetzt wird.

Beispiel:

Wenn die Sitzungsvariable "Sprache" auf "EN" gesetzt ist, soll sie die DB auswählen: "databasename_DE"

in allen anderen Fällen wählen Sie DB: "databasename_DE"

Das einzige, was ich gefunden habe, war, dass Sie $this->db->load('bla'); tun können, aber das bedeutet, dass Sie eine DB-Load in jedem Modell hinzufügen müssen und Sie müssen Autoload 'Datenbank' deaktivieren.

4voto

Phil Sturgeon Punkte 30202

Um das beste Ergebnis zu erzielen, würde ich einen pre_system-Hook erstellen, der prüft, ob eine $_SESSION['lang']-Variable existiert, und wenn ja, eine Konstante setzt:

define('LANG', isset($_SESSION['lang']) ? $_SESSION['lang'] : 'EN');

Dann machen Sie in Ihrer Datenbank-Konfigurationsdatei folgendes:

$db['default']['hostname'] = "localhost";
$db['default']['username'] = "root";
$db['default']['password'] = "";
$db['default']['database'] = "database_".LANG;
$db['default']['dbdriver'] = "mysql";
$db['default']['dbprefix'] = "";
$db['default']['pconnect'] = TRUE;
$db['default']['db_debug'] = FALSE;
$db['default']['cache_on'] = FALSE;
$db['default']['cachedir'] = "";
$db['default']['char_set'] = "utf8";
$db['default']['dbcollat'] = "utf8_general_ci";

Das sollte mit minimalem Aufwand möglich sein.

3voto

gimpe Punkte 1037

Eine Variante der Antwort von Phil Sturgeaon:

$active_group = LANG; // switch the DB based on the LANG constant

$db['EN']['hostname'] = "localhost";
$db['EN']['username'] = "root";
$db['EN']['password'] = "";
$db['EN']['database'] = "databasename_EN";
// etc

$db['FR']['hostname'] = "localhost";
$db['FR']['username'] = "root";
$db['FR']['password'] = "";
$db['FR']['database'] = "database_FR";
//etc

1voto

t00ny Punkte 1538

Ich schätze, dass Sie eine MyModel-Klasse erstellen könnten, die Model erweitert und diese Gymnastik behandelt. dann müssten Sie nur MyModel als übergeordnete Klasse Ihrer Modelle verwenden.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X