Wie kann ich eine externe Datenbank für Ansichten verfügbar machen?


8

Hier und an anderen Orten wird viel über die Verwendung externer Datenbanken in Drupal diskutiert. Was ich daraus herausgefunden habe ist:

  • Der beste Weg, um mit Daten in einer Datenbanktabelle zu arbeiten, ist die Verwendung des Moduls Ansichten. Ich habe das installiert und angefangen, es zu verwenden, und fand es großartig, mit einer Tabelle zu arbeiten, die ich der Datenbank der Site hinzugefügt habe.
  • Die einfache Möglichkeit, Views dazu zu bringen, mit einer Tabelle zu arbeiten, die nicht von Drupal erstellt wurde, ist das Datenmodul. Dieses Modul behandelt jede Tabelle in der Site-Datenbank, die von Drupal nicht verwendet wird, als "verwaiste Tabelle" und ermöglicht die "Übernahme" auf Knopfdruck.
  • Das Modul "Tabellenassistent" bietet anscheinend eine Möglichkeit, dies mit Tabellen zu tun, die sich nicht in der Datenbank der Site befinden. Dieses Modul ist jedoch für Drupal 7 nicht verfügbar.
  • Die Datei "settings.php" im Abschnitt "Datenbankeinstellungen" enthält eine detaillierte Dokumentation zum Definieren zusätzlicher Datenbanken, mit denen die Site arbeiten kann. Wenn eine Datenbank auf diese Weise definiert wird, werden ihre Tabellen nicht in der Liste der verwaisten Tabellen im Datenmodul angezeigt.

Die Änderung, die ich an der Datenbankdefinition in der Datei "settings.php" einer meiner Websites vorgenommen habe, lautet:

