Drupal peut-il être configuré pour rechercher des modules dans d'autres emplacements?

13

Je mets mes modules dans sites / all / modules. Existe-t-il un moyen de configurer Drupal pour trouver plus de modules dans d'autres emplacements également?


Édité

J'utilise des hôtes virtuels souvent mais pas de la manière que vous avez décrite. Le format que je connais ressemble à ceci, et cela m'aide à mettre le projet de travail entier ailleurs, pas à l'intérieur de www.

<VirtualHost *:80>
    ServerName testdrupal.com
    DocumentRoot "C:/proj/testdrupal"
    ServerAlias testdrupal.com

   <Directory "C:/proj/testdrupal/">
       Options Indexes MultiViews FollowSymLinks
       AllowOverride All
       Order allow,deny
       Allow from all
   </Directory>
</VirtualHost>

Je pense que ce que vous décrivez est quelque chose de différent, non? J'essaie de laisser le dossier drupal dans www comme d'habitude, mais déplacez uniquement les sites / all / modules vers un autre emplacement, mais je ne peux toujours pas comprendre à quoi ressemblera l'entrée VHost dans ce cas. Disons que je veux le déplacer vers C: / proj / testdrupal. J'espère que je ne vous ai pas complètement mal compris.

même
la source

Réponses:

14

Avant de répondre, il est utile d'avoir un peu d'histoire sur la façon dont Drupal trouve les modules. Drupal utilise une liste de suggestions de la racine Drupal pour déterminer où trouver les modules. Par ordre de priorité:

  1. sites/$SITENAME/modules
  2. sites/all/modules
  3. profiles/$INSTALLPROFILE/modules
  4. modules

Si Drupal ne trouve pas de module dans (1) , il vérifie (2) . S'il n'est pas là, il vérifie (3) , et ainsi de suite.

Pour (1) , si vous utilisez simplement une installation de base de Drupal sur un seul site, $SITENAMEc'est default. Autrement:

  • Dans Drupal 6, $SITENAMEest le nom d'hôte du site. Si votre site est situé à example.com, le $SITENAMEserait example.com.
  • Dans Drupal 7, $SITENAMEest défini dans sites/sites.php. Si vous regardez example.sites.php, vous pouvez voir comment le définir. Il est également important de noter que tout module répertorié ne sera utilisable que pour ces sites spécifiques, pas pour tous les sites.

Dans (2) , tout module qui s'y trouve sera utilisable sur n'importe quel site de l'installation Drupal. Il restera également intact lors de la mise à niveau de l'installation principale. C'est, bien sûr, l'endroit recommandé pour placer les modules et probablement toute la documentation que vous avez lue vous a dit de placer vos modules ici.

(3) est utilisé pour les profils d'installation qui nécessitent un module spécifique. Les profils d'installation sont essentiellement un moyen de définir un état initial personnalisé pour un site Drupal. Par exemple, Drupal est livré avec deux profils d'installation intégrés: Standard, qui inclut les fonctionnalités les plus utilisées, et Minimal, qui ne comprend que le strict minimum nécessaire pour qu'un site Drupal fonctionne.

(4) est utilisé par le noyau Drupal. Bien que vous puissiez techniquement ajouter des modules ici et qu'ils seront disponibles pour tous les sites, vous ne devriez pas. Sérieusement. Le modulesdossier est touché lorsque Drupal core est mis à jour, et posera des problèmes sur toute la ligne si vous collez les modules dont vous avez besoin pour que votre site fonctionne là-bas.


Maintenant que l'arrière-plan est à l'écart, vous pouvez utiliser des astuces de système de fichiers pour que vos modules soient hébergés à l'extérieur de l'endroit où Drupal se trouve.

Par exemple, vous pouvez configurer un lien symbolique de sites/all/modulesvers un autre répertoire en dehors de l'installation Drupal:

  • Dans les systèmes basés sur Unix / Linux / BSD: ln -s /path/to/modules/folder /path/to/drupal/sites/all/modules
  • Sur Windows Vista / Server 2008/7 et supérieur: mklink C:\path\to\drupal\sites\all\modules C:\path\to\custom\modules\folder

Pour autant que je sache, vous ne pouvez pas faire grand-chose dans les versions antérieures de Windows qui n'ont pas mklink .


la source
Merci beaucoup, cela explique vraiment cela, mais j'ai toujours du mal à le faire fonctionner. Pouvez-vous consulter la section Modifier de mon message. C'est plus que ce qui peut tenir ici. Merci.
Sameold
@sameold J'ai corrigé et clarifié la partie sur les liens symboliques. Sous Windows, les liens symboliques sont un peu sommaires, mais je pense que la commande que j'ai fournie devrait fonctionner.
3

Dans Drupal 7, les répertoires dans lesquels Drupal recherche des modules sont les suivants:

  • modules
  • profils / $ profile / modules
  • $ config / modules

$ profile est la valeur renvoyée par drupal_get_profile () ; $ config est la valeur renvoyée par conf_path () .
La fonction qui recherche les fichiers d'objets système (modules, thèmes, etc.) est drupal_system_listing () .

Les mêmes répertoires sont recherchés, dans Drupal 6. La seule différence est que $ profile est une variable globale; lorsque la variable globale n'est pas définie, la fonction obtient la valeur de la variable persistante "install_profile", qui a la valeur par défaut "default".

kiamlaluno
la source
2

Vous pouvez les placer soit dans sites / all / modules, puis ils seront disponibles pour tous les sites (si vous avez une configuration multi-sites), dans sites / default / modules pour le site par défaut ou sites / site.com / modules si Tu as ça. Pour ces derniers répertoires, cela signifie qu'ils ne seront disponibles que pour ce site spécifique.

De plus, vous pouvez les organiser comme vous le souhaitez sous ces dossiers, ce qui signifie que vous pouvez créer les sous-dossiers qui s'y trouvent. Une chose typique à faire est de créer un dossier contrib, puis de placer les modules téléchargés à partir de là tout en conservant les modules auto-écrits pour ce site dans un dossier personnalisé.

Berdir
la source
1

Je ne sais pas ce que vous voulez dire, mais nous utilisons une convention quelque peu courante de séparation des modules internes des modules tiers.

Les modules personnalisés «faits maison» seraient:

sites / tous / modules / personnalisé

Les modules tiers seraient dans:

sites / tous / modules / fournisseur

Si avoir des sous-répertoires ne correspond pas à vos besoins, je pense que vous pouvez facilement lier votre répertoire / obscure / path / à / module dans le répertoire de votre module drupal.

stefgosselin
la source