Carregando nós de outro banco de dados Drupal usando o Views

12

Estou tentando usar o Views para carregar nós de outro banco de dados Drupal definido em settings.php com uma chave de 'cms'. Os dois sites são o Drupal 7. O outro banco de dados é uma instalação diferente do Drupal, que atua como repositório de conteúdo ou CMS centralizado. Meu objetivo é criar um novo tipo / grupo de visualizações no site de destino, portanto, ao criar uma visualização, a compilação do site pode escolher "Conteúdo do CMS" em vez de "Conteúdo". Espero que um construtor de sites possa criar uma exibição normalmente com base nos tipos de conteúdo e no conteúdo do site centralizado do CMS, mesmo que eu precise fornecer exibições sobre todos os campos em cada tipo de conteúdo.

Na minha implementação hook_views_data (), configurei a chave 'database', mas não consigo descobrir como ler a tabela de nós sem substituir $ 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;
}

Claro que isso não procura uma tabela de nós, mas sim uma cms_connectortabela no meu cmsbanco de dados, que não existe.

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 diz que a chave em $ data…

deve ser o nome real do banco de dados da tabela (sem incluir o prefixo), mas pode ser um alias desde que as informações de junção (explicadas mais adiante) contenham o nome real da tabela.

Na verdade, não quero fazer uma junção, quero criar uma tabela base a partir da tabela de nós do outro banco de dados. Mas tentei mesmo assim (mesmo que não faça sentido) depois de ver 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',
  ),
);

Eu pesquisei por aqui, fiz e Stack Overflow, mas a maior parte do que estou descobrindo é Some-other-database-to-Drupal, não Drupal-to-Drupal.

Encontrei a questão /drupal/12736/using-nodes-from-another-site-database aqui, mas é sobre referências de nós e não foi respondida.

Pensei em usar o Services para ler XML / JSON no site centralizado, mas há muitos obstáculos nessa abordagem. Também não quero sincronizar nós.

Cottser
fonte
1
Fiz um pouco mais de progresso ao criar um plug-in de consulta personalizado que estende o views_plugin_query_default. Adicionei uma opção às configurações de consulta que alterna a exibição e extrai dados do outro banco de dados. Posso extrair títulos de nó e outros dados da tabela de nós no outro banco de dados, ainda trabalhando na obtenção dos campos.
Cottser 18/08/12

Respostas:

1

Considere olhar para o módulo Forena . Pode ser usado para consultar (não atualizar) os dados em outros bancos de dados. Vários formatos de DBMS são suportados, como outro banco de dados Drupal também.

O Forena foi criado com a idéia de usar o SQL para obter dados de um banco de dados e usar XHTML e CSS para formatá-los em relatórios da web. Para mais detalhes sobre o Forena, estão disponíveis 2 tipos de documentação:

  • Documentação da comunidade .
  • Documentação que acompanha o Forena, que você pode acessar logo após a instalação e ativação do módulo. Confira o site de demonstração para obter um exemplo online do atual:

    • Documentação do Forena - use o link 'Documentação de relatórios' ou visite o link / relatórios / ajuda relativos.
    • Amostras do Forena - use o link 'Amostras de relatórios' ou visite o link / relatórios / amostras relativos (essas amostras são totalmente funcionais, portanto, experimente um pouco com ela, como as pesquisas detalhadas disponíveis na amostra do SVG Graph).

Divulgação: sou co- mantenedor da Forena,
espero que isso não viole a política de autopromoção do site .

Pierre.Vriens
fonte
0

Você pode exportar conteúdo usando o módulo Exibições para exportar dados e importá-los usando o módulo Feeds (você pode importar periodicamente usando o módulo Regras ).

shidsun
fonte
-1

Uma opção usando o arquivo settings.php. Configure a segunda instância do banco de dados no arquivo settings.php. Após configurar a instância, use esse banco de dados usando a db_set_active('drupal2')função e faça qualquer coisa com seu segundo banco de dados.

por exemplo

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

No seu módulo, você pode usar os dois bancos de dados, como abaixo:

db_set_active('cms');
$node = node_load(10);
var_dump($node):
AshwinP
fonte
Isto não ajuda com vistas embora ...
Cottser
Você já experimentou 'database' => 'cms', com a cmschave configurada com o cmsbanco de dados no settings.phparquivo.
AshwinP