Jak rozwiązać ten konflikt między dwoma modułami funkcji?

16

Mam dwa typy treści z różnymi menu, widokami, menu itp., Które spakowałem jako dwa moduły niestandardowe Feature. Oba typy zawartości wykorzystują taksonomię i wykorzystują kilka takich samych pól w bazie danych. Kiedy ładuję te moduły funkcji w nowej witrynie, pokazują one konflikty między sobą w tych wspólnych polach i słownictwie i nie jestem pewien, jaki byłby najlepszy sposób rozwiązania konfliktu.

Chociaż moduły funkcji są przeznaczone do współpracy, nie muszą być obecne w tym samym serwisie. Każdy może również współpracować z innymi funkcjami. Oba używają taksonomii i pól do filtrowania widoków itp., Więc sensowne jest, aby każdy z nich zawierał te składniki w definicji funkcji. Czy powinienem:

  • Usunąć pola i systematykę z jednego z modułów i zadeklarować zależność od drugiego? Nie jest to pożądane, ponieważ każdy może działać bez drugiego.
  • Utwórz dwie wersje funkcji, jedną do samodzielnego użytku, a drugą do współpracy.
  • Zdefiniować pola i taksonomię jako osobną funkcję?
  • Zignorować konflikt i włączyć moduły? (Jeśli tak, czy oboje będą dzielić to pole?)
  • Inne rozwiązanie?

Nie przetestowałem tego jeszcze, ale czy wyłączenie lub odinstalowanie jednego z dwóch modułów funkcji usunie pola z bazy danych, nawet jeśli drugi moduł tego wymaga?

Łom
źródło

Odpowiedzi:

16

Utwórz trzecią funkcję definiującą komponenty (*) używane przez pozostałe dwie niezależne funkcje.

W pozostałych dwóch funkcjach usuń komponenty, które są obecnie przedmiotem trzeciej funkcji, a zamiast tego umieść trzecią funkcję jako zależność.

echo 'digraph G {label = "Wykres zależności";  strukturalna [etykieta = "Cecha strukturalna \ n (Pola, taksonomia)"];  „Feature A \ n (Content Type)” -> strukturalny;  „Feature B \ n (Content Type)” -> strukturalny;  }; ”  |  kropka -Tpng> dependence.png

(*) Jednak w funkcji dla Drupala 7 ta funkcja nie jest jeszcze zatwierdzona - zobacz http://drupal.org/node/1064472 i pomóż tam przejrzeć proponowany kod. - Ta łatka została zatwierdzona dla Funkcji 7.x-2.x.

smokris
źródło
1
Tak, to z pewnością zadziała. Chociaż jeśli do tego właśnie zmuszają użytkowników Funkcje, jest to nieeleganckie rozwiązanie. Funkcje zapewniają możliwość spakowania funkcji, a następnie nie pozwalają nam to zrobić całkowicie. Wspólne pola między oddzielnymi modułami funkcji nie powinny stanowić problemu. Dzięki
Ashlar
3
@Ashlar: Ale co, jeśli definicje pól w każdej z dwóch pierwszych funkcji będą się różnić - w jaki sposób można by rozwiązać sprzeczne definicje? Ponadto, ogólnie rzecz biorąc, posiadanie wielu autorytatywnych definicji tej samej informacji jest problematyczne . Udostępnianie pól nie jest problemem, ale problemem jest posiadanie wielu uprawnień określających, które to pola.
smokris
2
Nie, mówię, że należy zdefiniować pole raz (a tym samym zdefiniować możliwe wartości pola raz ) w elemencie konstrukcyjnym - i odwoływać się do tego pola w każdym typie zawartości typu. (Ack ... Właśnie zdałem sobie sprawę, że to, co zaproponowałem, zakłada założenie poprawki na drupal.org/node/1064472 , o której zapomniałem wspomnieć. Edytowana odpowiedź.)
smokris
1
Dzięki smokris. Link był bardzo pomocny. Miałem błędne założenie dotyczące sposobu obsługi pola / instancji. Twoja odpowiedź ma teraz dla mnie sens, a link do łaty uratuje mnie przed wyciąganiem włosów :)
Ashlar
1
Wspomniana łatka do Funkcji D7 została teraz opublikowana na dev drupal.org/node/1064472#comment-7235792
danbohea
1

To rozwiązanie działało dla mnie świetnie, znacznie bardziej niezawodne do eksportu do różnych stron niż tworzenie trzeciej funkcji, która tworzyłaby osierocone pola w innej niepowiązanej witrynie.

http://drupal.org/node/1698290

frazras
źródło
0

Jednym z rozwiązań, które działało dla mnie, było połączenie dwóch funkcji w jedną większą funkcję, która rozwiązała konflikty.

sokratis
źródło