Come rendere un database esterno disponibile per Views?


8

C'è molta discussione qui e in altri luoghi sull'uso di database esterni in Drupal. Quello che ho capito è che:

  • Il modo migliore per lavorare con i dati in una tabella di database è utilizzare il modulo Views. L'ho installato e ho iniziato a usarlo e ho trovato perfetto per lavorare con una tabella che ho aggiunto al database del sito.
  • Il modo semplice per far funzionare Views con una tabella che non è stata creata da Drupal è con il modulo Dati. Questo modulo tratta qualsiasi tabella nel database del sito che non è in uso da Drupal come una "tabella orfana" e consente di essere "adottata" con un clic di un pulsante.
  • Il modulo "Creazione guidata tabella" apparentemente fornisce un modo per farlo con tabelle che non si trovano nel database del sito. Ma quel modulo non è disponibile per Drupal 7.
  • Il file "settings.php", nella sezione "Impostazioni database", contiene una documentazione dettagliata su come definire database aggiuntivi con cui il sito può lavorare. Ma quando un database viene definito in questo modo, le sue tabelle non vengono visualizzate nell'elenco delle tabelle orfane nel modulo Dati.

La modifica che ho apportato alla definizione del database nel file "settings.php" di uno dei miei siti è:

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

Ho una tabella che voglio usare in più di un sito nella mia installazione multi-sito. Ciò significa che ho bisogno di avere la tabella in un database accessibile a ciascun sito. Secondo la lettura che ho fatto, le mie opzioni per farlo sono:

  1. Meglio, se è possibile: Scopri che c'è un modo per ottenere il modulo Dati per riconoscere le tabelle nel database aggiuntivo definito in "settings.php", in modo da poterle adottare.
  2. Utilizzare i prefissi delle tabelle per consentire a tutti i siti di utilizzare un solo database.
  3. Il modulo " Forena Reports " sembrava fare esattamente ciò di cui ho bisogno, ma quando l'ho installato non sono riuscito a farlo funzionare. Ho inviato il numero 2475645 e non posso fare molto di più lì a meno che non ci sia una correzione per quel problema.
  4. Scrivi il mio modulo per dare a Views l'accesso al database aggiuntivo definito in "settings.php".
  5. Installa Drupal 6 con Creazione guidata tabella e usalo per visualizzare Views per vedere la mia tabella esterna, quindi in qualche modo prendine il risultato e inseriscilo in Drupal 7. (Questo è stato suggerito in alcuni post.)
  6. Seguire la procedura in https://drupal.stackexchange.com/a/3321/45991 , che inizia con l'installazione di una patch e sembra richiedere anche la creazione del mio modulo.
  7. Ho anche esaminato i moduli Feed, Feeds SQL, Views XML Backend e Migrate, ma nessuno di loro afferma di poter connettere un db esterno a Views. Mi sto perdendo qualcosa? Uno di questi è la soluzione giusta?

L'opzione 2 non è pratica perché si tradurrebbe in un enorme database con centinaia di tabelle che sarebbe molto difficile da gestire. Ho fatto grandi progressi per iniziare a usare Drupal, ma non mi sento all'altezza del compito di 4, 5 o 6. C'è qualche possibilità che funzioni come l'opzione 1? Oppure esiste un altro modo per far funzionare Views con una tabella esterna al database del sito senza poter scrivere il mio modulo?

Due dettagli aggiuntivi: la prima tabella con cui devo lavorare è piuttosto grande, oltre 6.000 righe e circa 20 colonne. Non vi è alcuna intenzione di dare ai visitatori del sito l'accesso al database ad eccezione delle informazioni tratte da esso per il contenuto della pagina.

Grazie per l'aiuto.

Risposte:


2

Penso che il modulo Forena faccia esattamente ciò di cui hai bisogno . Penso che il tuo problema di installazione sia solo una richiesta di supporto, non qualcosa che richiede una "correzione". Dopo aver risolto il problema, avrai anche la possibilità di scegliere sì o no di utilizzare anche l'integrazione delle viste.

Il problema di Forena che hai creato è ben documentato (ottimo lavoro!). Ma da nessuna parte dice nulla sulle autorizzazioni che hai concesso (il che mi fa credere che potresti perdere alcune delle autorizzazioni richieste). Quindi ecco un tentativo di affrontare questo:

  • Puoi spiegare brevemente quale delle autorizzazioni (obbligatorie) relative a Forena hai concesso?

  • Le autorizzazioni necessarie per Forena sono spiegate nella Guida all'installazione fornita con Forena ? Cordiali saluti: ecco una citazione di (parte di) esso:

    Forena consente molta granularità per quanto riguarda la segnalazione delle relative autorizzazioni, utilizzando le strutture di amministrazione Drupal standard per concedere autorizzazioni ai ruoli. L'elenco delle autorizzazioni Drupal correlate a Forena che possono essere concesse potrebbe essere inizialmente un po 'travolgente. Perché ci sono 3 voci per ogni origine dati definita e Vanilla Forena include già 3 origini dati.

    Per recuperare questa guida nel tuo sito, vai su /reports/help.setup

