Laden von Knoten aus einer anderen Drupal-Datenbank mithilfe von Ansichten

12

Ich versuche, Views zu verwenden, um Knoten aus einer anderen Drupal-Datenbank zu laden, die in settings.php mit dem Schlüssel 'cms' definiert ist. Beide Sites sind Drupal 7. Die andere Datenbank ist eine andere Drupal-Installation, die als Inhalts-Repository oder zentrales CMS fungiert. Mein Ziel ist es, einen neuen Ansichtstyp / eine neue Ansichtsgruppe auf der Zielwebsite zu erstellen. Beim Erstellen einer Ansicht kann der Site-Build daher "CMS-Inhalt" anstelle von "Inhalt" auswählen. Ich hoffe, dass ein Site Builder dann in der Lage ist, eine Ansicht zu erstellen, die normalerweise auf Inhaltstypen und Inhalten der zentralisierten CMS-Site basiert, selbst wenn ich Ansichten zu allen Feldern in jedem Inhaltstyp angeben muss.

In meiner Implementierung von hook_views_data () habe ich den Schlüssel 'database' festgelegt, kann aber nicht herausfinden, wie aus der Knotentabelle gelesen werden kann, ohne $ data ['node'] zu überschreiben.

function cms_connector_views_data() {
  $data['cms_connector']['table']['group'] = t('CMS Content');
  $data['cms_connector']['table']['base'] = array(
    'field' => 'nid',
    'title' => t('CMS Content'),
    'help' => t('Content from the centralized CMS.'),
    'database' => 'cms',
  );

  return $data;
}

Natürlich sucht dies nicht nach einer Knotentabelle, sondern nach einer cms_connectorTabelle in meiner cmsDatenbank, die es nicht gibt.

SQLSTATE[42S02]: Base table or view not found: 1146 Table 'cms.cms_connector' doesn't exist

http://views-help.doc.logrus.com/help/views/api-tables besagt, dass der Schlüssel innerhalb von $ data…

sollte der tatsächliche Datenbankname der Tabelle sein (ohne Präfix), kann aber ein Alias ​​sein, solange die Verknüpfungsinformationen (später erklärt) den tatsächlichen Namen der Tabelle enthalten.

Ich möchte eigentlich keinen Join ausführen, sondern eine Basistabelle aus der Knotentabelle der anderen Datenbank erstellen. Aber ich habe es trotzdem versucht (obwohl es keinen Sinn ergibt), nachdem ich http://drupal.org/node/1713010#comment-6310438 gesehen habe :

$data['cms_connector']['table']['join'] = array(
  'node' => array(
    'left_field' => 'nid',
    'left_table' => 'node',
    'field' => 'nid',
    'table' => 'node',
  ),
);

Ich habe hier gesucht, und Stapelüberlauf, aber das meiste, was ich finde, ist Einige-andere-Datenbank-zu-Drupal, nicht Drupal-zu-Drupal.

Ich habe die Frage /drupal/12736/using-nodes-from-another-site-database hier gefunden, aber es geht um Knotenreferenzen und sie ist unbeantwortet.

Ich habe darüber nachgedacht, mit Services XML / JSON von der zentralisierten Site zu lesen, aber dieser Ansatz weist zu viele Hürden auf. Ich möchte Knoten auch nicht wirklich synchronisieren.

Cottser
quelle
1
Ich habe ein bisschen mehr Fortschritte gemacht, indem ich ein benutzerdefiniertes Abfrage-Plugin erstellt habe, das views_plugin_query_default erweitert. Ich habe den Abfrageeinstellungen eine Option hinzugefügt, mit der die Ansicht umgeschaltet und Daten aus der anderen Datenbank abgerufen werden. Ich kann Knotentitel und andere Daten aus der Knotentabelle in der anderen Datenbank abrufen und weiterhin daran arbeiten, die Felder abzurufen.
Cottser

Antworten:

1

Betrachten Sie das Forena- Modul. Es kann verwendet werden, um die Daten in anderen Datenbanken abzufragen (nicht zu aktualisieren). Es werden verschiedene DBMS-Formate unterstützt, beispielsweise auch eine andere Drupal-Datenbank.

Forena basiert auf der Idee, mithilfe von SQL Daten aus einer Datenbank abzurufen und mithilfe von XHTML und CSS in Webberichten zu formatieren. Für weitere Informationen zu Forena stehen zwei Dokumentationsarten zur Verfügung:

  • Community-Dokumentation .
  • Mit Forena gelieferte Dokumentation, auf die Sie direkt nach der Installation und Aktivierung des Moduls zugreifen können. Kasse der Demo - Site für ein Online - Beispiel für den Strom:

    • Forena-Dokumentation - Verwenden Sie den Link "Berichtsdokumentation" oder besuchen Sie den entsprechenden Link / Berichte / Hilfe.
    • Forena-Beispiele : Verwenden Sie den Link "Berichtsbeispiele" oder rufen Sie die entsprechenden Links / Berichte / Beispiele auf (diese Beispiele sind voll funktionsfähig. Versuchen Sie also, ein wenig damit zu experimentieren, wie z. B. die Drilldowns im SVG-Diagrammbeispiel).

Disclosure: Ich bin co -maintainer von Forena,
ich hoffe , dass dies nicht gegen die Website Politik auf Eigenwerbung .

Pierre.Vriens
quelle
0

Sie können Inhalte mithilfe des Moduls Ansichten exportieren, um Daten zu exportieren, und sie mithilfe des Moduls Feeds importieren (Sie können sie regelmäßig mithilfe des Moduls Regeln importieren ).

Shidsun
quelle
-1

Eine Option mit settings.php-Datei. Konfigurieren Sie die zweite Datenbankinstanz in der Datei settings.php. Verwenden Sie nach dem Einrichten der Instanz diese db using- db_set_active('drupal2')Funktion und machen Sie alles mit Ihrer zweiten db.

z.B

$databases = array(
    'default' =>
    array(
        'default' =>
        array(
            'database' => 'drupal1',
            'username' => 'root',
            'password' => '',
            'host' => 'localhost',
            'port' => '',
            'driver' => 'mysql',
            'prefix' => '',
        ),
    ),
    'cms' => // additional database starts here
    array(
        'default' =>
        array(
            'database' => 'cms',
            'username' => 'root',
            'password' => '',
            'host' => 'localhost',
            'port' => '',
            'driver' => 'mysql',
            'prefix' => '',
        )
    ),
);

In Ihrem Modul können Sie beide Datenbanken wie folgt verwenden:

db_set_active('cms');
$node = node_load(10);
var_dump($node):
AshwinP
quelle
Dies hilft jedoch nicht bei Views…
Cottser
Hast du ausprobiert 'database' => 'cms', mit cmsSchlüssel konfiguriert mit cmsDatenbank in settings.phpDatei.
AshwinP