Завантаження вузлів з іншої бази даних Drupal за допомогою Views


12

Я намагаюся використовувати Views для завантаження вузлів з іншої бази даних Drupal, визначеної settings.php, з ключем 'cms'. Обидва сайти є Drupal 7. Інша база даних - інша установка Drupal, яка діє як сховище вмісту або централізована CMS. Моя мета - створити новий тип / групу перегляду на цільовому сайті, тому при створенні перегляду для складання сайту можна вибрати "CMS Content" замість "Content". Я сподіваюся, що конструктор сайтів зможе тоді створити перегляд, як правило, на основі типів вмісту та контенту з централізованого сайту CMS, навіть якщо мені доведеться розповідати погляди про всі поля кожного типу вмісту.

У моїй реалізації kuk_views_data () я встановив ключ "база даних", але не можу зрозуміти, як читати з таблиці вузлів, не змінюючи $ 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;
}

Звичайно, це не шукає таблицю вузлів, вона шукає cms_connectorтаблицю в моїй cmsбазі даних, якої не існує.

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 говорить, що ключ у $ data…

має бути фактичним ім'ям бази даних таблиці (не включаючи префікс), але це може бути псевдонім до тих пір, поки інформація про з'єднання (пояснена далі) містить реальну назву таблиці.

Я насправді не хочу робити об'єднання, я хочу створити базову таблицю з таблиці вузлів іншої бази даних. Але я все-таки спробував це (хоча це насправді не має сенсу), побачивши 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',
  ),
);

Я шукав тут, виконайте та переповнення стека, але більшість того, що я знаходжу, - це "Інша-інша база даних-для-Drupal", а не "Drupal-to-Drupal".

Тут я знайшов питання /drupal/12736/using-nodes-from-another-site-database , але це стосується посилань на вузли і не відповідає.

Я думав про використання Служб для читання XML / JSON з централізованого сайту, але занадто багато перешкод у цьому підході. Я теж не хочу синхронізувати вузли.


1
Я досяг трохи більшого прогресу, створивши спеціальний плагін запиту, який розширює погляди_plugin_query_default. До параметрів запиту я додав опцію, яка перемикає подання та витягує дані з іншої бази даних. Я можу витягати заголовки вузлів та інші дані з таблиці вузлів в іншій базі даних, продовжуючи працювати над отриманням полів.
Котцер

Відповіді:


1

Розглянемо модуль Forena . Його можна використовувати для запиту (не оновлення) даних у інших базах даних. Підтримуються різні формати СУБД, наприклад, інша база даних Drupal.

Forena побудована на ідеї використання SQL для отримання даних із бази даних та використання XHTML та CSS для їх форматування у веб-звітах. Більш детально про Forena доступні два типи документації:

  • Документація громади .
  • Документація, що постачається з Forena, до якої ви можете отримати доступ відразу після встановлення та включення модуля. Ознайомтеся з демонстраційним веб-сайтом для онлайн-прикладу поточного:

    • Документація з Forena - скористайтесь посиланням "Звітна документація" або відвідайте відносне посилання / звіти / допомогу.
    • Зразки Forena - скористайтеся посиланням "Звіти про зразки" або відвідайте відносне посилання / звіти / зразки (ці зразки є повністю функціональними, тому переконайтеся, що трохи експериментуйте з ним, наприклад, пониження, доступні на зразку SVG Graph).

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


0

Ви можете експортувати вміст, використовуючи модуль Views, щоб експортувати дані та імпортувати їх за допомогою модуля каналів (періодично можна імпортувати за допомогою модуля Правила ).



-1

Один варіант, використовуючи файл settings.php. Налаштуйте другий екземпляр бази даних у файлі settings.php. Після налаштування екземпляра використовуйте цей db за допомогою db_set_active('drupal2')функції та робіть що-небудь із своїм другим db.

напр

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

у вашому модулі ви можете використовувати обидві бази даних, як показано нижче:

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

Це не допомагає при переглядах…
Котцер,

Ви спробували 'database' => 'cms', cmsключ налаштований з cmsбазою даних у settings.phpфайлі.
AshwinP
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.