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_connector
tabeli w mojej cms
bazie 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.
Odpowiedzi:
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 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:
Ujawnienie: Jestem współzałożycielem Foreny,
mam nadzieję, że nie narusza to zasad witryny dotyczących autopromocji .
źródło
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 ).
źródło
Sprawdź te moduły:
EntityFieldQuery wyświetla dane zaplecza lub usługi sieci Web
źródło
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
w swoim module możesz użyć obu baz danych, jak poniżej:
źródło
'database' => 'cms'
zcms
kluczem skonfigurowany zcms
bazą danych wsettings.php
pliku.