Як зробити зовнішню базу даних доступною для переглядів?


8

Тут і в інших місцях багато дискусій щодо використання зовнішніх баз даних в Drupal. Що я з цього з'ясував:

  • Найкращий спосіб роботи з даними в таблиці бази даних - це використання модуля Views. Я встановив це і почав його використовувати і виявив, що це чудово для роботи з таблицею, яку я додав до бази даних сайту.
  • Найпростіший спосіб отримати Views для роботи з таблицею, яка не була створена Drupal, - це модуль Data. Цей модуль розглядає будь-яку таблицю в базі даних сайтів, яка не використовується Drupal, як "таблицю-сироту" і дозволяє її "прийняти" одним натисканням кнопки.
  • Модуль "Майстер таблиці", очевидно, забезпечує спосіб зробити це з таблицями, які відсутні в базі даних сайту. Але цей модуль недоступний для Drupal 7.
  • Файл "settings.php" у розділі "Налаштування бази даних" містить детальну документацію щодо визначення додаткових баз даних, з якими може працювати сайт. Але коли база даних визначена таким чином, її таблиці не відображаються у списку осирілих таблиць модуля даних.

Зміни, які я внесла до визначення бази даних у файлі "settings.php" одного з моїх сайтів:

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

У мене є таблиця, яку я хочу використовувати на більш ніж одному сайті в моїй багатосайтовій установці. Це означає, що мені потрібно мати таблицю в базі даних, яка є доступною для кожного сайту. Відповідно до прочитання, яке я робив, мої варіанти цього:

  1. Найкраще, якщо це можливо: з’ясуйте, що існує спосіб отримати модуль даних для розпізнавання таблиць у додатковій базі даних, визначеній у "settings.php", щоб він міг їх прийняти.
  2. Використовуйте префікси таблиці, щоб дозволити всім сайтам використовувати одну базу даних.
  3. Модуль « Forena Reports » здавався робити саме те, що мені потрібно, але коли я встановив його, я не міг змусити його працювати. Я подав випуск 2475645 і не можу зробити там більше, якщо не буде вирішено цю проблему.
  4. Напишіть мій власний модуль, щоб надати Views доступ до додаткової бази даних, визначеної у "settings.php".
  5. Встановіть Drupal 6 за допомогою Майстра таблиць і використовуйте це, щоб отримати представлення даних, щоб побачити мою зовнішню таблицю, а потім якось взяти результат цього і помістити його в Drupal 7. (Це було запропоновано в деяких публікаціях.)
  6. Виконайте процедуру в https://drupal.stackexchange.com/a/3321/45991 , яка починається з встановлення патча і, здається, також потребує створення власного модуля.
  7. Я також переглянув модулі канали, канали SQL, Backend перегляду XML та міграцію, але жоден з них не говорить про те, що вони можуть підключити зовнішній db до Views. Я щось пропускаю? Є одне з них правильне рішення?

Варіант 2 не є практичним, оскільки це призведе до величезної бази даних із сотнями таблиць, якими було б дуже важко керувати. Я досягла великого прогресу в тому, щоб розпочати роботу над Drupal, але мені не здається завданням 4, 5 або 6. Чи є можливість щось подібне до варіанту 1? Або є якийсь інший спосіб заставити Views для роботи з таблицею поза базою даних сайту, не маючи змоги написати власний модуль?

Дві додаткові деталі: Перша таблиця, з якою мені потрібно працювати, досить велика, понад 6000 рядків і близько 20 стовпців. Немає наміру надати відвідувачам сайту доступ до бази даних, за винятком інформації, отриманої з нього для вмісту сторінки.

Спасибі за вашу допомогу.

Відповіді:


2

Я думаю, що модуль Forena дійсно робить саме те, що вам потрібно . Ваша проблема налаштування - це лише запит на підтримку, а не те, що вимагає "виправлення". Після того, як ви вирішите це рішення, у вас навіть буде вибір так чи ні використовувати інтеграцію його поглядів.

Створений вами номер Forena дуже добре зафіксований (чудова робота!). Але ніде не говорить нічого про дозволах ви наданих (що змушує мене повірити , що ви можете втратити деякі з необхідних дозволів). Ось ось спроба вирішити це:

  • Чи можете ви коротко пояснити, який із (необхідних) дозволів, пов’язаних з Forena, ви надали?

  • Необхідні дозволи Forena пояснюються в Посібнику з налаштування, який постачається разом із Forena ? FYI: ось цитата (її частини):

    Forena передбачає багато деталізації, що стосується дозволів, пов’язаних із звітуванням, використовуючи стандартні засоби адміністрування Drupal для надання дозволів ролям. Перелік дозволів щодо друку, пов’язаних з Forena, які можуть бути надані, спочатку може бути трохи непосильним. Оскільки для кожного визначеного джерела даних є 3 записи, а ванільна Forena вже поставляється з 3 джерелами даних.

    Щоб отримати цей посібник на своєму власному сайті, просто перейдіть до /reports/help.setup

