Bagaimana membuat basis data eksternal tersedia untuk Views?


8

Ada banyak diskusi di sini dan di tempat lain tentang penggunaan basis data eksternal di Drupal. Apa yang saya tahu dari itu adalah:

  • Cara terbaik untuk bekerja dengan data dalam tabel database adalah dengan menggunakan modul Views. Saya telah menginstal itu dan mulai menggunakannya dan menemukan itu bagus untuk bekerja dengan tabel yang saya tambahkan ke database situs.
  • Cara mudah untuk membuat Tampilan berfungsi dengan tabel yang tidak dibuat oleh Drupal adalah dengan modul Data. Modul ini memperlakukan setiap tabel dalam basis data situs yang tidak digunakan oleh Drupal sebagai "tabel yatim" dan memungkinkannya untuk "diadopsi" dengan mengklik tombol.
  • Modul "Table Wizard" tampaknya menyediakan cara untuk melakukannya dengan tabel yang tidak ada dalam basis data situs. Tetapi modul itu tidak tersedia untuk Drupal 7.
  • File "settings.php", di bagian "Pengaturan database", memiliki dokumentasi terperinci tentang cara menentukan basis data tambahan yang dapat digunakan oleh situs. Tetapi ketika database didefinisikan dengan cara itu, tabel-tabelnya tidak muncul dalam daftar tabel anak yatim di modul Data.

Perubahan yang saya buat ke definisi database di file "settings.php" dari salah satu situs saya adalah:

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

Saya memiliki tabel yang ingin saya gunakan di lebih dari satu situs dalam instalasi multi-situs saya. Ini berarti saya harus memiliki tabel dalam database yang dapat diakses oleh setiap situs. Menurut bacaan yang telah saya lakukan, pilihan saya untuk melakukan itu adalah:

  1. Terbaik, jika memungkinkan: Cari tahu bahwa ada cara untuk mendapatkan modul Data untuk mengenali tabel dalam database tambahan yang didefinisikan dalam "settings.php", sehingga dapat mengadopsinya.
  2. Gunakan awalan tabel untuk memungkinkan semua situs menggunakan satu database.
  3. Modul “ Forena Reports ” sepertinya melakukan apa yang saya butuhkan, tetapi ketika saya menginstalnya, saya tidak bisa membuatnya bekerja. Saya mengirimkan masalah 2475645 dan tidak bisa berbuat lebih banyak di sana kecuali ada perbaikan untuk masalah itu.
  4. Tulis modul saya sendiri untuk memberikan akses Views ke database tambahan yang didefinisikan dalam "settings.php".
  5. Instal Drupal 6 dengan Table Wizard dan gunakan itu untuk mendapatkan Tampilan untuk melihat tabel eksternal saya, dan kemudian entah bagaimana mengambil hasilnya dan memasukkannya ke Drupal 7. (Ini telah disarankan dalam beberapa posting.)
  6. Ikuti prosedur di https://drupal.stackexchange.com/a/3321/45991 , yang dimulai dengan memasang tambalan dan sepertinya juga perlu membuat modul saya sendiri.
  7. Saya juga sudah melihat modul Feeds, Feeds SQL, Views XML Backend, dan Migrasi, tetapi tidak ada yang mengatakan mereka dapat menghubungkan db eksternal ke Views. Apakah saya melewatkan sesuatu? Apakah salah satunya solusi yang tepat?

Opsi 2 tidak praktis karena akan menghasilkan basis data besar dengan ratusan tabel yang akan sangat sulit dikelola. Saya telah membuat kemajuan besar dalam memulai Drupal, tetapi saya tidak merasa puas dengan tugas 4, 5, atau 6. Apakah ada kemungkinan sesuatu seperti opsi 1 berfungsi? Atau ada cara lain untuk membuat Tampilan bekerja dengan tabel di luar basis data situs tanpa bisa menulis modul sendiri?

