Đang tải các nút từ cơ sở dữ liệu Drupal khác bằng cách sử dụng Lượt xem


12

Tôi đang cố gắng sử dụng Chế độ xem để tải các nút từ cơ sở dữ liệu Drupal khác được xác định trong settings.php với khóa 'cms'. Cả hai trang web đều là Drupal 7. Cơ sở dữ liệu khác là một bản cài đặt Drupal khác, hoạt động như một kho lưu trữ nội dung hoặc CMS tập trung. Mục tiêu của tôi là tạo ra một loại / nhóm chế độ xem mới trên trang đích, vì vậy khi tạo chế độ xem, bản dựng trang có thể chọn "Nội dung CMS" thay vì "Nội dung". Tôi hy vọng một người xây dựng trang web sau đó có thể xây dựng chế độ xem bình thường dựa trên các loại nội dung và nội dung từ trang CMS tập trung, ngay cả khi tôi phải nói quan điểm về tất cả các trường trong từng loại nội dung.

Trong triển khai hook_view_data () của tôi, tôi đã đặt khóa 'cơ sở dữ liệu', nhưng không thể tìm ra cách đọc từ bảng nút mà không ghi đè $ data ['nút'].

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

Tất nhiên điều này không tìm kiếm một bảng nút, nó tìm một cms_connectorbảng trong cmscơ sở dữ liệu của tôi , không tồn tại.

SQLSTATE[42S02]: Base table or view not found: 1146 Table 'cms.cms_connector' doesn't exist

http://view-help.doc.logrus.com/help/view/api-tables nói rằng khóa trong $ data.

phải là tên cơ sở dữ liệu thực tế của bảng (không bao gồm tiền tố), nhưng nó có thể là bí danh miễn là thông tin tham gia (giải thích sau) có chứa tên thật của bảng.

Tôi thực sự không muốn tham gia, tôi muốn tạo một bảng cơ sở từ bảng nút của cơ sở dữ liệu khác. Nhưng dù sao tôi cũng đã thử điều này (mặc dù nó không thực sự có ý nghĩa) sau khi xem 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',
  ),
);

Tôi đã tìm kiếm xung quanh đây, làm và Stack Overflow, nhưng hầu hết những gì tôi tìm thấy là Một số cơ sở dữ liệu khác đến Drupal, không phải Drupal-to-Drupal.

Tôi đã tìm thấy /drupal/12736/USE-nodes-from-another-site-database ở đây, nhưng đó là về các tham chiếu nút và chưa được trả lời.

Tôi đã nghĩ về việc sử dụng Dịch vụ để đọc XML / JSON từ trang web tập trung, nhưng có quá nhiều rào cản đối với cách tiếp cận đó. Tôi cũng không thực sự muốn đồng bộ hóa các nút.


1
Tôi đã tiến bộ hơn một chút bằng cách tạo một plugin truy vấn tùy chỉnh giúp mở rộng lượt xem_plugin_query_default. Tôi đã thêm một tùy chọn vào cài đặt truy vấn để bật chế độ xem và lấy dữ liệu từ cơ sở dữ liệu khác. Tôi có thể kéo tiêu đề nút và dữ liệu khác từ bảng nút trong cơ sở dữ liệu khác, vẫn đang làm việc để nhận các trường.
Cottser

Câu trả lời:


1

Hãy xem xét mô-đun Forena . Nó có thể được sử dụng để truy vấn (không cập nhật) dữ liệu trong các cơ sở dữ liệu khác. Các định dạng DBMS khác nhau được hỗ trợ, chẳng hạn như một cơ sở dữ liệu Drupal khác.

Forena được xây dựng từ ý tưởng sử dụng SQL để lấy dữ liệu ra khỏi cơ sở dữ liệu và sử dụng XHTML và CSS để định dạng nó thành các báo cáo web. Để biết thêm chi tiết về Forena, có 2 loại tài liệu có sẵn:

  • Tài liệu cộng đồng .
  • Tài liệu đi kèm với Forena, bạn có thể truy cập ngay sau khi cài đặt và kích hoạt mô-đun. Kiểm tra trang web demo cho một ví dụ trực tuyến về hiện tại:

    • Tài liệu Forena - sử dụng liên kết 'Tài liệu báo cáo' hoặc truy cập liên kết / báo cáo / trợ giúp tương đối.
    • Các mẫu Forena - sử dụng liên kết 'Mẫu báo cáo' hoặc truy cập liên kết / báo cáo / mẫu tương đối (các mẫu này có đầy đủ chức năng, do đó hãy đảm bảo thử nghiệm một chút với nó, chẳng hạn như xem chi tiết về mẫu Biểu đồ SVG).

Tiết lộ: Tôi là đồng phạm của Forena,
tôi hy vọng điều này không vi phạm chính sách của trang web về tự quảng cáo .




-1

Một tùy chọn sử dụng tập tin settings.php. Cấu hình cơ sở dữ liệu thứ 2 trong tệp settings.php. Sau khi thiết lập cá thể, hãy sử dụng db đó bằng cách sử dụng db_set_active('drupal2')hàm và làm bất cứ điều gì với db thứ hai của bạn.

ví dụ

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

trong mô-đun của bạn, bạn có thể sử dụng cả hai cơ sở dữ liệu như dưới đây:

db_set_active('cms');
$node = node_load(10);
var_dump($node):

Điều này không giúp ích gì với Lượt xem mặc dù
mai

Bạn đã thử chưa 'database' => 'cms', với cmskhóa được cấu hình với cmscơ sở dữ liệu trong settings.phptệp.
AshwinP
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.