$databases = array ( 'default' => array ('default' => array ( 'database' => 'db_local', 'username' => 'db_local', 'password' => '_________', 'host' => 'localhost', 'port' => '', 'driver' => 'mysql', 'prefix' => '', ), ), 'extra' => array ('default' => array ( 'database' => 'db__extra', 'username' => 'db_admin', 'password' => '_________, 'host' => 'localhost', 'port' => '', 'driver' => 'mysql', 'prefix' => '', ), ), );

Ich habe eine Tabelle, die ich in meiner Installation an mehreren Standorten an mehreren Standorten verwenden möchte. Dies bedeutet, dass ich die Tabelle in einer Datenbank haben muss, auf die jeder Standort zugreifen kann. Nach der Lektüre, die ich gemacht habe, sind meine Optionen dafür:

  1. Am besten, wenn es möglich ist: Finden Sie heraus, dass das Datenmodul Tabellen in der zusätzlichen Datenbank, die in "settings.php" definiert ist, erkennen kann, damit es sie übernehmen kann.
  2. Verwenden Sie Tabellenpräfixe, damit alle Sites eine Datenbank verwenden können.
  3. Das Modul „ Forena Reports “ schien genau das zu tun, was ich brauchte, aber als ich es installierte, konnte ich es nicht zum Laufen bringen. Ich habe das Problem 2475645 eingereicht und kann dort nicht viel mehr tun, es sei denn, es gibt eine Lösung für dieses Problem.
  4. Schreiben Sie mein eigenes Modul, um Views Zugriff auf die zusätzliche Datenbank zu gewähren, die in "settings.php" definiert ist.
  5. Installieren Sie Drupal 6 mit dem Tabellenassistenten und verwenden Sie diesen, damit Views meine externe Tabelle anzeigt. Nehmen Sie dann das Ergebnis und fügen Sie es in Drupal 7 ein. (Dies wurde in einigen Beiträgen vorgeschlagen.)
  6. Befolgen Sie die Anweisungen unter /drupal//a/3321/45991 , die mit der Installation eines Patches beginnen und anscheinend auch das Erstellen eines eigenen Moduls erfordern.
  7. Ich habe mir auch die Module Feeds, Feeds SQL, Views XML Backend und Migrate angesehen, aber keiner von ihnen gibt an, dass er eine externe Datenbank mit Views verbinden kann. Vermisse ich etwas Ist einer von ihnen die richtige Lösung?

Option 2 ist nicht praktikabel, da dies zu einer riesigen Datenbank mit Hunderten von Tabellen führen würde, deren Verwaltung sehr schwierig wäre. Ich habe große Fortschritte beim Einstieg in Drupal gemacht, bin aber der Aufgabe von 4, 5 oder 6 nicht gewachsen. Gibt es eine Möglichkeit, dass so etwas wie Option 1 funktioniert? Oder gibt es eine andere Möglichkeit, Views dazu zu bringen, mit einer Tabelle außerhalb der Site-Datenbank zu arbeiten, ohne mein eigenes Modul schreiben zu können?

Zwei zusätzliche Details: Die erste Tabelle, mit der ich arbeiten muss, ist ziemlich groß, über 6.000 Zeilen und ungefähr 20 Spalten. Es besteht keine Absicht, Besuchern der Site Zugriff auf die Datenbank zu gewähren, mit Ausnahme von Informationen, die für den Seiteninhalt daraus gezogen werden.

Danke für Ihre Hilfe.

Antworten:


2

Ich denke, das Forena- Modul macht genau das, was Sie brauchen . Ihr Setup-Problem ist meiner Meinung nach nur eine Support-Anfrage, nicht etwas, das eine "Korrektur" erfordert. Nachdem Sie das gelöst haben, haben Sie sogar die Wahl, die Integration der Ansichten auch mit Ja oder Nein zu verwenden.

Die von Ihnen erstellte Forena-Ausgabe ist sehr gut dokumentiert (großartige Arbeit!). Aber nirgendwo sagt es etwas über Berechtigungen aus, die Sie erteilt haben (was mich glauben lässt, dass Ihnen möglicherweise einige der erforderlichen Berechtigungen fehlen). Hier ist ein Versuch, das anzugehen:

  • Können Sie kurz erklären, welche der (erforderlichen) Forena-bezogenen Berechtigungen Sie erteilt haben?

  • Die erforderlichen Forena-Berechtigungen werden im Setup-Handbuch erläutert , das mit Forena geliefert wird . Zu Ihrer Information: Hier ist ein Zitat (ein Teil davon):

    Forena bietet viel Granularität bei der Berichterstellung für verwandte Berechtigungen, indem die Standard-Verwaltungsfunktionen von Drupal verwendet werden, um Rollen Berechtigungen zu erteilen. Die Liste der Forena-bezogenen Drupal-Berechtigungen, die erteilt werden können, ist zunächst möglicherweise etwas überwältigend. Weil es für jede definierte Datenquelle 3 Einträge gibt und Vanilla Forena bereits 3 Datenquellen enthält.

    Um dieses Handbuch auf Ihrer eigenen Website abzurufen, navigieren Sie einfach zu /reports/help.setup

Diese Berechtigungen zum Zugriff auf die "Daten" werden ursprünglich verweigert. Dies ist beabsichtigt, da Forena auch sehr empfindlich auf alles reagiert, was mit der Gewährung des Zugriffs auf Daten über Forena zusammenhängt. Was Sie nicht möchten, ist, dass Sie Forena durch einfache Installation und Konfiguration (ohne Administratorrechte) als Problemumgehung für den Zugriff auf gesicherte Daten verwenden können.

Beachten Sie außerdem, dass Sie neben Berechtigungen auf der Ebene einer gesamten Datenquelle die Option haben, die erforderlichen Berechtigungen für bestimmte Datenblöcke (= benutzerdefinierte SQL-Abfragen) weiter zu verfeinern. Geben Sie dazu einfach die erforderlichen (Drupal-) Berechtigungen in der SQL-Anweisung an (Syntaxdetails sind in den Forena-Handbüchern enthalten). Ein typischer Anwendungsfall hierfür ist der sichere Zugriff auf Spalten mit vertraulichen Daten.

Disclosure: Ich bin ein Co -maintainer dieses Moduls,
hoffe ich dies nicht der Site verletzt Politik auf Eigenwerbung .


Danke dafür. Als ich das Setup zum ersten Mal durchlief, bemerkte ich nicht, dass es fünf Berechtigungen gab, die niemandem gewährt wurden. Ich habe sie jetzt dem Administrator (dh mir) gewährt. Das Setup-Dokument gibt nicht an, warum diese Berechtigungen ursprünglich verweigert werden und ob es einen Grund gibt, sie dem Administrator nicht zu erteilen. Allerdings habe ich jetzt diese Datenquellen, so dass das Problem gelöst ist. Gibt es einen Grund, warum Sie hier statt in der von mir eingereichten Ausgabe geantwortet haben?
NewSites

Schön, den Fortschritt zu lesen! Es kompensiert irgendwie die "Abwertung" meiner Antwort ... FYI: Ich habe jetzt auch über die Problemwarteschlange geantwortet. Bedeutet das nun, dass "dies das Problem gelöst hat", dass Sie Forena tatsächlich als "die" Antwort auf Ihre Frage betrachten (die es noch nicht wie in Punkt 3 des OP war)? Zu Ihrer Information: Ich werde versuchen, meine Antwort hier zu aktualisieren, um kurz zu erklären, warum diese Berechtigungen ursprünglich verweigert wurden. Dies ist eine gute zusätzliche Frage!
Pierre.Vriens

Ich war nicht derjenige, der Ihre Antwort abgelehnt hat. Ich habe jetzt Ihre als <u> die </ u> Antwort akzeptiert und sie hochgestimmt (was sie leider nur auf Null zurückbringt).
NewSites

Hm, ich habe nicht angenommen, dass @NewSites downvotiert hat, eigentlich habe ich gelernt, mit downvotes zu leben. Ich persönlich mag Downvoting im Allgemeinen nicht und ignoriere jeden von ihnen, bei dem es keinen Kommentar gibt, der sie irgendwie erklärt. Aber natürlich wird "Upvoting" und "Akzeptieren" sehr geschätzt. Und natürlich zu wissen, dass es noch einen anderen Drupal-Benutzer gibt, der Forena jetzt entdeckt zu haben scheint. Stellen Sie sicher, dass Sie gegebenenfalls Probleme einreichen (Support?) (Um auch den Support bei der Arbeit zu sehen ...).
Pierre.Vriens

2

Ich habe dies auf verschiedene Arten erfolgreich gemacht:

Verwenden Sie eine SQL-Ansicht, um eine virtuelle Tabelle zu erstellen db_local, die auf die entsprechende Tabelle in verweist db__extra. Die zu erstellende Abfrage würde ungefähr so ​​aussehen:

USE db_local; CREATE VIEW some_table AS SELECT * FROM db__extra.some_table;

Sie können dann auf diese SQL-Ansicht verweisen, als wäre sie eine native Tabelle in Ihrer Drupal-Datenbank, und Sie müssen die externe Datenbank in settings.php überhaupt nicht hinzufügen. Beachten Sie, dass dies möglicherweise nicht mit dem Datenmodul kompatibel ist (siehe https://www.drupal.org/node/1973806 ). Sie sollten jedoch in der Lage sein, die SQL-Ansicht für das Drupal Views-Modul durch Implementierung zu beschreiben hook_views_data()und die Verwendung des Datenmoduls zu beenden .

Hier ist eine andere Möglichkeit: Verwenden Sie selektive Tabellenpräfixe, um Drupal dazu zu bringen, {some_table} in db__extra.some_table umzuschreiben. Dies ist nicht dasselbe wie das Präfixieren Ihrer Drupal-Tabellen.

Ihre $databasesEinstellung würde folgendermaßen aussehen:

$databases = array ( 'default' => array ('default' => array ( 'database' => 'db_local', 'username' => 'db_local', 'password' => '_________', 'host' => 'localhost', 'port' => '', 'driver' => 'mysql', 'prefix' => array( 'some_table' => 'db__extra.', ), )) );

Auch hier bin ich mir nicht sicher, ob dies mit dem Datenmodul kompatibel ist, da ich es nicht verwende. Es sollte jedoch mit Ansichten funktionieren, wenn Sie sich hook_views_data()selbst implementieren .


Sie sagen in beiden Methoden, dass ich <code> hook_views_data () </ code> implementieren muss. Benötigt das nicht das Schreiben eines Moduls? In jedem Fall habe ich die Datenbankdefinition in Ihrer zweiten Methode ausprobiert. Die Tabelle in "db_extra" wurde nicht in der Liste der verwaisten Tabellen des Datenmoduls angezeigt. Wo lege ich bei Ihrer ersten Methode die von Ihnen vorgeschlagene Abfrage ab (wenn nicht in einem benutzerdefinierten Modul)?
NewSites

Wenn Sie eine SQL-Ansicht erstellen, müssen Sie die CREATE VIEW-Abfrage einmal direkt in MySQL ausführen. Es muss nicht erneut ausgeführt werden.
Les Lim

Es tut mir leid, ich verstehe immer noch nicht. Wo soll ich diese Abfrage ausführen? In phpMyAdmin? Gibt mir das etwas, das ich in Ansichten verwenden kann? Ich habe auf Drupal.org nach "SQL-Ansicht" gesucht und drupal.org/project/sql_views erhalten , das keinen Produktionsdownload hat und dessen Dokument unter drupal.org/node/2458947 besagt, dass ich einen Hook implementieren muss (was vermutlich Schreiben bedeutet ein Modul), um das Views-Modul über meine SQL-Ansicht zu informieren. Es klingt also so, als ob für das, was Sie vorschlagen, ein Modul geschrieben werden muss (für das ich mich einfach nicht bereit fühle), und wenn nicht, verstehe ich einfach nicht, was Sie mir sagen.
NewSites
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.