Harici bir veritabanını Views'a nasıl sunabilirim?


8

Burada ve Drupal'da harici veritabanlarını kullanma konusunda çok fazla tartışma var. Bundan anladığım şey:

  • Bir veritabanı tablosundaki verilerle çalışmanın en iyi yolu Views modülünü kullanmaktır. Bunu yükledim ve kullanmaya başladım ve sitenin veritabanına eklediğim bir tabloyla çalışmak için harika buldum.
  • Views'ın Drupal tarafından oluşturulmamış bir tabloyla çalışmasını sağlamanın kolay yolu Veri modülüdür. Bu modül, site veritabanında Drupal tarafından kullanılmayan herhangi bir tabloyu "yetim tablosu" olarak ele alır ve bir düğmeyi tıklatarak "benimsenmesini" sağlar.
  • Görünüşe göre "Tablo Sihirbazı" sitenin veritabanında olmayan tablolar ile bunu yapmak için bir yol sağlar. Ancak bu modül Drupal 7 için mevcut değildir.
  • "Veritabanı ayarları" bölümündeki "settings.php" dosyası, sitenin çalışabileceği ek veritabanlarının nasıl tanımlanacağıyla ilgili ayrıntılı belgelere sahiptir. Ancak bir veritabanı bu şekilde tanımlandığında, tabloları Veri modülündeki yetim tabloları listesinde görünmez.

Sitelerimden birinin "settings.php" dosyasındaki veritabanı tanımında yaptığım değişiklik:

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

Çoklu site kurulumumda birden fazla sitede kullanmak istediğim bir tablo var. Bu tablo her site için erişilebilir bir veritabanında olması gerektiği anlamına gelir. Yaptığım okumaya göre, bunu yapmak için seçeneklerim:

  1. Mümkünse en iyisi: Veri modülünün "settings.php" de tanımlanan ek veritabanındaki tabloları tanımasını sağlamanın bir yolu olduğunu öğrenin, böylece bunları benimseyebilir.
  2. Tüm sitelerin bir veritabanı kullanmasına izin vermek için tablo öneklerini kullanın.
  3. Forena Reports ” modülü tam olarak ihtiyacım olanı yapıyor gibiydi, ama kurduğumda çalışamadım. Ben sunulan sorunu 2475645 ve çok daha fazlası var bu sorun için bir düzeltme olmadığı sürece yapamaz.
  4. Views'a "settings.php" de tanımlanan ek veritabanına erişim vermek için kendi modülümü yazın.
  5. Drupal 6'yı Tablo Sihirbazı ile yükleyin ve Görünümler'i harici tablomu görmesini sağlamak için kullanın ve ardından bir şekilde bunun sonucunu alın ve Drupal 7'ye koyun. (Bu, bazı yazılarda önerilmiştir.)
  6. Yama yüklemekle başlayan ve ayrıca kendi modülümü oluşturmayı gerektiren https://drupal.stackexchange.com/a/3321/45991 adresindeki prosedürü uygulayın .
  7. Ayrıca Feeds, Feeds SQL, Views XML Backend ve Migrate modüllerine de baktım, ancak hiçbiri Views'a harici bir db bağlayabileceklerini söylemiyor. Bir şey mi kaçırıyorum? Bunlardan biri doğru çözüm mü?

Seçenek 2 pratik değildir, çünkü yönetilmesi çok zor olan yüzlerce tablo ile büyük bir veritabanına neden olacaktır. Drupal'a başlarken büyük ilerleme kaydediyorum, ancak 4, 5 veya 6'nın görevini hissetmiyorum. Seçenek 1'in çalışması gibi bir şey var mı? Veya Views'un kendi modülümü yazmadan site veritabanı dışındaki bir tabloyla çalışmasını sağlamanın başka bir yolu var mı?

