Chargement de nœuds à partir d'une autre base de données Drupal à l'aide de vues

12

J'essaie d'utiliser Views pour charger des nœuds à partir d'une autre base de données Drupal définie dans settings.php avec une clé de «cms». Les deux sites sont Drupal 7. L'autre base de données est une installation Drupal différente qui agit comme un référentiel de contenu ou un CMS centralisé. Mon objectif est de créer un nouveau type / groupe de vues sur le site de destination, donc lors de la création d'une vue, la construction du site peut choisir "Contenu CMS" au lieu de "Contenu". J'espère qu'un constructeur de site serait alors en mesure de créer une vue normalement basée sur les types de contenu et le contenu du site CMS centralisé, même si je dois dire des vues sur tous les champs de chaque type de contenu.

Dans mon implémentation hook_views_data (), j'ai défini la clé 'database', mais je ne peux pas comprendre comment lire à partir de la table de nœuds sans remplacer $ 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;
}

Bien sûr, cela ne recherche pas une table de nœuds, il recherche une cms_connectortable dans ma cmsbase de données, qui n'existe pas.

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 dit que la clé dans $ data…

doit être le nom de base de données réel de la table (sans le préfixe), mais il peut s'agir d'un alias tant que les informations de jointure (expliquées plus loin) contiennent le vrai nom de la table.

Je ne veux pas réellement faire de jointure, je veux créer une table de base à partir de la table de nœuds de l'autre base de données. Mais j'ai quand même essayé cela (même si cela n'a pas vraiment de sens) après avoir vu 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',
  ),
);

J'ai cherché ici, faites et Stack Overflow, mais la plupart de ce que je trouve est Some-other-database-to-Drupal, pas Drupal-to-Drupal.

J'ai trouvé la question /drupal/12736/using-nodes-from-another-site-database ici, mais il s'agit de références de nœuds et est sans réponse.

J'ai pensé à utiliser les services pour lire XML / JSON à partir du site centralisé, mais il y a trop d'obstacles à cette approche. Je ne veux pas non plus vraiment synchroniser les nœuds.

Cottser
la source
1
J'ai fait un peu plus de progrès en créant un plugin de requête personnalisé qui étend views_plugin_query_default. J'ai ajouté une option aux paramètres de requête qui bascule la vue et extrait les données de l'autre base de données. Je peux extraire les titres des nœuds et d'autres données de la table des nœuds dans l'autre base de données, tout en continuant à obtenir les champs.
Cottser

Réponses:

1

Pensez à regarder le module Forena . Il peut être utilisé pour interroger (et non mettre à jour) les données dans d'autres bases de données. Différents formats de SGBD sont pris en charge, comme une autre base de données Drupal également.

Forena est basé sur l'idée d'utiliser SQL pour extraire des données d'une base de données et d'utiliser XHTML et CSS pour les formater dans des rapports Web. Pour plus de détails sur Forena, 2 types de documentation sont disponibles:

  • Documentation communautaire .
  • Documentation fournie avec Forena, à laquelle vous pouvez accéder juste après l'installation et l'activation du module. Consultez le site de démonstration pour un exemple en ligne de l'actuel:

    • Documentation Forena - utilisez le lien «Documentation de rapport» ou visitez le lien relatif / rapports / aide.
    • Forena samples - utilisez le lien 'Reporting samples' ou visitez le lien relatif / rapports / échantillons (ces échantillons sont entièrement fonctionnels, alors assurez-vous de les expérimenter un peu, comme les forages disponibles sur l'échantillon SVG Graph).

Divulgation: Je suis co- gestionnaire de Forena,
j'espère que cela ne viole pas la politique du site en matière d'autopromotion .

Pierre.Vriens
la source
0

Vous pouvez exporter du contenu à l'aide du module Vues pour exporter des données et les importer à l'aide du module Flux (vous pouvez importer périodiquement à l'aide du module Règles ).

shidsun
la source
-1

Une option en utilisant le fichier settings.php. Configurez la 2e instance de base de données dans le fichier settings.php. Après avoir configuré l'instance, utilisez cette db_set_active('drupal2')fonction db using et faites quoi que ce soit avec votre deuxième base de données.

par exemple

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

dans votre module, vous pouvez utiliser les deux bases de données comme ci-dessous:

db_set_active('cms');
$node = node_load(10);
var_dump($node):
AshwinP
la source
Mais cela n'aide pas avec les vues…
Cottser
Avez-vous essayé 'database' => 'cms', avec une cmsclé configurée avec une cmsbase de données dans un settings.phpfichier.
AshwinP