ビューを使用して別のDrupalデータベースからノードをロードする


12

私はViewsを使用して、 'cms'のキーでsettings.phpで定義された別のDrupalデータベースからノードをロードしようとしています。両方のサイトは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',
  ),
);

ここで検索して、Stack Overflowを実行しましたが、私が見つけているのは、DrupalからDrupalではなく、Some-other-database-to-Drupalです。

ここで/drupal/12736/using-nodes-from-another-site-databaseの質問を見つけましたが、これはノード参照に関するものであり、回答はありません。

Servicesを使用して中央サイトからXML / JSONを読み取ることを考えましたが、そのアプローチには多くのハードルがあります。私もノードを同期したくありません。


1
views_plugin_query_defaultを拡張するカスタムクエリプラグインを作成することで、もう少し進歩しました。ビューを切り替えて、他のデータベースからデータを取得するオプションをクエリ設定に追加しました。他のデータベースのノードテーブルからノードタイトルやその他のデータを取得し、フィールドの取得に取り組んでいます。
コッツァー

回答:


1

フォレナを見ることを検討してくださいモジュールの。他のデータベースのデータを照会(更新ではなく)するために使用できます。別のDrupalデータベースなど、さまざまなDBMS形式もサポートされています。

Forenaは、SQLを使用してデータベースからデータを取得し、XHTMLとCSSを使用してそれをWebレポートにフォーマットするという考えから構築されています。Forenaの詳細については、2種類のドキュメントを利用できます。

  • コミュニティドキュメント
  • Forenaに付属のドキュメント。モジュールのインストールと有効化の直後にアクセスできます。現在のオンライン例については、デモサイトをご覧ください。

    • Forenaのドキュメント -リンク「レポートのドキュメント」を使用するか、相対リンク/ reports / helpにアクセスしてください。
    • Forenaサンプル -「レポートサンプル」リンクを使用するか、相対リンク/ reports / samplesにアクセスします(これらのサンプルは完全に機能するため、SVG Graphサンプルで使用可能なドリルダウンなど、少し試してください)。

開示:私はフォレナの共同保守です。
これが自己宣伝に関するサイトのポリシーに違反しないことを望みます。


0

Viewsモジュールを使用してコンテンツをエクスポートし、Feedsモジュールを使用してデータをエクスポートおよびインポートできます(Rulesモジュールを使用して定期的にインポートできます)。



-1

settings.phpファイルを使用する1つのオプション。settings.phpファイルで2番目のデータベースインスタンスを設定します。インスタンスをセットアップした後、そのデータベースを使用してdb_set_active('drupal2')したら、関数をし、2番目のデータベースで何かを行います。

例えば

$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):

しかし、これはビューの助けにはなりません…
コッター

ファイル内のデータベースで構成されたキーで'database' => 'cms'、試してみましたか。cmscmssettings.php
AshwinP
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.