Làm cách nào để tạo cơ sở dữ liệu bên ngoài cho Lượt xem?


8

Có rất nhiều cuộc thảo luận ở đây và ở những nơi khác về việc sử dụng cơ sở dữ liệu bên ngoài trong Drupal. Những gì tôi đã tìm ra từ đó là:

  • Cách tốt nhất để làm việc với dữ liệu trong bảng cơ sở dữ liệu là sử dụng mô-đun Lượt xem. Tôi đã cài đặt nó và bắt đầu sử dụng nó và thấy thật tuyệt khi làm việc với một bảng mà tôi đã thêm vào cơ sở dữ liệu của trang web.
  • Cách dễ dàng để khiến Lượt xem hoạt động với bảng không được tạo bởi Drupal là với mô-đun Dữ liệu. Mô-đun này xử lý bất kỳ bảng nào trong cơ sở dữ liệu trang web không được Drupal sử dụng như một "bảng mồ côi" và cho phép nó được "thông qua" chỉ với một nút bấm.
  • Mô-đun "Trình hướng dẫn bảng" rõ ràng cung cấp một cách để làm điều đó với các bảng không có trong cơ sở dữ liệu của trang web. Nhưng mô-đun đó không có sẵn cho Drupal 7.
  • Tệp "settings.php", trong phần "Cài đặt cơ sở dữ liệu" có tài liệu chi tiết về cách xác định cơ sở dữ liệu bổ sung mà trang web có thể làm việc. Nhưng khi cơ sở dữ liệu được xác định theo cách đó, các bảng của nó không hiển thị trong danh sách các bảng mồ côi trong mô-đun Dữ liệu.

Thay đổi mà tôi đã thực hiện đối với định nghĩa cơ sở dữ liệu trong tệp cài đặt của chế độ cơ sở dữ liệu trên một trong các trang web của tôi là:

$databases = array ( 'default' => array ('default' => array ( 'database' => 'db_local', 'username' => 'db_local', 'password' => '_________', 'host' => 'localhost', 'port' => '', 'driver' => 'mysql', 'prefix' => '', ), ), 'extra' => array ('default' => array ( 'database' => 'db__extra', 'username' => 'db_admin', 'password' => '_________, 'host' => 'localhost', 'port' => '', 'driver' => 'mysql', 'prefix' => '', ), ), );

Tôi có một bảng mà tôi muốn sử dụng ở nhiều trang trong quá trình cài đặt nhiều trang của mình. Điều này có nghĩa là tôi cần phải có bảng trong cơ sở dữ liệu có thể truy cập được cho mỗi trang web. Theo bài đọc tôi đã thực hiện, các lựa chọn của tôi để làm điều đó là:

  1. Tốt nhất, nếu có thể: Tìm hiểu rằng có một cách để mô-đun Dữ liệu nhận ra các bảng trong cơ sở dữ liệu bổ sung được xác định trong "settings.php", để nó có thể áp dụng chúng.
  2. Sử dụng tiền tố bảng để cho phép tất cả các trang web sử dụng một cơ sở dữ liệu.
  3. Mô-đun báo cáo Forena báo cáo dường như làm chính xác những gì tôi cần, nhưng khi tôi cài đặt nó, tôi không thể làm cho nó hoạt động được. Tôi đã gửi vấn đề 2475645 và không thể làm gì nhiều hơn ở đó trừ khi có cách khắc phục vấn đề đó.
  4. Viết mô-đun của riêng tôi để cấp cho Lượt truy cập vào cơ sở dữ liệu bổ sung được xác định trong "settings.php".
  5. Cài đặt Drupal 6 với Trình hướng dẫn bảng và sử dụng để có Chế độ xem để xem bảng bên ngoài của tôi, sau đó bằng cách nào đó lấy kết quả của nó và đưa nó vào Drupal 7. (Điều này đã được đề xuất trong một số bài đăng.)
  6. Thực hiện theo quy trình trong https://drupal.stackexchange.com/a/3321/45991 , bắt đầu bằng việc cài đặt một bản vá và dường như cũng yêu cầu tạo mô-đun của riêng tôi.
  7. Tôi cũng đã xem xét các mô-đun Nguồn cấp dữ liệu, Nguồn cấp dữ liệu SQL, Chế độ xem cuối XML và Di chuyển, nhưng không ai trong số họ nói rằng họ có thể kết nối một db bên ngoài với Chế độ xem. Tui bỏ lỡ điều gì vậy? Là một trong số họ là giải pháp đúng đắn?

Tùy chọn 2 là không thực tế vì nó sẽ dẫn đến một cơ sở dữ liệu khổng lồ với hàng trăm bảng sẽ rất khó quản lý. Tôi đã đạt được tiến bộ lớn khi bắt đầu sử dụng Drupal, nhưng tôi không cảm thấy nhiệm vụ của 4, 5 hoặc 6. Có khả năng nào đó giống như tùy chọn 1 hoạt động không? Hoặc có cách nào khác để khiến Lượt xem hoạt động với một bảng bên ngoài cơ sở dữ liệu trang web mà không thể viết mô-đun của riêng tôi không?

Hai chi tiết bổ sung: Bảng đầu tiên tôi cần làm việc khá lớn, hơn 6.000 hàng và khoảng 20 cột. Không có ý định cung cấp cho khách truy cập vào trang web quyền truy cập vào cơ sở dữ liệu ngoại trừ thông tin được rút ra từ đó cho nội dung trang.

Cảm ơn bạn đã giúp đỡ.

Câu trả lời:


2

Tôi nghĩ rằng mô-đun Forena thực sự chính xác những gì bạn cần . Vấn đề thiết lập của bạn chỉ là một yêu cầu hỗ trợ tôi nghĩ, không phải là một cái gì đó yêu cầu "sửa chữa". Sau khi bạn giải quyết xong, bạn thậm chí sẽ có lựa chọn đồng ý hoặc không sử dụng tích hợp quan điểm của nó.

Vấn đề Forena bạn tạo ra được ghi lại rất tốt (công việc tuyệt vời!). Nhưng không nơi nào nó nói bất cứ điều gì về các quyền bạn đã cấp (điều này khiến tôi tin rằng bạn có thể đang thiếu một số quyền cần thiết). Vì vậy, đây là một nỗ lực để giải quyết rằng:

  • Bạn có thể giải thích ngắn gọn về những quyền nào (bắt buộc) của Forena mà bạn đã cấp không?

  • Các quyền Forena cần thiết được giải thích trong Hướng dẫn thiết lập đi kèm với Forena ? FYI: đây là một trích dẫn của (một phần) nó:

    Forena cho phép rất nhiều chi tiết khi báo cáo các ủy quyền liên quan, bằng cách sử dụng các cơ sở quản trị Drupal tiêu chuẩn để cấp quyền cho các vai trò. Danh sách các quyền Drupal liên quan đến Forena có thể được cấp lúc đầu có thể hơi quá sức. Bởi vì có 3 mục nhập cho mỗi nguồn dữ liệu được xác định và Forena vanilla đã đi kèm với 3 nguồn dữ liệu.

    Để truy xuất hướng dẫn này trong trang web của riêng bạn, chỉ cần điều hướng đến /reports/help.setup

Những quyền truy cập vào "dữ liệu" ban đầu bị giữ lại. Đó là do thiết kế, bởi vì Forena cũng khá nhạy cảm với bất kỳ điều gì liên quan đến việc cấp quyền truy cập dữ liệu qua Forena. Điều bạn không muốn xảy ra là chỉ cần cài đặt và định cấu hình Forena (không có quyền quản trị viên), bạn có thể sử dụng nó như một cách giải quyết để truy cập dữ liệu được bảo mật.

Cũng lưu ý rằng ngoài các quyền ở cấp độ của toàn bộ nguồn dữ liệu, bạn có một tùy chọn để tinh chỉnh thêm các quyền cần thiết cho các khối dữ liệu cụ thể (= truy vấn SQL tùy chỉnh). Để làm như vậy, chỉ cần chỉ định các quyền (Drupal) được yêu cầu như vậy trong câu lệnh SQL (chi tiết cú pháp được bao gồm trong hướng dẫn của Forena). Một usecase điển hình cho việc này, là bảo mật truy cập vào các cột có dữ liệu nhạy cảm trong đó.

Tiết lộ: Tôi là người đồng sáng lập mô-đun này,
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 .


Cảm ơn vì điều này. Tôi đã không nhận thấy khi lần đầu tiên trải qua Cài đặt rằng có năm quyền không được cấp cho bất kỳ ai. Bây giờ tôi đã cấp chúng cho Quản trị viên (tức là tôi). Tài liệu thiết lập không cho biết lý do tại sao các quyền đó bị giữ lại một cách rõ ràng và liệu có lý do gì để không cấp chúng cho Quản trị viên hay không. Tuy nhiên, bây giờ tôi có những nguồn dữ liệu đó, vì vậy điều này đã giải quyết vấn đề đó. Có một lý do bạn trả lời ở đây thay vì trong vấn đề tôi đã gửi?
NewSites

Tuyệt vời để đọc tiến độ! Nó bằng cách nào đó bù đắp cho "downvote" trong câu trả lời của tôi ... FYI: Tôi cũng đã trả lời qua hàng đợi vấn đề ngay bây giờ. Vì vậy, bây giờ "điều này đã giải quyết được vấn đề", điều đó có nghĩa là bạn coi Forena thực sự là "câu trả lời" cho câu hỏi của bạn (điều này chưa được như trong viên đạn số 3 của OP)? FYI: Tôi sẽ cố gắng cập nhật câu trả lời của mình ở đây để giải thích ngắn gọn "lý do tại sao các quyền đó ban đầu bị giữ lại", đây là một câu hỏi bổ sung tốt!
Pierre.Vriens

Tôi không phải là người bỏ phiếu trả lời của bạn. Bây giờ tôi đã chấp nhận câu trả lời của bạn dưới dạng <u> </ u> và đã bình chọn nó (điều không may chỉ trả nó về không).
NewSites

Hừm, tôi đã không cho rằng @NewSites đã bị hạ cấp, thực ra tôi đã học được cách sống với những người bị hạ bệ. Cá nhân tôi không thích hạ thấp nói chung, và tôi bỏ qua bất kỳ ai trong số họ khi không có bình luận để giải thích bằng cách nào đó. Nhưng tất nhiên "nâng cao" và "chấp nhận" được đánh giá rất cao. Và tất nhiên biết rằng vẫn còn một người dùng Drupal khác dường như đã phát hiện ra Forena bây giờ, con đường để đi! Đảm bảo gửi các vấn đề (hỗ trợ?) Khi thích hợp (để xem hỗ trợ tại nơi làm việc ...).
Pierre.Vriens

2

Tôi đã thực hiện thành công một vài cách khác nhau:

Sử dụng Chế độ xem SQL để tạo bảng ảo trong db_localđó tham chiếu đến bảng tương ứng db__extra. Truy vấn để tạo sẽ trông giống như thế này:

USE db_local; CREATE VIEW some_table AS SELECT * FROM db__extra.some_table;

Sau đó, bạn có thể tham khảo Chế độ xem SQL này như thể nó là một bảng gốc trong cơ sở dữ liệu Drupal của bạn và thậm chí bạn không cần phải thêm cơ sở dữ liệu bên ngoài trong settings.php. Lưu ý rằng điều này có thể không tương thích với mô-đun Dữ liệu (xem https://www.drupal.org/node/1973806 ), nhưng bạn có thể mô tả Chế độ xem SQL cho mô-đun Chế độ xem Drupal bằng cách triển khai hook_views_data()và ngừng sử dụng mô-đun Dữ liệu .

Đây là một khả năng khác: sử dụng tiền tố bảng chọn lọc để lừa Drupal viết lại {some_table} thành db__extra.some_table. Điều này không giống như tiền tố các bảng Drupal của bạn.

$databasesCài đặt của bạn sẽ trông như thế này:

$databases = array ( 'default' => array ('default' => array ( 'database' => 'db_local', 'username' => 'db_local', 'password' => '_________', 'host' => 'localhost', 'port' => '', 'driver' => 'mysql', 'prefix' => array( 'some_table' => 'db__extra.', ), )) );

Một lần nữa, tôi không chắc điều này có tương thích với mô-đun Dữ liệu hay không, vì tôi không sử dụng nó. Nhưng nó nên hoạt động với Lượt xem nếu bạn hook_views_data()tự thực hiện .


Bạn nói trong cả hai phương thức mà tôi cần triển khai <code> hook_view_data () </ code>. Điều đó không yêu cầu viết một mô-đun? Trong mọi trường hợp, tôi đã thử định nghĩa cơ sở dữ liệu trong phương thức thứ hai của bạn. Nó không làm cho bảng trong "db_extra" xuất hiện trong danh sách các bảng mồ côi của mô-đun Dữ liệu. Trong phương thức đầu tiên của bạn, tôi sẽ đặt truy vấn mà bạn đề xuất ở đâu (nếu không phải trong một mô-đun tùy chỉnh)?
NewSites

Nếu bạn đang tạo Chế độ xem SQL, bạn cần chạy trực tiếp truy vấn CREATE VIEW trong MySQL. Nó không cần phải được chạy lại.
Les Lim

Tôi xin lỗi, tôi vẫn không hiểu. Nơi nào bạn muốn tôi chạy truy vấn này? Trong phpMyAdmin? Điều đó sẽ cho tôi thứ gì đó tôi có thể sử dụng trong Lượt xem? Tôi đã tìm kiếm "SQL view" trên Drupal.org và nhận được drupal.org/project/sql_view , không có bản tải xuống sản xuất và tài liệu của họ tại drupal.org/node/2458947 nói rằng tôi cần phải thực hiện một hook (mà tôi đoán là viết một mô-đun) để nói với mô-đun Lượt xem về chế độ xem SQL của tôi. Vì vậy, nó có vẻ giống như những gì bạn đề xuất yêu cầu viết một mô-đun (mà tôi không cảm thấy sẵn sàng), và nếu không, tôi chỉ không nhận được những gì bạn bảo tôi làm.
NewSites
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.