Memuat node dari database Drupal lain menggunakan Views


12

Saya mencoba menggunakan Views untuk memuat node dari database Drupal lain yang didefinisikan di settings.php dengan kunci 'cms'. Kedua situs tersebut adalah Drupal 7. Database lainnya adalah instalasi Drupal berbeda yang bertindak sebagai repositori konten atau CMS terpusat. Tujuan saya adalah membuat tipe tampilan / grup baru di situs tujuan, jadi saat membuat tampilan, situs dapat memilih "Konten CMS" alih-alih "Konten". Saya berharap pembuat situs kemudian dapat membangun tampilan secara normal berdasarkan jenis konten dan konten dari situs CMS terpusat, bahkan jika saya harus memberi tahu pandangan tentang semua bidang di setiap jenis konten.

Dalam implementasi hook_views_data () saya, saya telah menetapkan kunci 'database', tetapi tidak dapat menemukan cara membaca dari tabel node tanpa mengganti $ 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;
}

Tentu saja ini tidak mencari tabel simpul, ini mencari cms_connectortabel di cmsbasis data saya , yang tidak ada.

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 mengatakan bahwa kunci dalam $ data ...

harus nama database aktual dari tabel (tidak termasuk awalan), tetapi bisa berupa alias selama informasi yang digabungkan (dijelaskan nanti) berisi nama sebenarnya dari tabel.

Saya sebenarnya tidak ingin melakukan join, saya ingin membuat tabel dasar dari tabel simpul database lain. Tapi saya tetap mencoba ini (walaupun itu tidak masuk akal) setelah melihat 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',
  ),
);

Saya telah mencari di sekitar sini, melakukan, dan Stack Overflow, tetapi sebagian besar dari apa yang saya temukan adalah database-lain-untuk-Drupal, bukan Drupal-ke-Drupal.

Saya menemukan /drupal/12736/using-nodes-from-another-site-database di sini, tapi ini tentang referensi node, dan tidak terjawab.

Saya berpikir tentang menggunakan Layanan untuk membaca XML / JSON dari situs terpusat, tetapi ada terlalu banyak rintangan untuk pendekatan itu. Saya juga tidak ingin menyinkronkan node.


1
Saya telah membuat sedikit kemajuan lebih lanjut dengan membuat plugin kueri khusus yang memperluas views_plugin_query_default. Saya menambahkan opsi ke pengaturan kueri yang mengubah tampilan dan menarik data dari database lain. Saya bisa menarik judul simpul dan data lain dari tabel simpul di database lain, masih bekerja untuk mendapatkan bidang.
Cottser

Jawaban:


1

Pertimbangkan untuk melihat modul Forena . Ini dapat digunakan untuk meminta (tidak memperbarui) data di database lain. Berbagai format DBMS didukung, seperti database Drupal lain juga.

Forena dibangun dari gagasan menggunakan SQL untuk mendapatkan data dari database dan menggunakan XHTML dan CSS untuk memformatnya ke dalam laporan web. Untuk detail lebih lanjut tentang Forena, tersedia 2 jenis dokumentasi:

  • Dokumentasi komunitas .
  • Dokumentasi yang menyertai Forena, yang dapat Anda akses tepat setelah menginstal dan mengaktifkan modul. Lihat situs demo untuk contoh online saat ini:

    • Dokumentasi Forena - gunakan tautan 'Dokumentasi pelaporan' atau kunjungi tautan relatif / laporan / bantuan.
    • Sampel Forena - gunakan tautan 'Pelaporan sampel' atau kunjungi tautan relatif / laporan / sampel (sampel ini berfungsi penuh, jadi pastikan untuk sedikit bereksperimen dengannya, seperti drill down yang tersedia pada sampel Grafik SVG).

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


0

Anda dapat mengekspor konten menggunakan modul Views untuk mengekspor data dan mengimpornya menggunakan modul Feeds (Anda dapat mengimpor secara berkala menggunakan modul Rules ).



-1

Satu opsi menggunakan file settings.php. Konfigurasikan instance database ke-2 dalam file settings.php. Setelah mengatur instance gunakan db menggunakan db_set_active('drupal2')fungsi dan lakukan apa saja dengan db kedua Anda.

misalnya

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

dalam modul Anda, Anda dapat menggunakan kedua database seperti di bawah ini:

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

Ini tidak membantu dengan Tampilan ...
Cottser

Sudahkah Anda mencoba 'database' => 'cms', dengan cmskunci yang dikonfigurasi dengan cmsbasis data dalam settings.phpfile.
AshwinP
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.