Несколько динамических доменов с использованием ОДНОЙ установки Codeigniter

#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 с поиском в базе данных, чтобы получить необходимые представления контента и темы и т.д.