Caricamento dei nodi da un altro database Drupal usando Views


12

Sto cercando di usare Views per caricare nodi da un altro database Drupal definito in settings.php con una chiave di 'cms'. Entrambi i siti sono Drupal 7. L'altro database è un'installazione Drupal diversa che funge da repository di contenuti o CMS centralizzato. Il mio obiettivo è quello di creare un nuovo tipo / gruppo di vista sul sito di destinazione, quindi quando si crea una vista la build del sito può scegliere "Contenuto CMS" anziché "Contenuto". Spero che un costruttore di siti sarebbe quindi in grado di costruire una vista normalmente basata su tipi di contenuto e contenuti dal sito CMS centralizzato, anche se devo dire visualizzazioni su tutti i campi di ciascun tipo di contenuto.

Nella mia implementazione hook_views_data () ho impostato la chiave 'database', ma non riesco a capire come leggere dalla tabella dei nodi senza sovrascrivere $ data ['node'].

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;
}

Ovviamente questo non cerca una tabella dei nodi, cerca una cms_connectortabella nel mio cmsdatabase, che non esiste.

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 afferma che la chiave all'interno di $ data ...

dovrebbe essere il nome effettivo del database della tabella (escluso il prefisso), ma può essere un alias purché le informazioni di join (spiegate più avanti) contengano il vero nome della tabella.

In realtà non voglio fare un join, voglio creare una tabella di base dalla tabella dei nodi dell'altro database. Ma l'ho provato comunque (anche se non ha davvero senso) dopo aver visto http://drupal.org/node/1713010#comment-6310438 :

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

Ho cercato da queste parti, fare e Stack Overflow, ma la maggior parte di ciò che sto trovando è Some-other-database-to-Drupal, non Drupal-to-Drupal.

Ho trovato la domanda /drupal/12736/using-nodes-from-another-site-database qui, ma riguarda i riferimenti ai nodi ed è senza risposta.

Ho pensato di utilizzare i servizi per leggere XML / JSON dal sito centralizzato, ma ci sono troppi ostacoli a questo approccio. Non voglio nemmeno sincronizzare i nodi.


1
Ho fatto ulteriori progressi creando un plug-in di query personalizzato che estende views_plugin_query_default. Ho aggiunto un'opzione alle impostazioni della query che attiva / disattiva la vista e estrae i dati dall'altro database. Posso estrarre i titoli dei nodi e altri dati dalla tabella dei nodi nell'altro database, lavorando ancora per ottenere i campi.
Cottser,

Risposte:


1

Considera di guardare il modulo Forena . Può essere utilizzato per interrogare (non aggiornare) i dati in altri database. Sono supportati vari formati DBMS, come anche un altro database Drupal.

Forena nasce dall'idea di utilizzare SQL per estrarre i dati da un database e utilizzare XHTML e CSS per formattarli in report Web. Per maggiori dettagli su Forena, sono disponibili 2 tipi di documentazione:

  • Documentazione comunitaria .
  • Documentazione fornita con Forena, a cui è possibile accedere subito dopo l'installazione e l'abilitazione del modulo. Dai un'occhiata al sito demo per un esempio online dell'attuale:

    • Documentazione di Forena : utilizzare il collegamento "Documentazione sui rapporti" o visitare il relativo collegamento / rapporti / guida.
    • Campioni Forena : utilizza il link "Rapporti di report" o visita il relativo link / report / campioni (questi esempi sono completamente funzionali, quindi assicurati di sperimentare un po 'con esso, come i drill down disponibili sul campione SVG Graph).

Divulgazione: sono un condirettore di Forena,
spero che ciò non violi la politica del sito sull'autopromozione .


0

Puoi esportare il contenuto utilizzando il modulo Visualizzazioni per esportare i dati e importarli utilizzando il modulo Feed (puoi importare periodicamente utilizzando il modulo Regole ).



-1

Un'opzione che utilizza il file settings.php. Configura la seconda istanza del database nel file settings.php. Dopo aver impostato l'istanza usa quel db usando la db_set_active('drupal2')funzione e fai qualsiasi cosa con il tuo secondo db.

per esempio

$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' => '',
        )
    ),
);

nel tuo modulo puoi usare entrambi i database come di seguito:

db_set_active('cms');
$node = node_load(10);
var_dump($node):

Questo non aiuta con Views però ...
Cottser

Hai provato 'database' => 'cms', con la cmschiave configurata con il cmsdatabase nel settings.phpfile.
Ashwin,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.