두 기능 모듈 간의 충돌을 어떻게 해결합니까?


16

다양한 메뉴,보기, 메뉴 등이있는 두 가지 컨텐츠 유형이 있는데, 두 개의 기능 사용자 정의 모듈로 패키지되어 있습니다. 두 가지 컨텐츠 유형은 모두 분류 체계를 사용하고 데이터베이스에서 동일한 필드를 여러 개 사용합니다. 이 기능 모듈을 새 사이트에로드하면 이러한 공통 필드와 어휘에 대해 서로 충돌이 표시되며 충돌을 해결하는 가장 좋은 방법은 무엇인지 확실하지 않습니다.

기능 모듈은 함께 작동하도록 설계되었지만 동일한 사이트에 둘 필요는 없습니다. 각각 다른 기능으로도 작동 할 수 있습니다. 뷰 필터링 등을 위해 분류 체계와 필드를 모두 사용하므로 각각 이러한 구성 요소를 기능 정의에 포함시키는 것이 좋습니다. 내가해야합니까:

  • 모듈 중 하나에서 필드와 분류법을 제거하고 다른 모듈에 대한 종속성을 선언 하시겠습니까? 각각이 서로없이 작동 할 수 있기 때문에 바람직하지 않습니다.
  • 독립적 인 용도와 공동 작업을위한 두 가지 기능 버전을 만듭니다.
  • 필드와 분류를 별도의 기능으로 정의 하시겠습니까?
  • 충돌을 무시하고 모듈을 활성화 하시겠습니까? (그렇다면 둘 다 현장을 나눌까요?)
  • 다른 해결책?

아직 테스트하지는 않았지만 두 기능 모듈 중 하나를 비활성화하거나 제거하면 다른 모듈에 필요하더라도 데이터베이스에서 필드가 제거됩니까?

답변:


16

다른 두 개의 독립 피처가 사용하는 컴포넌트 (*)를 정의하는 세 번째 피처를 만듭니다.

다른 두 기능에서 현재 세 번째 기능이 청구하는 구성 요소를 제거하고 대신 세 번째 기능을 종속성으로 나열하십시오.

echo 'digraph G {label = "종속성 그래프";  구조적 [label = "구조적 특징 \ n (필드, 분류법)"];  "기능 A \ n (콘텐츠 유형)"-> 구조적;  "기능 B \ n (콘텐츠 유형)"-> 구조적;  }; '  |  도트 -Tpng> 종속성 .png

(*) Drupal 7의 기능에서이 기능은 아직 커밋되지 않았습니다. http://drupal.org/node/1064472를 참조 하여 제안 된 코드를 검토하십시오. —이 패치는 기능 7.x-2.x에 적용되었습니다.


1
네, 확실히 작동합니다. 이것이 기능으로 인해 사용자가 수행해야하는 것은 아니지만 이는 우아한 솔루션입니다. 기능은 기능을 패키지화 할 수있는 기능을 제공하므로 완전히 수행 할 수는 없습니다. 개별 기능 모듈 간의 공유 필드는 문제가되지 않습니다. 감사합니다
Ashlar

3
@Ashlar : 그러나 처음 두 피처 각각의 필드 정의가 다른 경우 어떻게 상충되는 정의가 해결됩니까? 또한 일반적으로 동일한 정보에 대해 여러 가지 정식 정의를 갖는 것은 문제가 됩니다. 필드 공유는 문제가되지 않지만 해당 필드를 지정하는 여러 권한이있는 것은 문제입니다.
smokris

2
아니요, 구조적 지형지 물에서 필드를 한 번 정의 하고 (따라서 필드의 가능한 값을 한 번 정의해야 함 ) 각 콘텐츠 유형 지형지 물에서 해당 필드를 참조해야합니다. (Ack ... 방금 내가 제안한 것이 drupal.org/node/1064472 의 패치 가 적용되었다고 가정 한 것을 깨달았 습니다. 언급하지 않았습니다. 편집 된 답변입니다.)
smokris

1
감사합니다. 이 링크는 매우 도움이되었습니다. 필드 / 인스턴스 처리 방법에 대한 잘못된 가정이있었습니다. 귀하의 답변이 이제 제게 이해가되며, 패치 링크는 머리카락을
뽑지 않아도됩니다

1
D7 기능에 대해 언급 된 패치는 이제 drupal.org/node/1064472#comment-7235792
danbohea

1

이 솔루션은 저에게 효과적이며 다른 관련 사이트에 고아 필드를 만드는 세 번째 기능을 만드는 것보다 다양한 사이트로 내보내는 것이 훨씬 강력합니다.

http://drupal.org/node/1698290


0

나를 위해 일한 한 가지 해결책은 두 기능을 하나의 큰 기능에 첨부하는 것이 었습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.