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_connector
table dans ma cms
base 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.
Réponses:
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 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:
Divulgation: Je suis co- gestionnaire de Forena,
j'espère que cela ne viole pas la politique du site en matière d'autopromotion .
la source
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 ).
la source
Vérifiez ces modules:
EntityFieldQuery Views Backend ou données de service Web
la source
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
dans votre module, vous pouvez utiliser les deux bases de données comme ci-dessous:
la source
'database' => 'cms'
, avec unecms
clé configurée avec unecms
base de données dans unsettings.php
fichier.