İki ek ayrıntı: Çalışmam gereken ilk tablo oldukça büyük, 6.000'den fazla satır ve yaklaşık 20 sütun. Sitenin ziyaretçilerine sayfa içeriği için ondan alınan bilgiler dışında veritabanına erişim izni vermek gibi bir niyet yoktur.

Yardımın için teşekkürler.

Yanıtlar:


2

Bence Forena modülü tam da ihtiyacınız olanı yapıyor . Kurulum sorununuz yalnızca bence bir destek isteğidir, "düzeltme" gerektiren bir şey değildir. Bunu çözdükten sonra, görünüm entegrasyonunu da evet veya hayır olarak kullanma seçeneğiniz olacaktır.

Oluşturduğunuz Forena sorunu çok iyi belgelenmiştir (harika iş!). Ancak hiçbir yerde verdiğiniz izinler hakkında hiçbir şey söylemiyor (bu da bana gerekli izinlerden bazılarını kaçırmış olabileceğinize inanıyor). İşte burada bunu ele alma girişimi:

  • Forena ile ilgili (gerekli) izinlerden hangisini verdiğinizi kısaca anlatabilir misiniz?

  • Gerekli Forena izinleri, Forena ? Bilginize: işte bunun bir parçası:

    Forena, rollere izin vermek için standart Drupal yönetim olanaklarını kullanarak ilgili yetkilerin raporlanması konusunda çok fazla ayrıntıya izin verir. Verilebilecek Forena ile ilgili Drupal izinlerinin listesi ilk başta biraz zor olabilir. Tanımlanmış her veri kaynağı için 3 giriş olduğundan ve vanilya Forena zaten 3 veri kaynağı ile birlikte gelir.

    Bu kılavuzu kendi sitenizden almak için /reports/help.setup adresine gidin.

Bu "verilere" erişim izinleri aslen gizlidir. Bu tasarım gereğidir, çünkü Forena, Forena aracılığıyla verilere erişim izni veren her şeye karşı oldukça hassastır. Gerçekleştirmek istemeyeceğiniz şey, Forena'yı (izinler yöneticisi olmadan) yükleyip yapılandırarak, güvenli verilere erişmek için bir geçici çözüm olarak kullanabilmenizdir.

Ayrıca, tüm veri kaynağı düzeyindeki izinlerin yanı sıra, belirli veri blokları (= özel SQL sorguları) için gerekli izinleri daha da hassaslaştırma seçeneğiniz olduğunu unutmayın. Bunu yapmak için, SQL deyimi içinde bu tür gerekli (Drupal) izinleri belirtin (sözdizimi ayrıntıları Forena kılavuzlarına dahil edilir). Bunun için tipik bir kullanım alanı, içinde hassas veriler bulunan sütunlara güvenli erişim sağlamaktır.

Açıklama: Bu modülün ortak yardımcısıyım ,
umarım bu sitenin kendini tanıtmaya yönelik politikasını ihlal etmez .


Bunun için teşekkür ederim. Kur'a ilk girdiğimde kimseye verilmeyen beş izin olduğunu fark etmedim. Şimdi onları Yöneticiye verdim (yani, bana). Kurulum belgesi, bu izinlerin neden orijinal olarak saklandığını ve Yönetici'ye verilmemesinin bir nedeni olup olmadığını söylemez. Ancak, şimdi bu veri kaynaklarına sahibim, bu yüzden bu sorunu çözdü. Gönderdiğim sayı yerine burada yanıt vermenizin bir nedeni var mı?
NewSites

İlerlemeyi okumak harika! Bir şekilde cevabımın "aşağı oyunu" telafi ediyor ... FYI: Ben de şimdi sorun kuyruğuyla cevap verdim. Peki şimdi bu "sorunu çözdü" demek, Forena'yı gerçekten de sorunuza "cevap" cevabı olarak değerlendirdiğiniz anlamına mı geliyor (henüz OP'nin 3 numaralı mermisinde olduğu gibi değil)? Bilginize: Cevabımı, "neden bu izinlerin neden saklı tutulduğunu" kısaca açıklamak için güncellemeye çalışacağım, bu da iyi bir ekstra soru!
Pierre.Vriens

