3 votes

Plusieurs domaines dynamiques avec une seule installation de Codeigniter

L'une de mes tâches consiste à gérer 58 sites pour des propriétés réparties dans tout le pays. Ils ont chacun leur propre domaine et sont tous hébergés dans le même serveur virtuel dédié chez Media Temple. Les sites, qui comptent environ 19 pages chacun, utilisent exactement le même code html/css/php. Les images sont servies à chaque site à partir d'un dépôt central qui se trouve dans des dossiers différents pour chaque thème utilisé.

Ce que je veux faire, c'est installer une seule installation de CI2, y compris le dossier d'application, parce que tout ce qui est différent entre les sites est stocké dans la base de données. Tant que je peux donner au contrôleur un numéro de propriété unique (ce que j'espère pouvoir faire lorsqu'ils accèdent à la page index.php dans chaque domaine), alors tous mes sites fonctionneront correctement.

Dans toutes les réponses que j'ai lues, il est suggéré de répliquer les dossiers d'application et de réutiliser le noyau. Ce qui fonctionnerait le mieux pour moi, c'est de réutiliser également le dossier de l'application. Ainsi, lorsque j'apporterai une modification, elle sera répercutée sur tous les sites sans que je doive toucher à 58 pages.

Est-ce possible ?

13voto

swatkins Points 7623

Si tous les fichiers sont identiques et que la seule chose qui change d'une application à l'autre, ce sont les données de la base de données, alors vous pouvez le faire :

  • Pointer tous les domaines vers votre docroot pour l'installation de CI
  • dans votre index.php, déterminez quelle connexion de base de données vous devez utiliser pour le domaine actuellement demandé :

 // 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;
}

** OU **

S'ils utilisent tous la même base de données et que vous devez pouvoir utiliser une variable dans vos requêtes, il vous suffit de définir une constante basée sur le commutateur/cas au lieu de charger une base de données différente. Vous pourrez alors utiliser cette constante dans vos requêtes tout au long de votre application.

 // 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);

0voto

Matthew Diggins Points 11

Avec Codeigniter 2.2, le fichier index.php permet désormais de définir un élément de tableau de configuration (la fonctionnalité est documentée dans ce fichier). Il est donc possible de sauvegarder le domaine demandé en tant que variable de site en procédant de la sorte :

$assign_to_config['site_domain'] = empty($_SERVER['SERVER_NAME']) ? 'default.dev' : $_SERVER['SERVER_NAME'];

Plus tard, vous pourrez faire correspondre cette chaîne site_domaine à une recherche dans la base de données afin de récupérer le contenu requis, les vues du thème, etc.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X