Ładowanie węzłów z innej bazy danych Drupal przy użyciu widoków

12

Próbuję użyć widoków, aby załadować węzły z innej bazy danych Drupal zdefiniowanej w pliku settings.php za pomocą klucza „cms”. Obie strony to Drupal 7. Druga baza danych to inna instalacja Drupal, która działa jako repozytorium treści lub scentralizowany CMS. Moim celem jest utworzenie nowego typu widoku / grupy w witrynie docelowej, więc podczas tworzenia widoku kompilacja witryny może wybrać „Treść CMS” zamiast „Treść”. Mam nadzieję, że twórca witryny będzie w stanie zbudować widok normalnie na podstawie typów treści i treści ze scentralizowanej witryny CMS, nawet jeśli będę musiał powiedzieć poglądy na temat wszystkich pól w każdym typie treści.

W mojej implementacji hook_views_data () ustawiłem klucz „bazy danych”, ale nie mogę wymyślić, jak czytać z tabeli węzłów bez przesłaniania $ 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;
}

Oczywiście to nie szuka tabeli węzłów, szuka cms_connectortabeli w mojej cmsbazie danych, która nie istnieje.

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 mówi, że kluczem do danych $…

powinna być faktyczną nazwą bazy danych tabeli (bez prefiksu), ale może być aliasem, o ile informacje o połączeniu (wyjaśnione później) zawierają prawdziwą nazwę tabeli.

Tak naprawdę nie chcę łączyć, chcę utworzyć tabelę bazową z tabeli węzłów drugiej bazy danych. Ale i tak spróbowałem (nawet jeśli to nie ma sensu) po obejrzeniu 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',
  ),
);

Szukałem tutaj, wykonaj i przepełnienie stosu, ale większość tego, co znajduję, to Some-other-database-to-Drupal, a nie Drupal-to-Drupal.

Znalazłem tutaj /drupal/12736/using-nodes-from-another-site-database pytanie, ale dotyczy ono odwołań do węzłów i nie ma na nie odpowiedzi.

Myślałem o użyciu Usług do odczytu XML / JSON ze scentralizowanej strony, ale jest to zbyt wiele przeszkód w tym podejściu. Nie chcę też synchronizować węzłów.

Cottser
źródło
1
Poczyniłem nieco większy postęp, tworząc niestandardową wtyczkę zapytania, która rozszerza views_plugin_query_default. Dodałem opcję do ustawień zapytania, która przełącza widok i pobiera dane z drugiej bazy danych. Mogę pobierać tytuły węzłów i inne dane z tabeli węzłów w innej bazie danych, wciąż pracując nad uzyskaniem pól.
Cottser,

Odpowiedzi:

1

Zastanów się, czy nie spojrzeć na moduł Forena . Można go użyć do zapytania (nie aktualizacji) danych w innych bazach danych. Obsługiwane są różne formaty DBMS, takie jak inna baza danych Drupal.

Forena opiera się na pomyśle używania SQL do pobierania danych z bazy danych oraz używania XHTML i CSS do formatowania ich w raportach internetowych. Aby uzyskać więcej informacji na temat Forena, dostępne są 2 rodzaje dokumentacji:

  • Dokumentacja wspólnotowa .
  • Dokumentacja dostarczana z Forena, do której można uzyskać dostęp bezpośrednio po instalacji i włączeniu modułu. Zapoznaj się z witryną demonstracyjną, aby zobaczyć online przykład bieżącego:

    • Dokumentacja Forena - skorzystaj z linku „Dokumentacja raportowania” lub odwiedź odnośnik / raporty / pomoc.
    • Próbki Forena - skorzystaj z linku „Zgłaszanie próbek” lub odwiedź względny link / raporty / próbki (te próbki są w pełni funkcjonalne, więc koniecznie poeksperymentuj z nimi, np. Drążenia dostępne w próbce SVG Graph).

Ujawnienie: Jestem współzałożycielem Foreny,
mam nadzieję, że nie narusza to zasad witryny dotyczących autopromocji .

Pierre.Vriens
źródło
0

Możesz eksportować zawartość za pomocą modułu Widoki , aby eksportować dane i importować je za pomocą modułu Kanały (możesz okresowo importować za pomocą modułu Reguły ).

Shidsun
źródło
-1

Jedna opcja przy użyciu pliku settings.php. Skonfiguruj drugą instancję bazy danych w pliku settings.php. Po skonfigurowaniu instancji użyj tej bazy danych za pomocą db_set_active('drupal2')funkcji i zrób wszystko z drugą bazą danych.

na przykład

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

w swoim module możesz użyć obu baz danych, jak poniżej:

db_set_active('cms');
$node = node_load(10);
var_dump($node):
AshwinP
źródło
To jednak nie pomaga w
Widokach
Czy próbowałeś się 'database' => 'cms'z cmskluczem skonfigurowany z cmsbazą danych w settings.phppliku.
AshwinP