kann die Ansicht mit Funktionen nicht verfolgen

6

Ich verwende diese Funktion Features, um fooInhaltstypen und -ansichten zu verfolgen, damit sie im Code beschrieben, in mein Repository übernommen und schließlich auf die Staging- und Produktionsserver übertragen werden können.

Einige Module (z. B. http://drupal.org/project/nodequeue , http://drupal.org/project/views_bulk_operations , http://drupal.org/project/admin_views ) erstellen einige Ansichten als Teil ihrer Funktionalität. Das Problem ist, dass ich diese Ansichten nicht in meine fooFunktion aufnehmen kann. Für diese spezifischen Ansichten muss ich alle Anpassungen, die ich lokal an den Staging- und Produktionsservern vorgenommen habe, (von Hand) wiederholen.

Irgendwelche Ideen?

Was ich versucht habe:

1) Ich habe versucht, den Ansichtsnamen manuell in die foo_features.infoDatei einzufügen:

features[views_view][] = admin_content_node

Aber wenn ich das tue drush fu foo_features -y, wird diese Zeile entfernt und die .infoDatei und die Ansichtsdefinition werden nicht in die foo_features.views_default.incDatei aufgenommen.

2) Ich habe mir die Datenbank angesehen:

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 |
+-----+----------+---------------+----------------+----------+

Diese letzte Zeile (vid: 46, display_plugin: system) schien verdächtig, also habe ich (direkt über SQL) systemzu geändert page. Ich habe dann drush cc allden Vorgang bei [1] wiederholt, um die Ansicht in das Feature aufzunehmen, aber ohne Glück. Ich habe dies versucht, weil ich dachte, dass "Systemansichtsanzeigen" (was auch immer das bedeutet) nicht in Funktionen enthalten sein können.

Cherouvim
quelle

Antworten:

10

Dies kann umgangen werden, indem Sie die benötigten Ansichten aus den vier vom Modul bereitgestellten Ansichten klonen, die ursprünglichen Ansichten deaktivieren und Ihre gesamte Arbeit in Ihren Klonen ausführen, die zu 100% nachverfolgbar sind.

Magtak
quelle
2

Wie von magtak vorgeschlagen, kann dies durch Klonen der Ansichten umgangen werden. Sie müssen unter einem anderen Namen gespeichert werden, damit dies funktioniert. Das Exportieren und Importieren einer Ansicht (wie von Varshith vorgeschlagen) funktioniert nur, wenn Sie dies tun, während Sie den Computernamen der Ansicht ändern. Das Klonen hat das gleiche Ergebnis wie das Exportieren / Importieren, außer dass die Änderung des Computernamens erzwungen wird und weniger Aktionen umfasst.

Der Grund dafür ist, dass diese Module Ansichten nicht durch Eingabe in die Datenbank, sondern über Code hinzufügen, ähnlich wie beim Hinzufügen einer Ansicht zu einem Feature. Features prüfen, ob eine Ansicht bereits im Code vorhanden ist, und bieten sie nicht zum Hinzufügen zu Ihrem Feature an, falls dies der Fall ist. (Übrigens: Wenn Sie eine Ansicht ändern, die durch Code über die Benutzeroberfläche definiert ist, nimmt Views eine Kopie der Ansicht und gibt sie in die Datenbank ein. Dort werden Ihre Änderungen gespeichert. Aus diesem Grund finden Sie möglicherweise definierte Ansichten Dies geschieht in dem Moment, in dem Sie Änderungen an ihnen vornehmen. Dies geschieht auch, wenn Sie eine überschriebene Ansicht entweder aus Ansichten selbst oder aus Features zurücksetzen. Die Kopie in der Datenbank wird gelöscht und Views wird standardmäßig auf zurückgesetzt der Code).

Ein Nachteil des Klonansatzes besteht darin, dass Sie von diesem Moment an allein die Ansicht beibehalten, die ursprünglich vom Modul hinzugefügt wurde. Ihr Klon ist völlig unabhängig vom Original. Wenn es also Modul-Updates gibt, die raffinierte neue Funktionen hinzufügen, werden Sie es wahrscheinlich nicht herausfinden. Wenn Sie dies tun würden, müssten Sie diese Änderungen von Hand zu Ihrem Klon hinzufügen. Eine Alternative ist die Verwendung von hook_views_default_views_alter (), um Ihre Ergänzungen in den Code einzufügen. Dies wird jedoch von den Funktionen nicht unterstützt (Sie könnenFügen Sie diesen Code einem Feature hinzu. Wenn Sie dies in der .module-Datei für das Feature tun, lassen Features es beim erneuten Generieren des Features in Ruhe. Sie müssen wissen, was Sie tun, um Ansichten im Code von Hand zu definieren. Sie können einen langen Weg zurücklegen, indem Sie einen Export Ihrer benutzerdefinierten Ansicht mit dem Originalcode im Modul vergleichen (der in themodule.views_default.inc zu finden ist), aber es ist immer noch nichts für schwache Nerven (und es kann sich herausstellen, dass dies der Fall ist weniger wartbar als nur das Klonen).

Abgesehen davon können Sie für Nodequeue zwar die standardmäßig hinzugefügten Ansichten verwenden, aber es lohnt sich kaum, eine Nodequeue-Ansicht zu klonen. Es handelt sich lediglich um eine Ansicht von Knoten mit einer obligatorischen Beziehung in der Knotenwarteschlange, sortiert nach dem Gewicht der Knotenwarteschlange. Es ist wahrscheinlich ungefähr der gleiche Aufwand, von vorne zu beginnen, wie die Standardansicht zu klonen und dann Ihre Änderungen vorzunehmen.

Eelke Blok
quelle
0

Ich habe auch ein ähnliches Problem. Derzeit exportiere ich die benötigten Ansichten nacheinander, importiere sie zurück und erstelle dann die Funktion, damit Sie sie auch einschließen können.

Varshith
quelle
Leider hat dieser Trick nicht funktioniert. Nach dem Export / Import war die Ansicht nach Funktionen immer noch "nicht nachverfolgbar".
Cherouvim
0

Ich bin etwas spät zur Party, aber zu Ihrer Information, Sie haben möglicherweise Glück, wenn Sie es in Features abrufen, wenn Sie auf der Seite mit den Einstellungen für die Knotenwarteschlange / admin / structure / nodequeue / settings die Option "Automatisch eine Ansicht pro Warteschlange erstellen" deaktivieren und dann zu Features zurückkehren und versuchen Sie erneut zu erstellen.

Verfolgen Sie außerdem, ob Sie dieses Kontrollkästchen in den Funktionen deaktiviert haben. Wenn Sie vergessen, es auf dem Produkt zu deaktivieren, funktioniert es nicht richtig.

heart.cooks.mind
quelle