#codeigniter
#codeigniter
Вопрос:
Одна из моих обязанностей — управлять 58 сайтами недвижимости, разбросанными по всей стране. У каждого из них есть свой собственный домен, и все они размещены в одном и том же Выделенном виртуальном сервисе в Media Temple. Сайты, каждый из которых состоит примерно из 19 страниц, используют один и тот же html / css / php-код. Изображения отправляются на каждый сайт из центрального хранилища, находящегося в разных папках для каждой используемой темы.
Что я хочу сделать, так это установить одну единственную установку CI2, включая папку приложения, потому что все, что отличается между сайтами, хранится в базе данных. Пока я могу присвоить контроллеру уникальный номер свойства (что, я надеюсь, я смогу сделать, когда они получат доступ к index.php страница в каждом домене), тогда все мои сайты будут работать нормально.
Во всех ответах, которые я прочитал, предлагается реплицировать папки приложений и просто повторно использовать ядро. Что было бы лучше всего для меня, так это также повторно использовать папку приложения. Затем, когда я внесу изменение, оно будет каскадно распространяться на все сайты без необходимости касаться 58 страниц.
Возможно ли это?
Ответ №1:
Если все файлы одинаковы, и единственное, что меняется между приложениями, — это данные из базы данных, тогда вы можете сделать это:
- Укажите все домены на свой docroot для установки CI
- в вашем index.php определите, какое подключение к БД вам необходимо использовать для текущего запрошенного домена:
// index.php
$domain = $_SERVER['SERVER_NAME'];
switch ($domain)
{
case 'www.firstsite.com':
$this->load->database('firstsitedb');
break;
case 'www.secondsite.com':
$this->load->database('secondsitedb');
break;
default:
show_error('No Site Found');
break;
}
** ИЛИ **
Если каждый из них использует одну и ту же базу данных, и вам нужно иметь возможность использовать переменную в своих запросах, тогда просто установите константу на основе переключателя / регистра вместо загрузки другой базы данных. Затем вы можете использовать эту константу во всем своем приложении в своих запросах.
// index.php
$domain = $_SERVER['SERVER_NAME'];
$site_id = 0; // default
switch ($domain)
{
case 'www.firstsite.com':
$site_id = 1;
break;
case 'www.secondsite.com':
$site_id = 2;
break;
default:
show_error('No Site Found');
break;
}
define('SITE_ID', $site_id);
Комментарии:
1. Спасибо за ваш ответ. Однако у меня есть один вопрос: как получить другой набор параметров на основе веб-сайта, если я использую файл config /parameters.yml. Например: я хочу использовать from@site1.com когда я отправляю электронное письмо с ответом на контакт с нами посетителю в site1.com и from@site2.com если я отправляю из site2.com . Эта функция отправки электронной почты является общей для всех веб-сайтов, поскольку мы используем один экземпляр. Мы высоко ценим вашу помощь. Спасибо.
Ответ №2:
С Codeigniter 2.2, index.php теперь позволяет устанавливать элемент массива конфигурации (эта функция задокументирована в этом файле). Таким образом, можно сохранить запрошенный домен в качестве действующей переменной сайта, выполнив это:
$assign_to_config['site_domain'] = empty($_SERVER['SERVER_NAME']) ? 'default.dev' : $_SERVER['SERVER_NAME'];
Позже вы могли бы сопоставить эту строку site_domain с поиском в базе данных, чтобы получить необходимые представления контента и темы и т.д.