Можно ли настроить Drupal для поиска модулей в других местах?

13

Я помещаю свои модули в сайты / все / модули. Есть ли способ настроить Drupal для поиска других модулей в других местах?


Edited

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

Я думаю, что вы описываете что-то другое, не так ли? Я пытаюсь оставить папку drupal внутри www как обычно, но перенести только сайты / все / модули в другое место, но я все еще не могу понять, как будет выглядеть запись VHost в этом случае. Допустим, я хочу переместить его в C: / proj / testdrupal. Надеюсь, я не совсем тебя неправильно понял.

то же самое старое
источник

Ответы:

14

Прежде чем ответить, полезно немного рассказать о том, как Drupal находит модули. Drupal использует список предложений от корня Drupal, чтобы выяснить, где найти модули. В порядке приоритета:

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

Если Drupal не находит модуль в (1) , он проверяет (2) . Если его там нет, он проверяет (3) и так далее.

Для (1) , если вы просто используете базовую установку Drupal для одного сайта, $SITENAMEесть default. В противном случае:

  • В Drupal 6 $SITENAME- это имя хоста сайта. Если ваш сайт находится по адресу example.com, $SITENAMEбудет example.com.
  • В Drupal 7, $SITENAMEопределяется в sites/sites.php. Если вы посмотрите example.sites.php, вы можете увидеть, как это определить. Также важно отметить, что любой модуль, указанный там, будет использоваться только для этих конкретных сайтов, а не для всех сайтов.

В (2) любой найденный там модуль можно будет использовать на любом сайте установки Drupal. Он также останется нетронутым при обновлении основной установки. Это, конечно, рекомендуемое место для размещения модулей и, вероятно, вся документация, которую вы прочитали, предложила вам разместить свои модули здесь.

(3) используется для профилей установки, которые требуют определенного модуля. Инсталляционные профили - это, по сути, способ определения пользовательского начального состояния для сайта Drupal. Например, Drupal поставляется с двумя встроенными профилями установки: Стандартный, который включает в себя наиболее часто используемые функции, и Минимальный, который включает в себя только минимальный минимум, необходимый для работы сайта Drupal.

(4) используется ядром Drupal. Хотя вы можете технически добавлять модули здесь, и они будут доступны для всех сайтов, вы не должны. Шутки в сторону. К modulesпапке тронут, когда обновится ядро ​​Drupal, и это вызовет проблемы в дальнейшем, если вы вставляете модули, необходимые для работы вашего сайта.


Теперь, когда фон исчез, вы можете использовать хитрости файловой системы, чтобы разместить ваши модули вне того места, куда смотрит Drupal.

Например, вы можете установить символическую ссылку из sites/all/modulesдругого каталога вне установки Drupal:

  • В системах на основе Unix / Linux / BSD: ln -s /path/to/modules/folder /path/to/drupal/sites/all/modules
  • В Windows Vista / Server 2008/7 и выше: mklink C:\path\to\drupal\sites\all\modules C:\path\to\custom\modules\folder

Насколько я знаю, вы не можете многое сделать в более ранних версиях Windows, в которых нет mklink .


источник
Большое спасибо, это действительно объясняет это, но я все еще испытываю затруднения, заставляя это работать. Можете ли вы взглянуть на раздел редактирования в моем посте. Это больше, чем может поместиться здесь. Благодарю.
Sameold
@ sameold Я исправил и прояснил часть о символических ссылках. В Windows символические ссылки немного схематичны, но я считаю, что указанная мною команда должна работать.
3

В Drupal 7 каталоги, где Drupal ищет модули, следующие:

  • модули
  • профили / $ профильные / модули
  • $ конфигурации / модули

$ profile - это значение, возвращаемое из drupal_get_profile () ; $ config - это значение, возвращаемое из conf_path () .
Функция, которая ищет системные объектные файлы (модули, темы и т. Д.) - это drupal_system_listing () .

Те же каталоги ищутся в Drupal 6. Единственное отличие состоит в том, что $ profile является глобальной переменной; когда глобальная переменная не установлена, функция получает значение постоянной переменной "install_profile", значение по умолчанию которой равно "default".

киамлалуно
источник
2

Вы можете поместить их либо в сайты / все / модули, тогда они будут доступны для всех сайтов (если у вас есть конфигурация с несколькими сайтами), в сайтах / по умолчанию / модули для сайта по умолчанию или сайтов / сайт.com / modules, если у вас есть это. Для последних каталогов это означает, что они будут доступны только для этого конкретного сайта.

Кроме того, вы можете расположить их как угодно под этими папками, то есть вы можете создавать там любые подпапки. Типичная вещь, которую нужно сделать, - это создать папку contrib, а затем поместить туда загруженные модули, оставив при этом самописные модули для этого сайта, в пользовательскую папку.

Berdir
источник
1

Не уверен, что вы имеете в виду, но мы используем несколько распространенное соглашение об отделении внутренних модулей от сторонних модулей.

«Самодельные» пользовательские модули будут находиться в:

сайты / все / модули / пользовательские

Сторонние модули будут в:

сайты / все / модулей / поставщиков

Если наличие подкаталогов не соответствует вашим потребностям, я полагаю, вы можете легко создать символическую ссылку на каталог / obscure / path / to / module в каталог модулей вашего drupal.

stefgosselin
источник