Carga de nodos desde otra base de datos de Drupal usando Vistas

12

Estoy tratando de usar Vistas para cargar nodos de otra base de datos de Drupal definida en settings.php con una clave de 'cms'. Ambos sitios son Drupal 7. La otra base de datos es una instalación de Drupal diferente que actúa como un depósito de contenido o CMS centralizado. Mi objetivo es crear un nuevo tipo / grupo de vistas en el sitio de destino, por lo que al crear una vista, la construcción del sitio puede elegir "Contenido CMS" en lugar de "Contenido". Espero que un creador de sitios pueda crear una vista normalmente basada en los tipos de contenido y el contenido del sitio centralizado de CMS, incluso si tengo que contar las vistas sobre todos los campos en cada tipo de contenido.

En mi implementación hook_views_data () configuré la clave 'base de datos', pero no puedo entender cómo leer desde la tabla de nodos sin anular $ data ['nodo'].

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;
}

Por supuesto, esto no busca una tabla de nodos, busca una cms_connectortabla en mi cmsbase de datos, que no 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 dice que la clave dentro de $ data ...

debe ser el nombre real de la base de datos de la tabla (sin incluir el prefijo), pero puede ser un alias siempre que la información de unión (explicada más adelante) contenga el nombre real de la tabla.

En realidad no quiero hacer una unión, quiero crear una tabla base a partir de la tabla de nodos de la otra base de datos. Pero intenté esto de todos modos (aunque realmente no tiene sentido) después 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',
  ),
);

He buscado por aquí, do y Stack Overflow, pero la mayoría de lo que estoy encontrando es Some-other-database-to-Drupal, no Drupal-to-Drupal.

Encontré la /drupal/12736/using-nodes-from-another-site-database pregunta aquí, pero se trata de referencias de nodos y no tiene respuesta.

Pensé en usar los Servicios para leer XML / JSON desde el sitio centralizado, pero hay demasiados obstáculos para ese enfoque. Realmente tampoco quiero sincronizar nodos.

Cottser
fuente
1
He progresado un poco más al crear un complemento de consulta personalizado que amplía views_plugin_query_default. Agregué una opción a la configuración de consulta que alterna la vista y extrae datos de la otra base de datos. Puedo obtener títulos de nodos y otros datos de la tabla de nodos en la otra base de datos, aún trabajando para obtener los campos.
Cottser

Respuestas:

1

Considera mirar el módulo Forena . Se puede utilizar para consultar (no actualizar) los datos en otras bases de datos. Se admiten varios formatos DBMS, como también otra base de datos Drupal.

Forena se basa en la idea de usar SQL para extraer datos de una base de datos y usar XHTML y CSS para formatearlos en informes web. Para obtener más detalles sobre Forena, hay 2 tipos de documentación disponibles:

  • Documentación comunitaria .
  • Documentación que viene con Forena, a la que puede acceder inmediatamente después de instalar y habilitar el módulo. Consulte el sitio de demostración para ver un ejemplo en línea de lo actual:

    • Documentación de Forena : utilice el enlace 'Documentación de informes' o visite el enlace / informes / ayuda relativos.
    • Muestras de Forena : utilice el enlace 'Muestras de informes' o visite enlaces / informes / muestras relativas (estas muestras son completamente funcionales, así que asegúrese de experimentar un poco con ellas, como los desgloses disponibles en la muestra del Gráfico SVG).

Divulgación: Soy co- mantenedor de Forena,
espero que esto no viole la política de autopromoción del sitio .

Pierre.Vriens
fuente
0

Puede exportar contenido usando el módulo Vistas para exportar datos e importarlos usando el módulo Feeds (puede importar periódicamente usando el módulo Reglas ).

shidsun
fuente
-1

Una opción usando el archivo settings.php. Configure la segunda instancia de la base de datos en el archivo settings.php. Después de configurar la instancia, use esa db_set_active('drupal2')función db usando y haga cualquier cosa con su segunda base de datos.

p.ej

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

en su módulo puede usar ambas bases de datos de la siguiente manera:

db_set_active('cms');
$node = node_load(10);
var_dump($node):
AshwinP
fuente
Sin embargo, esto no ayuda con Views ...
Cottser
¿Has probado 'database' => 'cms', con la cmsclave configurada con la cmsbase de datos en el settings.phparchivo?
AshwinP