web-dev-qa-db-ja.com

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

私は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を介して)systempageに変更しました。次に、drush cc allを実行し、ビューを機能に含めたが運が悪かったため、[1]でプロセスを再試行しました。 「システムビューの表示」(それが何であれ)を機能に含めることはできないと思ったので、これを試しました。

7
cherouvim

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

11
magtak

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

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

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

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

2
Eelke Blok

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

0
Varshith

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

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

0