Ці дозволи на доступ до "даних" спочатку відмовляються. Це задумано, оскільки Forena також досить чутливий до всього, що стосується надання доступу до даних через Forena. Що ви не хотіли, щоб це сталося, це те, що просто встановивши та налаштувавши Forena (без дозволів адміністратора), ви можете використовувати її як спосіб вирішення доступу до захищених даних.

Також зауважте, що крім дозволів на рівні цілого джерела даних, у вас є можливість додатково уточнити необхідні дозволи для конкретних блоків даних (= спеціальні запити SQL). Для цього просто вкажіть такі необхідні (Drupal) дозволи в операторі SQL (деталі синтаксису містяться в посібниках Forena). Типовою справою для цього є захист доступу до стовпців із конфіденційними даними.

Розкриття: Я є співавтором цього модуля,
сподіваюся, що це не порушує політику сайту щодо самореклами .


Дякую за це. Я не помітив, коли вперше пройшов програму настройки, що було п'ять дозволів, які нікому не надано. Тепер я надав їх адміністратору (тобто мені). Документ установки не говорить про те, чому ці дозволи заборонено відхиляються і чи є причина не надати їх адміністратору. Однак у мене зараз є ці джерела даних, тому це вирішило цю проблему. Чи є причина, по якій ви відповіли тут, замість того, що я подав?
NewSites

Чудово читати прогрес! Це якимось чином компенсує "зворотний результат" моєї відповіді ... FYI: Я також відповів через чергу черги. Отже, тепер, коли "це вирішило проблему", чи означає це, що ви вважаєте Forena справді "" відповіддю на ваше запитання (яке ще не було, як у кулі №3 ОП)? FYI: Я спробую оновити свою відповідь тут, щоб коротко пояснити "чому ці права первісно відмовлені", що є гарним додатковим питанням!
Pierre.Vriens

Я не був тим, хто проголосував вашу відповідь. Зараз я прийняв вашу відповідь як <u> відповідь </u> і підтвердив її (що, на жаль, повертає її лише до нуля).
NewSites

Гм, я не припускав, що @NewSites відмовився, насправді я навчився жити з грохотами. Мені особисто не подобається загальмування взагалі, і я ігнорую будь-яку з них, де немає коментарів, щоб якось їх пояснити. Але, звичайно, високо цінується "підтримка" та "прийняття". І звичайно знаючи, що є ще один користувач Drupal, який, схоже, зараз відкрив Forena! Переконайтеся, що потрібно подати (підтримку?) Проблеми, де це доречно (щоб також побачити підтримку на роботі ...).
Pierre.Vriens

2

Я зробив це успішно двома різними способами:

Використовуйте перегляд SQL, щоб створити віртуальну таблицю, db_localяка посилається на відповідну таблицю в db__extra. Запит на створення, який виглядатиме приблизно так:

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

Потім ви можете посилатися на цей вид SQL так, ніби це була рідна таблиця у вашій базі даних Drupal, і вам навіть не потрібно додавати зовнішню базу даних у налаштування.php. Зауважте, що це може бути не сумісно з модулем даних (див. Https://www.drupal.org/node/1973806 ), але ви повинні мати змогу описати перегляд SQL до модуля перегляду Drupal, застосувавши hook_views_data()та припиніть використовувати модуль даних .

Ось ще одна можливість: використовуйте селективні префікси таблиці, щоб обманути Drupal переписати {some_table} на db__extra.some_table. Це не те саме, що префіксація ваших таблиць Drupal.

Ваше $databasesналаштування виглядатиме так:

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

Знову ж таки, я не впевнений, чи сумісно це з модулем даних, оскільки я не використовую його. Але це має працювати з поглядами, якщо ви реалізуєте hook_views_data()себе.


Ви в обох методах говорите, що мені потрібно реалізувати <code> ho_views_data () </code>. Це не вимагає написання модуля? У будь-якому випадку, я спробував визначення бази даних у вашому другому методі. Це не призвело до появи таблиці в "db_extra" у списку модулів даних осиротілих таблиць. У вашому першому методі я де розміщувати запропонований вами запит (якщо не в спеціальному модулі)?
NewSites

Якщо ви створюєте перегляд SQL, вам потрібно запустити запит CREATE VIEW один раз безпосередньо в MySQL. Його не потрібно повторно запускати.
Les Lim

Вибачте, я все ще не розумію. Де ви хочете, щоб я запустив цей запит? У phpMyAdmin? Чи дасть це мені щось, що я можу використати у видах? Я шукав "перегляд SQL" на Drupal.org і отримав drupal.org/project/sql_views , який не завантажує виробництво, і документ якого на сайті drupal.org/node/2458947 каже, що мені потрібно застосувати гачок (який, я вважаю, означає писати модуль), щоб повідомити модулю Views про моє подання SQL. Отже, це звучить як те, що ви пропонуєте, вимагає написати модуль (до якого я просто не готовий), а якщо ні, я просто не отримую те, що ви мені говорите.
NewSites
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.