Как мне разрешить этот конфликт между двумя функциональными модулями?


16

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

Хотя функциональные модули предназначены для совместной работы, они не обязательно должны присутствовать на одном сайте. Каждый из них также может работать с другими функциями. Они оба используют таксономию и поля для фильтрации представлений и т. Д., Поэтому имеет смысл включить каждый из этих компонентов в определение своей функции. Нужно ли мне:

  • Удалить поля и таксономию из одного из модулей и объявить зависимость для другого? Это нежелательно, так как каждый может работать без другого.
  • Сделайте две версии функций, одну для самостоятельного использования и одну для совместной работы.
  • Определить поля и таксономию как отдельную функцию?
  • Игнорировать конфликт и включить модули? (Если я это сделаю, они оба будут делить поле?)
  • Другое решение?

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

Ответы:


16

Создайте третий компонент, определяющий компоненты (*), используемые двумя другими независимыми компонентами.

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

echo 'digraph G {label = "График зависимостей";  структурный [ярлык = "Структурная особенность \ n (Поля, Таксономия)"];  "Feature A \ n (Content Type)" -> структурный;  "Feature B \ n (Content Type)" -> структурный;  };»  |  dot -Tpng> dependency.png

(*) В Функциях для Drupal 7, однако, эта функция еще не зафиксирована - см. Http://drupal.org/node/1064472 и помогите просмотреть предложенный код там. - Этот патч был добавлен в Особенности 7.x-2.x.


1
Да, это бы сработало. Хотя если это то, что заставляет пользователей делать это, то это не элегантное решение. Возможности предоставляют возможность упаковать Особенность, а затем не позволяют нам сделать это полностью. Общие поля между отдельными функциональными модулями не должны быть проблемой. Спасибо
Ашлар

3
@Ashlar: Но что, если определения полей в каждой из первых двух функций различаются - как будут разрешаться конфликтующие определения? Кроме того, в целом наличие нескольких достоверных определений одной и той же информации проблематично . Совместное использование полей не является проблемой, но наличие нескольких прав, определяющих, что это за поля, является проблемой.
Smokris

2
Нет, я говорю , что вы должны определить поле один раз (и , таким образом , определить возможные значения поля в один раз ) в структурном Feature - и ссылки , что поле в каждом из функций типа контента. (Ack ... Я только что понял, что то, что я предложил, предполагает применение патча на drupal.org/node/1064472 , о котором я забыл упомянуть. Отредактированный ответ.)
smokris

1
Спасибо, смокрис. Ссылка была очень полезной. У меня было неверное предположение о том, как обрабатывалось поле / экземпляр. Ваш ответ теперь имеет смысл для меня, и ссылка на патч спасет меня от выдергивания волос :)
Ashlar

1
Упомянутый патч для D7 Features теперь добавлен в dev drupal.org/node/1064472#comment-7235792
danbohea

1

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

http://drupal.org/node/1698290


0

Одно из решений, которое сработало для меня, заключалось в том, чтобы объединить две функции в одну большую функцию. Это решило конфликты.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.