Codeigniter разные БД для каждого языка - PullRequest
2 голосов
/ 15 февраля 2010

Я использую codeigniter, и проект, над которым я работаю, должен быть на двух языках.

Единственное, что я не могу понять, это как выбрать другую базу данных в codeigniter, когда переменная сеанса установлена ​​на определенное значение.

пример:

если переменная сеанса 'language' установлена ​​в 'EN', я хочу, чтобы она выбрала DB: "Databasename_EN"

во всех остальных случаях выберите БД: "Databasename_EN"

Единственное, что я обнаружил, было то, что вы можете сделать $ this-> db-> load ('bla'); но это означает, что вы должны добавить загрузку БД в каждую модель и отключить автозагрузку «базы данных».

Ответы [ 3 ]

4 голосов
/ 16 февраля 2010

Для лучшего результата я бы создал хук pre_system, который проверяет, существует ли переменная $ _SESSION ['lang'] и устанавливает ли она константу:

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

Затем в вашем конфигурационном файле базы данных сделайте следующее:

$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";

Должен выполнить трюк с минимальной суетой.

3 голосов
/ 16 февраля 2010

Вариант ответа Фила Стерджиона:


$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

1 голос
/ 15 февраля 2010

Полагаю, вы могли бы создать класс MyModel, расширяющий модель и обрабатывающий эту гимнастику. все, что вам нужно сделать, это использовать MyModel в качестве родительского класса ваших моделей.

...