Tali autorizzazioni per accedere ai "dati" sono originariamente negate. Questo è di progettazione, perché Forena è anche abbastanza sensibile a tutto ciò che riguarda la concessione dell'accesso ai dati tramite Forena. Quello che non vorresti che accadesse è che semplicemente installando e configurando Forena (senza autorizzazioni di amministrazione), puoi usarlo come soluzione alternativa per accedere ai dati protetti.

Inoltre, oltre alle autorizzazioni a livello di un'intera fonte di dati, è disponibile un'opzione per perfezionare ulteriormente le autorizzazioni richieste per blocchi di dati specifici (= query SQL personalizzate). Per fare ciò, basta specificare tali autorizzazioni (Drupal) richieste all'interno dell'istruzione SQL (i dettagli della sintassi sono inclusi nelle guide di Forena). Un tipico esempio di utilizzo è quello di proteggere l'accesso alle colonne con dati sensibili al suo interno.

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


Grazie per questo. Non ho notato quando ho eseguito l'installazione per la prima volta che c'erano cinque autorizzazioni che non erano state concesse a nessuno. Li ho ora concessi all'amministratore (cioè a me). Il documento di installazione non spiega perché tali autorizzazioni siano inizialmente negate e se esiste un motivo per non concederle all'amministratore. Tuttavia, ora ho quelle fonti di dati, quindi questo ha risolto quel problema. C'è un motivo per cui hai risposto qui anziché nel problema che ho inviato?
NewSites

Ottimo per leggere i progressi! In qualche modo compensa il "downvote" della mia risposta ... FYI: Ora ho anche risposto tramite la coda dei problemi. Quindi ora che "questo ha risolto il problema", vuol dire che consideri davvero Forena come "la" risposta alla tua domanda (che non era ancora come nel punto 3 del PO)? Cordiali saluti: Proverò ad aggiornare la mia risposta qui per spiegare brevemente il "perché quelle autorizzazioni sono originariamente trattenute", che è una buona domanda extra!
Pierre.Vriens,

Non sono stato io a votare in negativo la tua risposta. Ora ho accettato la tua come <u> la risposta </u> e la ho votata in alto (che purtroppo la riporta solo a zero).
NewSites

Non pensavo che @NewSites avesse effettuato il downgrade, in realtà ho imparato a convivere con i downgrade. Personalmente non mi piace il downvoting in generale e li ignoro in cui non vi è alcun commento per spiegarli in qualche modo. Ma ovviamente "migliorare" e "accettare" è molto apprezzato. E ovviamente sapendo che c'è ancora un altro utente Drupal che sembra aver scoperto Forena ora, la strada da percorrere! Assicurati di presentare i problemi (supporto?) Ove appropriato (per vedere anche il supporto al lavoro ...).
Pierre.Vriens,

2

L'ho fatto con successo in un paio di modi diversi:

Utilizzare una vista SQL per creare una tabella virtuale in db_localriferimento alla tabella corrispondente in db__extra. La query da creare sarebbe simile a questa:

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

È quindi possibile fare riferimento a questa vista SQL come se fosse una tabella nativa nel database Drupal e non è nemmeno necessario aggiungere il database esterno in settings.php. Nota che questo potrebbe non essere compatibile con il modulo dati (vedi https://www.drupal.org/node/1973806 ), ma dovresti essere in grado di descrivere la vista SQL al modulo Drupal Views implementando hook_views_data()e smettere di usare il modulo dati .

Ecco un'altra possibilità: utilizzare i prefissi di tabella selettiva per indurre Drupal a riscrivere {some_table} in db__extra.some_table. Questo non è lo stesso del prefisso delle tue tabelle Drupal.

L' $databasesimpostazione sarebbe simile a questa:

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

Ancora una volta, non sono sicuro che questo sia compatibile con il modulo dati, poiché non lo uso. Ma dovrebbe funzionare con Views se ti implementi hook_views_data().


Dici in entrambi i metodi che devo implementare <code> hook_views_data () </code>. Non è necessario scrivere un modulo? In ogni caso, ho provato la definizione del database nel tuo secondo metodo. Non ha fatto apparire la tabella in "db_extra" nell'elenco delle tabelle orfane del modulo Dati. Nel tuo primo metodo, dove inserisco la query che hai suggerito (se non in un modulo personalizzato)?
NewSites

Se stai creando una vista SQL, devi eseguire direttamente la query CREATE VIEW in MySQL. Non è necessario eseguirlo nuovamente.
Les Lim,

Mi dispiace, ancora non capisco. Dove vuoi che esegua questa query? In phpMyAdmin? Mi darà qualcosa che posso usare in Views? Ho cercato "SQL view" su Drupal.org e ho ottenuto drupal.org/project/sql_views , che non ha download di produzione e il cui documento su drupal.org/node/2458947 dice che devo implementare un hook (che presumo significhi scrivere un modulo) per comunicare al modulo Views la mia vista SQL. Quindi sembra che ciò che stai suggerendo richieda la scrittura di un modulo (per il quale non mi sento pronto) e, in caso contrario, non capisco cosa mi stai dicendo di fare.
NewSites
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.