Cevabını aşağıya oylayan kişi ben değildim. Şimdi sizinkini <u> </u> yanıtı olarak kabul ettim ve oy verdim (maalesef sadece sıfıra geri döndürüyor).
NewSites

Hm, @NewSites'in indirildiğini varsaymıyordum, aslında downvotes ile yaşamayı öğrendim. Ben şahsen genel olarak downvoting'i sevmiyorum ve onları bir şekilde açıklamak için herhangi bir yorumun bulunmadığı hiçbirini görmezden geliyorum. Ama elbette "yükseltmek" ve "kabul etmek" büyük beğeni topluyor. Ve elbette, Forena'yı şimdi keşfetmiş gibi görünen başka bir Drupal kullanıcısı olduğunu bilmek, yola çıkmak! Sorunları uygun durumlarda dosyaladığınızdan (destek mi?) Emin olun (işyerindeki desteği de görmek için ...).
Pierre.Vriens

2

Bunu birkaç farklı şekilde başarıyla yaptım:

İçinde db_localkarşılık gelen tabloya başvuruda bulunan bir sanal tablo oluşturmak için bir SQL görünümü kullanın db__extra. Oluşturulacak sorgu şöyle görünecektir:

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

Daha sonra bu SQL Görünümü'ne, Drupal veritabanınızda yerel bir tabloymuş gibi başvurabilirsiniz ve dış veritabanını settings.php dosyasına eklemeniz bile gerekmez. Bunun Veri modülü ile uyumlu olmayabileceğini unutmayın (bkz. Https://www.drupal.org/node/1973806 ), ancak SQL Görünümünü Drupal Views modülüne uygulayarak tanımlayabilmeniz ve hook_views_data()Veri modülünü kullanmayı bırakabilmeniz gerekir. .

Başka bir olasılık daha var: Drupal'ı db__extra.some_table olarak yeniden yazmak için {some_table} olarak kandırmak için seçici tablo öneklerini kullanın. Bu, Drupal tablolarınıza önek eklemekle aynı şey değildir.

Kişisel $databasesayar bu şekilde görünecektir:

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

Yine, ben bunu kullanmıyorum çünkü Veri modülü ile uyumlu olup olmadığından emin değilim. Ancak hook_views_data()kendinizi uygularsanız Views ile birlikte çalışmalıdır .


Her iki yöntemde de <code> hook_views_data () </code> 'ı uygulamam gerektiğini söylüyorsunuz. Bu bir modül yazmayı gerektirmez mi? Her durumda, ikinci yönteminizde veritabanı tanımını denedim. "Db_extra" içindeki tablonun, Veri modülünün artık tablolar listesinde görünmesine neden olmadı. İlk yönteminizde, önerdiğiniz sorguyu nereye koyacağım (özel bir modülde değilse)?
NewSites

Bir SQL Görünümü oluşturuyorsanız, CREATE VIEW sorgusunu doğrudan MySQL'de çalıştırmanız gerekir. Yeniden çalıştırılması gerekmez.
Les Lim

Üzgünüm, hala anlamıyorum. Bu sorguyu nerede çalıştırmamı istiyorsun? PhpMyAdmin'de mi? Bana Views'da kullanabileceğim bir şey verecek mi? Ben drupal.org ve got üzerinde "SQL görünümü" araması drupal.org/project/sql_views hiçbir üretim yüklemesine sahip ve en kimin doc, drupal.org/node/2458947 Yazdığım araçları tahmin bir kanca (uygulamak gerektiğini söylüyor bir modül) Görünümler modülüne SQL görünümüm hakkında bilgi vermek için. Öyleyse, önerdiğiniz şey bir modül yazmayı gerektirir (ki bunun için hazır hissetmiyorum) ve eğer değilse, yapmamı söylediğiniz şeyi alamıyorum.
NewSites
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.