機能でビューを追跡できません


6

私はコンテンツタイプとビューを追跡Featuresする機能と呼ばれる機能を作成するために使用していfooます。これにより、それらをコードで記述し、リポジトリにコミットして、最終的にステージングサーバーと運用サーバーにプッシュできます。

(たとえば、いくつかのモジュールhttp://drupal.org/project/nodequeuehttp://drupal.org/project/views_bulk_operationshttp://drupal.org/project/admin_views)は、それらの機能の一部として、いくつかのビューを作成します。問題は、それらのビューをfoo機能に含めることができないことです。そのため、これらの特定のビューでは、ステージングサーバーと運用サーバーに対してローカルで行ったカスタマイズを(手動で)繰り返す必要があります。

何か案は?

私が試したこと:

1)手動でfoo_features.infoファイルにビュー名を追加してみました:

features[views_view][] = admin_content_node

しかし、そのとき、drush fu foo_features -yその行は削除され、.infoファイルとビュー定義はfoo_features.views_default.incファイルに含まれていません。

2)私はデータベースを調べました:

mysql> select vid, id, display_title, display_plugin, position from views_display;
+-----+----------+---------------+----------------+----------+
| vid | id       | display_title | display_plugin | position |
+-----+----------+---------------+----------------+----------+
|   3 | default  | Master        | default        |        1 |
|   3 | page     | Page          | page           |        2 |
|  30 | block    | Block         | block          |        2 |
...
|  46 | default  | Defaults      | default        |        1 |
|  46 | system_1 | System        | system         |        2 |
+-----+----------+---------------+----------------+----------+

最後の行(vid:46、display_plugin:system)は疑わしいと思われたため、(SQLを介して)systemをに変更しましたpage。次にdrush cc all、[1]でプロセスを実行して再試行しましたが、機能にビューを含めましたが、運がありませんでした。「システムビューの表示」(それが何であれ)を機能に含めることはできないと思ったので、これを試しました。

回答:


10

これは、モジュールが提供する4つのビューから必要なビューを複製し、元のビューを無効にし、100%追跡可能なクローンですべての作業を行うことで回避できます。


2

magtakが示唆しているように、これはビューを複製することで回避できます。これを機能させるには、別の名前で保存する必要があります。ビューのエクスポートとインポート(Varshithの提案による)は、ビューのマシン名を変更しているときにのみ機能します。複製は、エクスポート/インポートと同じ結果になりますが、マシン名の変更が強制され、アクションが少なくなります。

これを行う必要があるのは、これらのモジュールがデータベースにビューを入力するのではなく、ビューを追加するためです。フィーチャーにビューを追加したときと同じように、コードを介してビューを追加します。機能は、ビューがコードにすでに存在するかどうかをチェックし、存在する場合は、機能に追加することを提案しません。(ちなみに、インターフェイスを介してコードで定義されたビューを変更すると、ビューはビューのコピーを取得してデータベースに入力します。そこに変更が保存されます。これが、ビューが定義されている理由です。いずれにしても、データベース内のモジュールによって異なります。これは、それらに変更を加えたときに発生します。これは、ビュー自体またはフィーチャーからオーバーライドされたビューを元に戻すときにも発生します。データベース内のコピーは破棄され、ビューはデフォルトでデフォルトに戻りますコード)。

クローンアプローチの欠点の1つは、その瞬間から、モジュールによって最初に追加されたビューを自分で維持することです。クローンは元のクローンから完全に独立しているため、気の利いた新機能を追加するモジュールの更新がある場合は、おそらくわかりません。そうした場合は、それらの変更を手動でクローンに追加する必要があります。別の方法は、hook_views_default_views_alter()を使用してコードに追加を追加することです。しかし、これはあなたが(機能によって完全にサポートされていないことができますこのコードをフィーチャーに追加します。フィーチャーの.moduleファイルでそうする場合、フィーチャーはフィーチャーを再生成するときにそれをそのままにします)。コードでビューを手動で定義して何をしているのかを知る必要があります。カスタマイズされたビューのエクスポートをモジュールの元のコード(module.views_default.incにあります)と比較することで長い道のりをたどることができますが、それでもまだ気の弱い人には向いていません(そしてクローンを実行するよりも保守性が低下します)。

余談ですが、Nodequeueの場合は、デフォルトで追加するビューを使用できますが、nodequeueビューに移動してクローンを作成する価値はほとんどありません。それはノードのビューであり、ノードキューの必須の関係がノードキューの重みでソートされています。デフォルトのビューのクローンを作成して変更を加えるため、ゼロから始めるのとほぼ同じです。


0

私も同様の問題を抱えています。私が現在行っているのは、必要なビューを1つずつエクスポートしてインポートし直してから、フィーチャーを作成してそれらも含めることができるようにすることです。


残念ながら、このトリックは機能しませんでした。エクスポート/インポート後も、機能によってビューはまだ「追跡不可能」でした。
cherouvim 2012

0

私はパーティーに少し遅れましたが、参考までに、Nodequeue設定ページの/ admin / structure / nodequeue / settingsで[キューごとに1つのビューを自動的に作成する]チェックボックスをオフにして、機能に戻ると、機能でうまくいく可能性があります。もう一度再作成してみてください。

また、機能のチェックボックスをオフにしたことを追跡します。製品版でチェックを外すのを忘れると、正しく機能しません。

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