Catégories:
Bonjour,
Je voudrais savoir si il est possible de modifier le comportement de drupal pour le choix du nom de répertoire accepté.
Je m’explique :
- Sur le serveur locale, nous avons utilisons des ndd avec des extensions en
.dev - Sur le serveur distant avant que le site soit en prod nous utilisons un sous-domaine du ndd de l’agence
- Enfin une fois le site en prod nous utilisons le ndd définitif
Ce qui nous donnes les arbos suivantes :
serveur local
- drupal_dir
-
- sites
-
- all
- default
- monsitededev.dev
- monautresitededev.dev
serveur distant
- drupal_dir
-
- sites
-
- all
- default
- monsitededev.ndddelagence.fr
- monautresitededev.ndddelagence.fr
serveur distant après la mise en prod du site monsitededev > monsiteprod
- drupal_dir
-
- sites
-
- all
- default
- monsiteprod.fr
- monautresitededev.ndddelagence.fr
Le problème c’est que à chaque fois il faut modifier le répertoire du site en question et donc pas mal d’entrées de la base…
Est il possible de modifier le comportement de drupal pour qui utilise un nom de répertoir commun à tous les serveurs :
Nouvelle config
- drupal_dir
-
- sites
-
- all
- default
- monsite
- monautresitededev
- Vous devez vous identifier ou créer un compte pour écrire des commentaires

Et encore c’est simple, mais si en plus tu as différents ndd pour un même site/plateforme (genre au hasard m.monsite.fr), ça devient un véritable enfer ce système.
Alors moi ce que je fais (chacun son truc hein :), je gère cela en deux axes «site» et «plateforme». Là tu as deux sites sur 3 plateformes.
1/ Je crée un dossier par site, peu importe la plateforme, et sans me préocuper du nom de domaine qui accédera concrêtement au site. cela donnerait :
2/ Dans chacun des settings.php de ces deux dossier, je fais des configurations à géométrie variable :
<?phpswitch($_SERVER['HTTP_HOST']) {
case 'monsitededev.dev' :
{
$db_url['default'] = 'pgsql://postgres@localhost/dev_monsite';
break;
}
(...)
case 'monsiteprod.fr' :
{
$db_url['default'] = 'pgsql://postgres@localhost/monsiteprod';
break;
}
case 'monsite' :
{
$db_url['default'] = 'pgsql://postgres@localhost/monsite';
break;
}
default :
print "Host inconnu !!!"
break;
}
?>
3/ Ok, c’est là que ça se complique un chouilla :) Ici le truc c’est de faire correspondre plusieurs ndd à un dossier dans site qui ne leur correspond pas du tout. Pour cela, pas le choix, il faut hacker le core de drupal, mais c’est super léger. Il suffit de chercher dans includes/bootstrap.inc la fonction conf_path, et de patcher comme ceci :
<?php
$uri = explode('/', $_SERVER['SCRIPT_NAME'] ? $_SERVER['SCRIPT_NAME'] : $_SERVER['SCRIPT_FILENAME']);
/* Hack permettant l'utilisation de la variable VHOST */
if (isset($_SERVER['VHOST'])) {
$server=array( $_SERVER['VHOST']);
} else {
$server = explode('.', implode('.', array_reverse(explode(':', rtrim($_SERVER['HTTP_HOST'], '.')))));
}
// Fin hack
?>
Avec cela, si Drupal détecte une variable VHOST qui porte le nom d’un des dossiers de sites, c’est ce dossier qu’il utilisera.
4/ Bein tout simplement modifier chaque vhosts apache pour rajouter la fameuse variable qui sera transmise à Drupal :
SetEnv VHOST monsite
Voilà, pas forcement simple à mettre en place, mais une fois que c’est en là, tu peux rajouter des sites, et des plateformes à volonté sans plus rien avoir à modifier, et surtout tu peux synchroniser tes sources entres toutes tes machines, y compris les settings.php sans avoir à te casser la tête.
A noter que pour Drupal 7, arrive la notion d’alias de site, un fichier php qui fait le mapping entre ndd et dossier de site qui se trouve à la racine de sites.
Yoran - arNuméral
Yoran
1039
Merci pour ta réponse.
Je vais tester ça
beho
61