뷰를 사용하여 다른 Drupal 데이터베이스에서 노드로드


12

Views를 사용하여 settings.php에 정의 된 다른 Drupal 데이터베이스에서 노드를 'cms'키로로드하려고합니다. 두 사이트는 모두 Drupal 7입니다. 다른 데이터베이스는 콘텐츠 저장소 또는 중앙 집중식 CMS 역할을하는 다른 Drupal 설치입니다. 내 목표는 대상 사이트에서 새보기 유형 / 그룹을 만드는 것이므로보기를 만들 때 사이트 빌드는 "콘텐츠"대신 "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-to-Drupal이 아닌 Some-other-database-to-Drupal입니다.

/drupal/12736/using-nodes-from-another-site-database 질문을 찾았 지만 노드 참조에 관한 것이며 대답하지 않았습니다.

중앙 집중식 사이트에서 서비스를 사용하여 XML / JSON을 읽는 것에 대해 생각했지만 그 방법에는 너무 많은 장애물이 있습니다. 노드도 동기화하고 싶지 않습니다.


1
views_plugin_query_default를 확장하는 사용자 정의 쿼리 플러그인을 작성하여 조금 더 발전했습니다. 뷰를 토글하고 다른 데이터베이스에서 데이터를 가져 오는 쿼리 설정에 옵션을 추가했습니다. 다른 데이터베이스의 노드 테이블에서 노드 제목 및 기타 데이터를 가져 와서 여전히 필드를 가져 오는 중입니다.
Cottser

답변:


1

Forena 모듈을 살펴보십시오 . 다른 데이터베이스의 데이터를 쿼리 (업데이트하지 않음)하는 데 사용할 수 있습니다. 다른 Drupal 데이터베이스와 같은 다양한 DBMS 형식도 지원됩니다.

Forena는 SQL을 사용하여 데이터베이스에서 데이터를 가져오고 XHTML 및 CSS를 사용하여 웹 보고서로 형식을 지정한다는 아이디어로 구축되었습니다. Forena에 대한 자세한 내용은 다음 두 가지 유형의 설명서를 사용할 수 있습니다.

  • 커뮤니티 문서 .
  • Forena와 함께 제공되는 설명서로 모듈을 설치하고 활성화 한 직후 액세스 할 수 있습니다. 체크 아웃 데모 사이트를 현재의 온라인 예를 들면 :

    • Forena 설명서 - 'Reporting documentation'링크를 사용하거나 상대 링크 / reports / help를 방문하십시오.
    • Forena 샘플 - 'Reporting samples'링크를 사용하거나 상대 링크 / reports / samples를 방문하십시오 (이 샘플은 완전한 기능을 수행하므로 SVG 그래프 샘플에서 사용할 수있는 드릴 다운과 같이 약간 실험 해보십시오).

공개 : 저는 Forena의 공동 유지 관리인으로서 이것이 자체 프로모션에
대한 사이트의 정책을 위반하지 않기를 바랍니다 .


0

보기 모듈을 사용하여 컨텐츠 를 내보내고 피드 모듈을 사용하여 데이터를 내보내고 가져올 수 있습니다 ( 규칙 모듈을 사용하여 정기적으로 가져올 수 있음 ).



-1

settings.php 파일을 사용하는 하나의 옵션. settings.php 파일에서 두 번째 데이터베이스 인스턴스를 구성하십시오. 인스턴스를 설정 한 후 db_set_active('drupal2')함수를 사용하여 해당 db를 사용 하고 두 번째 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):

보기에는 도움이되지 않습니다…
Cottser

당신은 밖으로 시도 'database' => 'cms'와 함께, cms구성 키 cms에 데이터베이스 settings.php파일.
AshwinP
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.