Загрузка узлов из другой базы данных Drupal с использованием Views

12

Я пытаюсь использовать Views для загрузки узлов из другой базы данных Drupal, определенной в settings.php, с ключом 'cms'. Оба сайта являются Drupal 7. Другая база данных - это другая установка Drupal, которая действует как хранилище контента или централизованная CMS. Моя цель - создать новый тип / группу представлений на целевом сайте, поэтому при создании представления для сборки сайта можно выбрать «Содержимое CMS» вместо «Содержимое». Я надеюсь, что тогда создатель сайта сможет создать представление, обычно основанное на типах контента и контенте с централизованного сайта CMS, даже если мне придется рассказывать представления обо всех полях в каждом типе контента.

В моей реализации hook_views_data () я установил ключ 'database', но не могу понять, как читать из таблицы узлов без переопределения $ 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 с централизованного сайта, но у этого подхода слишком много препятствий. Я тоже не хочу синхронизировать узлы.

Cottser
источник
1
Я добился большего прогресса, создав собственный плагин для запросов, который расширяет views_plugin_query_default. Я добавил опцию в настройки запроса, которая переключает представление и извлекает данные из другой базы данных. Я могу извлечь заголовки узлов и другие данные из таблицы узлов в другой базе данных, все еще работая над получением полей.
Котцер

Ответы:

1

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

Forena построена на идее использования SQL для извлечения данных из базы данных и использования XHTML и CSS для форматирования их в веб-отчеты. Для получения более подробной информации о Forena доступны 2 вида документации:

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

    • Документация Forena - используйте ссылку «Отчетная документация» или посетите соответствующую ссылку / отчеты / помощь.
    • Образцы Forena - используйте ссылку «Отчетные образцы» или посетите относительную ссылку / отчеты / образцы (эти образцы полностью функциональны, поэтому обязательно поэкспериментируйте с ними, например, с подробными сведениями, доступными в образце SVG-графика).

Раскрытие информации: я являюсь со- держателем Forena,
я надеюсь, что это не нарушает политику сайта по саморекламе .

Pierre.Vriens
источник
0

Вы можете экспортировать контент с помощью модуля Views, чтобы экспортировать данные и импортировать их с помощью модуля Feeds (вы можете периодически импортировать с помощью модуля Rules ).

shidsun
источник
-1

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

например

$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):
AshwinP
источник
Это не помогает с представлениями, хотя ...
Коттер
Вы пробовали 'database' => 'cms', с cmsключом, настроенным с cmsбазой данных в settings.phpфайле.
AshwinP