Dua detail tambahan: Tabel pertama yang perlu saya kerjakan cukup besar, lebih dari 6.000 baris dan sekitar 20 kolom. Tidak ada niat untuk memberikan pengunjung ke situs akses ke database kecuali untuk informasi yang diambil darinya untuk konten halaman.

Terima kasih atas bantuan Anda.

Jawaban:


2

Saya pikir modul Forena memang melakukan apa yang Anda butuhkan . Masalah pengaturan Anda hanya permintaan dukungan, saya pikir, bukan sesuatu yang membutuhkan "perbaikan". Setelah Anda menyelesaikannya, Anda bahkan akan memiliki pilihan untuk ya atau tidak menggunakan integrasi pandangannya juga.

Masalah Forena yang Anda buat didokumentasikan dengan sangat baik (kerja bagus!). Tapi tidak ada yang mengatakan apa pun tentang izin yang Anda berikan (yang membuat saya yakin Anda mungkin kehilangan beberapa izin yang diperlukan). Jadi, inilah upaya untuk mengatasinya:

  • Bisakah Anda jelaskan secara singkat izin mana dari Forena terkait yang Anda berikan?

  • Izin Forena yang diperlukan dijelaskan dalam Panduan Pemasangan yang menyertai Forena ? FYI: di sini adalah kutipan (bagian dari) itu:

    Forena memungkinkan banyak rincian terkait pelaporan otorisasi terkait, dengan menggunakan fasilitas administrasi Drupal standar untuk memberikan izin pada peran. Daftar izin Drupal terkait Forena yang dapat diberikan mungkin agak berlebihan pada awalnya. Karena ada 3 entri untuk setiap sumber data yang ditentukan, dan vanilla Forena sudah dilengkapi dengan 3 sumber data.

    Untuk mengambil panduan ini di situs Anda sendiri, cukup navigasikan ke /reports/help.setup

Izin tersebut untuk mengakses "data" pada awalnya dirahasiakan. Itu dirancang, karena Forena juga cukup sensitif terhadap apa pun yang berkaitan dengan pemberian akses ke data melalui Forena. Apa yang Anda tidak ingin terjadi adalah hanya dengan menginstal dan mengkonfigurasi Forena (tanpa admin izin), Anda dapat menggunakannya sebagai solusi untuk mengakses data yang aman.

Juga perhatikan bahwa terlepas dari izin di tingkat seluruh sumber data, Anda memiliki opsi untuk lebih mempersempit izin yang diperlukan untuk blok data tertentu (= kueri SQL kustom). Untuk melakukannya, cukup tentukan izin yang diperlukan (Drupal) di dalam pernyataan SQL (detail sintaks termasuk dalam panduan Forena). Sebuah usecase khas untuk ini, adalah untuk mengamankan akses ke kolom dengan data sensitif di dalamnya.

Pengungkapan: Saya adalah co- master dari modul ini,
saya harap ini tidak melanggar kebijakan situs tentang promosi diri .


Terima kasih untuk ini. Saya tidak memperhatikan ketika saya pertama kali melewati Pengaturan bahwa ada lima izin yang tidak diberikan kepada siapa pun. Saya sekarang memberikannya kepada Administrator (yaitu, saya). Dokumen Penyiapan tidak mengatakan mengapa izin tersebut ditahan pada awalnya dan apakah ada alasan untuk tidak memberikannya kepada Admin. Namun, saya sekarang memiliki sumber data tersebut, jadi ini telah menyelesaikan masalah itu. Apakah ada alasan Anda merespons di sini alih-alih dalam masalah yang saya kirimkan?
NewSites

Senang membaca kemajuannya! Entah bagaimana itu mengkompensasi "downvote" dari jawaban saya ... FYI: Saya juga merespons melalui antrian masalah sekarang. Jadi sekarang bahwa "ini telah menyelesaikan masalah", apakah itu berarti bahwa Anda menganggap Forena benar-benar sebagai "jawaban" untuk pertanyaan Anda (yang belum seperti di bullet no 3 OP)? FYI: Saya akan mencoba memperbarui jawaban saya di sini untuk menjelaskan secara singkat "mengapa izin itu awalnya ditahan", yang merupakan pertanyaan tambahan yang bagus!
Pierre.Vriens

