2つの機能モジュール間のこの競合を解決するにはどうすればよいですか?


16

さまざまなメニュー、ビュー、メニューなどの2つのコンテンツタイプがあり、これらを2つの機能カスタムモジュールとしてパッケージ化しました。2つのコンテンツタイプはどちらも分類法を使用し、データベース内のいくつかの同じフィールドを使用します。これらの機能モジュールを新しいサイトにロードすると、これらの共通のフィールドとボキャブラリで競合が表示され、競合を解決する最善の方法はわかりません。

機能モジュールは連携して機能することを目的としていますが、両方が同じサイトに存在する必要はありません。それぞれが他の異なる機能でも動作する場合があります。どちらもビューのフィルタリングなどに分類法とフィールドを使用しているため、これらはそれぞれ機能定義にこれらのコンポーネントを含むことが理にかなっています。したほうがいい:

  • モジュールの1つからフィールドと分類法を削除し、他のモジュールへの依存関係を宣言しますか?これは、それぞれが他方なしで機能できるため、望ましくありません。
  • 機能の2つのバージョンを作成します。1つは独立して使用するためのもので、もう1つはコラボレーションするためのものです。
  • フィールドと分類法を別個の機能として定義しますか?
  • 競合を無視してモジュールを有効にしますか?(もしそうなら、彼らはフィールドを共有しますか?)
  • 別の解決策?

これはまだテストしていませんが、2つの機能モジュールのいずれかを無効化またはアンインストールすると、他のモジュールで必要な場合でもデータベースからフィールドが削除されますか?

回答:


16

他の2つの独立した機能によって使用されるコンポーネント(*)を定義する3番目の機能を作成します。

他の2つの機能では、現在3番目の機能によって要求されているコンポーネントを削除し、代わりに3番目の機能を依存関係としてリストします。

echo 'digraph G {label = "依存グラフ";  構造[label = "Structual Feature \ n(Fields、Taxonomy)"];  "機能A \ n(コンテンツタイプ)"->構造;  「機能B \ n(コンテンツタイプ)」->構造;  }; '  |  ドット-Tpng> dependency.png

(*)ただし、Drupal 7の機能では、この機能はまだコミットされていません。http://drupal.org/node/1064472を参照して、そこで提案されているコードを確認してください。—このパッチは、Features 7.x-2.xにコミットされています。


1
ええ、それは確かに動作します。それがFeaturesがユーザーに強制するものである場合、それは洗練されていないソリューションです。機能は機能をパッケージ化する機能を提供しますが、それを完全に行うことはできません。個別の機能モジュール間の共有フィールドは問題になりません。ありがとう
アシュラー

3
@Ashlar:しかし、最初の2つの機能のそれぞれのフィールドの定義が異なる場合はどうなりますか?競合する定義はどのように解決されますか?また、一般に、同じ情報の複数の信頼できる定義を持つことには問題があります。フィールドの共有は問題ではありませんが、それらのフィールドが何であるかを指定する複数の権限を持つことは問題です。
スモクリス

2
いいえ、構造Featureでフィールドを1回定義し(したがって、フィールドの可能な値を1回定義する)、各コンテンツタイプFeatureでそのフィールドを参照する必要があると言っています。(Ack ...私が提案したのは、drupal.org / node / 1064472のパッチが適用されていると想定していることです。これは言及するのを忘れていました。回答を編集しました。)
smokris

1
おかげでスモクリス。リンクはとても役に立ちました。フィールド/インスタンスがどのように処理されるかについて間違った仮定がありました。あなたの答えは今私にとって理にかなっており、パッチへのリンクは私が髪を抜くことから私を救います:)
アシュラー

1
上記のD7機能のパッチは、dev drupal.org/node/1064472#comment-7235792に
danbohea

1

このソリューションは、他の無関係なサイトに孤立したフィールドを作成する3番目の機能を作成するよりも、さまざまなサイトにエクスポートするのにはるかに堅牢で、私にとってはうまくいきました。

http://drupal.org/node/1698290


0

私のために働いた1つの解決策は、2つの機能を1つの大きな機能に追加することでした。これにより、競合が解決しました。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.