Можно ли загружать разные версии одного и того же модуля?


Я запускаю Drupal 6 в многоузловой установке. Хотя я полностью понимаю проблемы, связанные с одновременным запуском разных версий одних и тех же модулей, я думаю, что хочу знать, есть ли способ сопоставить указанную версию одного модуля только с обработкой запросов или обработкой вызовов, выполняемых другим модулем?

В настоящее время у меня есть представления 2.x в разделе сайты/все/модули. Это не работает без слайд-шоу просмотров: Цикл 3.x. Я хочу, чтобы также были просмотры 3.x в сайты/www.mysite.com/модули и заставляют его обрабатывать только запросы, которые обычно выполняются слайд-шоу просмотров: Цикл 3.x - но ничего больше, так как просмотры 2.x заберут все остальное.

Я как бы представляю это таким же образом, как и работу блоков - где у вас может быть соответствие регулярным выражениям для указанных URL-адресов. Заранее спасибо за любую помощь.

 2
7
Author: Robbase, 2012-04-16

3 answers

Боюсь, что это просто невозможно без взлома ядра Drupal и модулей представлений способами, которые я даже не могу себе представить.

Как вы знаете, Drupal позволит вам установить только одну версию модуля в любой момент времени, и нет механизма для "замены" модуля на основе условия (например, текущего URL-адреса).

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

 2
Author: Clive, 2012-04-16 18:01:48

Короче говоря, у вас нет разумного способа сделать это, так что даже не пытайтесь.

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

На этом конкретном URL-адресе вы меняете системную таблицу, перестраиваете список модулей, выполняете свои представления и меняете данные обратно.

Возможно, это могло бы сработать, даже без фактического взлома ядра, но я представляю для этого потребуется много исследований того, как работает Ядро.

Более долгосрочный подход, который я на самом деле рассматривал как самостоятельное исследование, заключается в реализации модуля "слоты". Можно было бы разрешить каждому модулю объявлять "слот версии", подобно тому, как представления внутренне отделяют API 2 от 3, позволяя Drupal устанавливать две версии одновременно. Однако это, вероятно, потребует серьезного рефакторинга как ядра, так и любых модулей, которые хотят это поддерживать.

 2
Author: Letharion, 2012-04-16 18:21:38

Нет.

Это действительно не сработало бы. С некоторыми более простыми модулями вы могли бы заставить его работать, переименовав имена папок, файлов, функций и схем баз данных одной версии с "mymodule_" на "mymodule_v2_", прежде чем включить его, а затем изменив код в модулях, которые могут интегрироваться с ним, от использования функций подключения module_invoke до явного вызова функции mymodule_v2_...

Но, надеюсь, вы видите, что это, вероятно, не будет работать ни с одним модулем, особенно не с Видами.

 1
Author: Johnathan Elmore, 2012-04-16 18:01:06