Làm cách nào để giải quyết xung đột này giữa hai mô-đun Tính năng?


16

Tôi có hai loại nội dung với nhiều menu, chế độ xem, menu, v.v. mà tôi đã đóng gói thành hai mô-đun tùy chỉnh Tính năng. Cả hai loại nội dung đều sử dụng phân loại và sử dụng một số trường giống nhau trong cơ sở dữ liệu. Khi tôi tải các mô-đun Tính năng này trong một trang web mới, chúng hiển thị xung đột với nhau trên các trường và từ vựng chung này và tôi không chắc chắn đâu là cách tốt nhất để giải quyết xung đột.

Mặc dù các mô-đun Tính năng được dự định để làm việc cùng nhau, nhưng chúng không cần phải có mặt trên cùng một trang. Mỗi cũng có thể làm việc với các tính năng khác nhau là tốt. Cả hai đều sử dụng phân loại và các trường để lọc chế độ xem, v.v ... do đó, có nghĩa là mỗi cái đều bao gồm các thành phần này trong định nghĩa Tính năng của chúng. Tôi có nên:

  • Loại bỏ các lĩnh vực và phân loại từ một trong các mô-đun, và tuyên bố một phụ thuộc cho nhau? Điều này là không mong muốn vì mỗi cái có thể làm việc mà không có cái khác.
  • Tạo hai phiên bản của các tính năng, một để sử dụng độc lập và một để cộng tác.
  • Xác định các lĩnh vực và phân loại như là một tính năng riêng biệt?
  • Bỏ qua xung đột và kích hoạt các mô-đun? (Nếu tôi làm, cả hai sẽ chia sẻ lĩnh vực này?)
  • Giải pháp khác?

Tôi chưa thử nghiệm điều này, nhưng sẽ vô hiệu hóa hoặc gỡ cài đặt một trong hai mô-đun Tính năng loại bỏ các trường khỏi cơ sở dữ liệu mặc dù mô-đun khác yêu cầu?

Câu trả lời:


16

Tạo một Tính năng thứ ba xác định các thành phần (*) được sử dụng bởi hai Tính năng độc lập khác.

Trong hai Tính năng khác, hãy xóa các thành phần hiện được yêu cầu bởi Tính năng thứ ba và thay vào đó, hãy liệt kê Tính năng thứ ba dưới dạng phụ thuộc.

echo 'digraph G {nhãn = "Đồ thị phụ thuộc";  cấu trúc [nhãn = "Đặc điểm cấu trúc \ n (Trường, Phân loại)"];  "Tính năng A \ n (Loại nội dung)" -> cấu trúc;  "Tính năng B \ n (Loại nội dung)" -> cấu trúc;  }; '  |  dấu chấm -Tpng> phụ thuộc.png

(*) Tuy nhiên, trong Tính năng cho Drupal 7, chức năng này chưa được cam kết - xem http://drupal.org/node/1064472 và giúp xem lại mã được đề xuất ở đó. - Bản vá này đã được cam kết với Tính năng 7.x-2.x.


1
Vâng, điều đó chắc chắn sẽ làm việc. Mặc dù nếu đó là những gì Tính năng buộc người dùng phải làm, thì đó là một giải pháp không phù hợp. Các tính năng cung cấp khả năng đóng gói một Tính năng và sau đó không cho phép chúng tôi thực hiện hoàn toàn. Các trường được chia sẻ giữa các mô-đun Tính năng riêng biệt không phải là vấn đề. Cảm ơn
Ashlar

3
@Ashlar: Nhưng điều gì sẽ xảy ra nếu các định nghĩa của các Trường trong mỗi hai Tính năng đầu tiên khác nhau - các định nghĩa xung đột sẽ được giải quyết như thế nào? Ngoài ra, nói chung, có nhiều định nghĩa có thẩm quyền của cùng một thông tin là vấn đề . Chia sẻ các lĩnh vực không phải là một vấn đề, nhưng có nhiều cơ quan xác định những lĩnh vực đó là một vấn đề.
smokris

2
Không, tôi đang nói rằng bạn nên xác định trường một lần (và do đó xác định các giá trị có thể của trường một lần ) trong Tính năng cấu trúc - và tham chiếu trường đó trong mỗi Tính năng của loại nội dung. (Ack ... Tôi chỉ nhận ra rằng những gì tôi đề xuất giả các bản vá trên drupal.org/node/1064472 đã được áp dụng, mà tôi quên đề cập đến Edited câu trả lời..)
smokris

1
Cảm ơn khói. Các liên kết là rất hữu ích. Tôi đã có một giả định sai về cách xử lý trường / trường hợp. Câu trả lời của bạn bây giờ có ý nghĩa với tôi và liên kết đến bản vá sẽ cứu tôi khỏi việc nhổ tóc :)
Ashlar

1
Bản vá được đề cập cho các tính năng D7 hiện đã được cam kết cho dev drupal.org/node/1064472#comment-7235792
danboemat

1

Giải pháp này đã giúp tôi rất nhiều, mạnh mẽ hơn khi được xuất sang nhiều trang khác nhau hơn là tạo một tính năng thứ ba, sẽ tạo ra các trường mồ côi trong một trang không liên quan khác.

http://drupal.org/node/1698290


0

Một giải pháp hiệu quả với tôi là gắn hai Tính năng thành một tính năng lớn hơn. Điều này đã giải quyết được các xung đột.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.