Saya bukan orang yang memilih jawaban Anda. Saya sekarang telah menerima jawaban Anda sebagai <u> jawaban </u> dan memilihnya (yang sayangnya hanya mengembalikannya ke nol).
NewSites

Hm, saya tidak berasumsi @NewSites telah downvoted, sebenarnya saya sudah belajar untuk hidup dengan downvotes. Saya pribadi tidak suka downvoting secara umum, dan saya mengabaikan salah satu dari mereka di mana tidak ada komentar untuk menjelaskannya. Tapi tentu saja "upvoting", dan "menerima" sangat dihargai. Dan tentu saja mengetahui ada pengguna Drupal lain yang tampaknya telah menemukan Forena sekarang, cara untuk pergi! Pastikan untuk mengajukan masalah (dukungan?) Yang sesuai (untuk melihat dukungan di tempat kerja ...).
Pierre.Vriens

2

Saya berhasil melakukan ini dengan beberapa cara berbeda:

Gunakan tampilan SQL untuk membuat tabel virtual db_localyang merujuk ke tabel terkait di db__extra. Permintaan untuk membuat yang akan terlihat seperti ini:

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

Anda kemudian dapat merujuk ke tampilan SQL ini seolah-olah itu adalah tabel asli di database Drupal Anda, dan Anda bahkan tidak perlu menambahkan database eksternal sama sekali di settings.php. Perhatikan bahwa ini mungkin tidak kompatibel dengan modul Data (lihat https://www.drupal.org/node/1973806 ), tetapi Anda harus bisa menggambarkan SQL View ke modul Drupal Views dengan menerapkan hook_views_data(), dan berhenti menggunakan modul Data .

Berikut kemungkinan lain: gunakan awalan tabel selektif untuk mengelabui Drupal agar menulis ulang {some_table} ke db__extra.some_table. Ini tidak sama dengan awalan tabel Drupal Anda.

$databasesPengaturan Anda akan terlihat seperti ini:

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

Sekali lagi, saya tidak yakin apakah ini kompatibel dengan modul Data, karena saya tidak menggunakannya. Tetapi itu harus bekerja dengan Views jika Anda menerapkan hook_views_data()sendiri.


Anda mengatakan dalam kedua metode bahwa saya perlu menerapkan <code> hook_views_data () </code>. Bukankah itu memerlukan penulisan modul? Bagaimanapun, saya mencoba definisi database dalam metode kedua Anda. Itu tidak menyebabkan tabel di "db_extra" muncul di daftar modul tabel orphaned Modul data. Dalam metode pertama Anda, di mana saya menempatkan kueri yang Anda sarankan (jika tidak dalam modul khusus)?
NewSites

Jika Anda membuat Tampilan SQL, Anda harus menjalankan query CREATE VIEW sekali di MySQL secara langsung. Tidak perlu dijalankan kembali.
Les Lim

Maaf, saya masih belum mengerti. Di mana Anda ingin saya menjalankan kueri ini? Di phpMyAdmin? Apakah itu memberi saya sesuatu yang bisa saya gunakan di Views? Saya mencari "SQL view" di Drupal.org dan mendapat drupal.org/project/sql_views , yang tidak memiliki unduhan produksi dan yang dok di drupal.org/node/2458947 mengatakan saya perlu mengimplementasikan hook (yang saya anggap berarti menulis) a module) untuk memberi tahu modul Views tentang tampilan SQL saya. Jadi kedengarannya seperti apa yang Anda sarankan memerlukan menulis modul (yang saya belum siap), dan jika tidak, saya hanya tidak mengerti apa yang Anda perintahkan.
NewSites
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.