จะทำให้ฐานข้อมูลภายนอกพร้อมใช้งานกับ Views ได้อย่างไร


8

มีการพูดคุยกันมากมายที่นี่และที่อื่น ๆ เกี่ยวกับการใช้ฐานข้อมูลภายนอกใน Drupal สิ่งที่ฉันคิดออกจากที่คือ:

  • วิธีที่ดีที่สุดในการทำงานกับข้อมูลในตารางฐานข้อมูลคือการใช้โมดูล Views ฉันติดตั้งแล้วและเริ่มใช้งานและพบว่ามันยอดเยี่ยมสำหรับการทำงานกับตารางที่ฉันเพิ่มลงในฐานข้อมูลของไซต์
  • วิธีที่ง่ายที่สุดในการทำให้ Views เข้าใช้งานกับตารางที่ไม่ได้สร้างโดย Drupal ก็คือโมดูล Data โมดูลนี้ปฏิบัติกับตารางใด ๆ ในฐานข้อมูลเว็บไซต์ที่ไม่ได้ใช้งานโดย Drupal เป็น "ตารางเด็กกำพร้า" และช่วยให้มันเป็น "บุญธรรม" ที่คลิกปุ่ม
  • โมดูล "ตัวช่วยสร้างตาราง" เห็นได้ชัดว่ามีวิธีการดังกล่าวกับตารางที่ไม่ได้อยู่ในฐานข้อมูลของเว็บไซต์ แต่โมดูลนั้นไม่พร้อมใช้งานสำหรับ Drupal 7
  • ไฟล์ "settings.php" ในส่วนที่เกี่ยวกับ "การตั้งค่าฐานข้อมูล" มีเอกสารรายละเอียดเกี่ยวกับวิธีกำหนดฐานข้อมูลเพิ่มเติมที่ไซต์สามารถทำงานได้ แต่เมื่อฐานข้อมูลถูกกำหนดด้วยวิธีดังกล่าวตารางจะไม่แสดงในรายการของตารางเด็กกำพร้าในโมดูลข้อมูล

การเปลี่ยนแปลงที่ฉันทำกับคำจำกัดความของฐานข้อมูลในไฟล์“ settings.php” ของหนึ่งในเว็บไซต์ของฉันคือ:

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

ฉันมีตารางที่ฉันต้องการใช้มากกว่าหนึ่งไซต์ในการติดตั้งหลายไซต์ของฉัน ซึ่งหมายความว่าฉันต้องมีตารางในฐานข้อมูลที่สามารถเข้าถึงได้ในแต่ละไซต์ จากการอ่านที่ฉันทำเสร็จแล้วตัวเลือกของฉันสำหรับการทำคือ:

  1. ดีที่สุดถ้าเป็นไปได้:ค้นหาว่ามีวิธีรับโมดูลข้อมูลเพื่อจดจำตารางในฐานข้อมูลเพิ่มเติมที่กำหนดไว้ใน "settings.php" เพื่อให้สามารถใช้งานได้
  2. ใช้คำนำหน้าตารางเพื่ออนุญาตให้ไซต์ทั้งหมดใช้ฐานข้อมูลเดียว
  3. โมดูล“ รายงาน Forena ” ดูเหมือนจะทำสิ่งที่ฉันต้องการ แต่เมื่อฉันติดตั้งฉันไม่สามารถทำให้มันใช้งานได้ ฉันส่งปัญหา 2475645และไม่สามารถทำอะไรได้มากกว่านั้นเว้นแต่จะมีการแก้ไขปัญหานั้น
  4. เขียนโมดูลของฉันเองเพื่อให้ Views เข้าถึงฐานข้อมูลเพิ่มเติมที่กำหนดใน "settings.php"
  5. ติดตั้ง Drupal 6 ด้วย Table Wizard และใช้สิ่งนั้นเพื่อรับ Views เพื่อดูตารางภายนอกของฉันจากนั้นก็นำผลลัพธ์นั้นมาวางไว้ใน Drupal 7 (สิ่งนี้ถูกแนะนำในบางบทความ)
  6. ทำตามขั้นตอนในhttps://drupal.stackexchange.com/a/3321/45991ซึ่งเริ่มต้นด้วยการติดตั้งแพตช์และดูเหมือนว่าจะต้องสร้างโมดูลของตัวเองด้วย
  7. ฉันยังได้ดูโมดูล Feeds, Feeds SQL, มุมมอง XML Backend และย้ายข้อมูล แต่ไม่มีใครบอกว่าพวกเขาสามารถเชื่อมต่อ db ภายนอกกับ Views ได้ ฉันพลาดอะไรไปรึเปล่า? หนึ่งในนั้นคือทางออกที่ถูกต้องหรือไม่?

ตัวเลือกที่ 2 นั้นไม่สามารถใช้งานได้จริงเพราะมันจะส่งผลให้เกิดฐานข้อมูลขนาดใหญ่ที่มีหลายร้อยตารางที่ยากต่อการจัดการ ฉันมีความก้าวหน้าอย่างมากในการเริ่มต้นใช้งาน Drupal แต่ฉันไม่รู้สึกถึงภาระงานที่ 4, 5, หรือ 6 มีความเป็นไปได้ที่จะมีตัวเลือกแบบที่ 1 ใช้งานได้หรือไม่? หรือมีวิธีอื่นใดในการทำให้ Views ทำงานกับตารางภายนอกฐานข้อมูลไซต์โดยไม่สามารถเขียนโมดูลของตัวเองได้?

รายละเอียดเพิ่มเติมสองประการ: ตารางแรกที่ฉันต้องใช้มีขนาดใหญ่กว่า 6,000 แถวและประมาณ 20 คอลัมน์ ไม่มีเจตนาที่จะให้ผู้เยี่ยมชมเว็บไซต์เข้าถึงฐานข้อมูลยกเว้นข้อมูลที่ดึงมาจากมันสำหรับเนื้อหาของหน้า

ขอบคุณสำหรับความช่วยเหลือของคุณ.

คำตอบ:


2

ฉันคิดว่าโมดูลForenaทำสิ่งที่คุณต้องการอย่างแท้จริง ปัญหาการตั้งค่าของคุณเป็นเพียงคำขอการสนับสนุนที่ฉันคิดว่าไม่ใช่สิ่งที่ต้องมี "การแก้ไข" หลังจากที่คุณได้รับการแก้ไขคุณจะมีทางเลือกที่จะใช่หรือไม่ใช้การรวมมุมมอง

ปัญหาของ Forena ที่คุณสร้างนั้นได้รับการบันทึกไว้เป็นอย่างดี (เยี่ยมมาก!) แต่ไม่มีที่ไหนพูดถึงสิ่งใดเกี่ยวกับการอนุญาตที่คุณได้รับ (ซึ่งทำให้ฉันเชื่อว่าคุณอาจพลาดสิทธิ์ที่จำเป็นบางอย่าง) ดังนั้นนี่คือความพยายามที่จะกล่าวว่า:

  • คุณสามารถอธิบายสั้น ๆ เกี่ยวกับการอนุญาตที่เกี่ยวข้องกับ Forena ที่คุณอนุญาตได้หรือไม่

  • สิทธิ์ Forena ต้องมีการอธิบายในคู่มือการตั้งค่าที่มาพร้อมกับ Forena ? FYI: นี่คือคำพูดของ (บางส่วน):

    Forena ให้ความละเอียดในการรายงานการอนุญาตที่เกี่ยวข้องโดยใช้เครื่องมืออำนวยความสะดวกในการดูแลระบบแบบมาตรฐานของ Drupal เพื่อให้สิทธิ์กับบทบาท รายการสิทธิ์ของ Drupal ที่เกี่ยวข้องกับ Forena ที่สามารถให้สิทธิ์ได้นั้นอาจจะค่อนข้างท่วมท้นในตอนแรก เนื่องจากมี 3 รายการสำหรับแหล่งข้อมูลที่กำหนดไว้แต่ละรายการและ Vanilla Forena มาพร้อมกับแหล่งข้อมูล 3 แหล่ง

    หากต้องการเรียกดูคู่มือนี้ในเว็บไซต์ของคุณเพียงไปที่ /reports/help.setup

สิทธิ์เหล่านั้นในการเข้าถึง "ข้อมูล" ถูกระงับไว้ แต่เดิม นั่นเป็นเพราะการออกแบบเนื่องจาก Forena นั้นค่อนข้างอ่อนไหวต่อทุกสิ่งที่เกี่ยวข้องกับการอนุญาตให้เข้าถึงข้อมูลผ่าน Forena สิ่งที่คุณไม่ต้องการเกิดขึ้นก็คือเพียงติดตั้งและกำหนดค่า Forena (โดยไม่ต้องมีผู้ดูแลระบบสิทธิ์) คุณสามารถใช้มันเป็นวิธีแก้ปัญหาในการเข้าถึงข้อมูลที่ปลอดภัย

นอกจากนี้โปรดทราบว่านอกเหนือจากสิทธิ์ที่ระดับแหล่งข้อมูลทั้งหมดคุณมีตัวเลือกในการปรับแต่งสิทธิ์ที่จำเป็นสำหรับบล็อกข้อมูลเฉพาะเพิ่มเติม (= แบบสอบถาม SQL แบบกำหนดเอง) ในการทำเช่นนั้นเพียงระบุสิทธิ์ที่จำเป็น (Drupal) ภายในคำสั่ง SQL (รายละเอียดไวยากรณ์รวมอยู่ในคำแนะนำของ Forena) usecase ทั่วไปสำหรับสิ่งนี้คือการรักษาความปลอดภัยการเข้าถึงคอลัมน์ด้วยข้อมูลที่สำคัญ

การเปิดเผยข้อมูล: ฉันเป็นผู้ดูแลร่วมของโมดูลนี้
ฉันหวังว่านี่จะไม่ละเมิดนโยบายของไซต์เกี่ยวกับการโปรโมตตนเอง


ขอบคุณสำหรับสิ่งนี้. ฉันไม่ได้สังเกตเมื่อฉันเข้าสู่การตั้งค่าครั้งแรกว่ามีสิทธิ์ห้าอย่างที่ไม่ได้รับอนุญาตให้ใคร ตอนนี้ฉันอนุญาตให้ผู้ดูแลระบบ (เช่นฉัน) เอกสารการตั้งค่าไม่ได้บอกว่าเหตุใดการให้สิทธิ์เหล่านั้นจึงถูกระงับหรือไม่และมีเหตุผลที่จะไม่อนุญาตให้ผู้ดูแลระบบหรือไม่ อย่างไรก็ตามตอนนี้ฉันมีแหล่งข้อมูลเหล่านั้นดังนั้นนี่จึงช่วยแก้ไขปัญหานั้นได้ มีเหตุผลที่คุณตอบที่นี่แทนที่จะเป็นปัญหาที่ฉันส่งมาหรือไม่?
ไซต์ใหม่

ยอดเยี่ยมในการอ่านความคืบหน้า! อย่างใดมันชดเชย "downvote" ของคำตอบของฉัน ... FYI: ฉันยังตอบผ่านปัญหาคิวในขณะนี้ ดังนั้นตอนนี้ "สิ่งนี้ได้แก้ปัญหาแล้ว" หมายความว่าคุณคิดว่า Forena เป็นคำตอบสำหรับคำถามของคุณหรือไม่ (ซึ่งยังไม่เหมือนใน bullet 3 ของ OP) ใช่ไหม FYI: ฉันจะพยายามอัปเดตคำตอบของฉันที่นี่เพื่ออธิบายสั้น ๆ ว่า "ทำไมสิทธิ์เหล่านั้นถูกระงับไว้ตั้งแต่แรก" ซึ่งเป็นคำถามพิเศษที่ดี!
Pierre.Vriens

ฉันไม่ใช่คนที่โหวตคำตอบของคุณ ตอนนี้ฉันยอมรับคุณเป็น <u> คำตอบ </u> แล้วโหวตขึ้น (ซึ่งน่าเสียดายที่ส่งกลับเป็นศูนย์)
NewSites

หืมฉันไม่ได้คาดเดาว่า @NewSites จะได้รับการลงคะแนนจริง ๆ แล้วฉันได้เรียนรู้ที่จะอยู่กับ downvote โดยส่วนตัวฉันไม่ชอบ downvoting โดยทั่วไปและฉันไม่สนใจสิ่งใดที่ไม่มีความคิดเห็นใด ๆ ที่จะอธิบายพวกเขา แต่แน่นอนว่า "upvoting" และ "การยอมรับ" นั้นได้รับการชื่นชมอย่างมาก และแน่นอนว่าการรู้ว่ายังมีผู้ใช้ Drupal รายอื่นที่ดูเหมือนว่าจะได้ค้นพบ Forena แล้วจะไปได้ยังไง! ตรวจสอบให้แน่ใจว่าไฟล์ (รองรับ?) มีปัญหาตามความเหมาะสม (เพื่อดูการสนับสนุนในที่ทำงาน ... )
Pierre.Vriens

2

ฉันได้ทำสิ่งนี้สำเร็จแล้วหลายวิธี:

ใช้ดู SQL เพื่อสร้างตารางเสมือนในที่หมายถึงตารางที่สอดคล้องกันในdb_local db__extraแบบสอบถามเพื่อสร้างที่จะมีลักษณะเช่นนี้:

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

จากนั้นคุณสามารถอ้างถึงมุมมอง SQL นี้ราวกับว่าเป็นตารางเนทีฟในฐานข้อมูล Drupal ของคุณและคุณไม่จำเป็นต้องเพิ่มฐานข้อมูลภายนอกเลยใน settings.php โปรดทราบว่าสิ่งนี้อาจเข้ากันไม่ได้กับโมดูลข้อมูล (ดูhttps://www.drupal.org/node/1973806 ) แต่คุณควรจะสามารถอธิบายมุมมอง SQL ไปยังโมดูล Drupal Views ได้โดยการใช้งานhook_views_data()และหยุดใช้โมดูลข้อมูล .

นี่คือความเป็นไปได้อื่น: ใช้ส่วนนำหน้าของตารางที่เลือกเพื่อหลอกลวง Drupal ในการเขียนใหม่ {some_table} เป็น db__extra.some_table สิ่งนี้ไม่เหมือนกับคำนำหน้าตาราง Drupal ของคุณ

$databasesการตั้งค่าของคุณจะเป็นดังนี้:

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

อีกครั้งฉันไม่แน่ใจว่าสิ่งนี้เข้ากันได้กับโมดูลข้อมูลเพราะฉันไม่ได้ใช้มัน แต่ควรทำงานกับ Views หากคุณใช้งานhook_views_data()เอง


คุณพูดในทั้งสองวิธีที่ฉันต้องใช้ <code> hook_views_data () </code> นั่นไม่จำเป็นต้องมีการเขียนโมดูลหรือไม่? ไม่ว่าในกรณีใดฉันลองใช้นิยามฐานข้อมูลในวิธีที่สองของคุณ ไม่ทำให้ตารางใน "db_extra" ปรากฏในรายการของตารางโมดูลที่ถูกโยงถึง ในวิธีแรกของคุณฉันจะวางแบบสอบถามที่คุณแนะนำ (ถ้าไม่ได้อยู่ในโมดูลที่กำหนดเอง) ที่ไหน?
ไซต์ใหม่

หากคุณกำลังสร้างมุมมอง SQL คุณจะต้องเรียกใช้แบบสอบถามมุมมองสร้างครั้งเดียวใน MySQL โดยตรง ไม่จำเป็นต้องเรียกใช้ซ้ำ
Les Lim

ฉันขอโทษฉันยังไม่เข้าใจ คุณต้องการให้ฉันเรียกใช้แบบสอบถามนี้ที่ไหน ใน phpMyAdmin นั่นจะให้บางสิ่งที่ฉันสามารถใช้ใน Views ได้หรือไม่ ฉันค้นหา "มุมมอง SQL" บน Drupal.org และได้drupal.org/project/sql_viewsซึ่งไม่มีการดาวน์โหลดการผลิตและมี doc ที่drupal.org/node/2458947บอกว่าฉันต้องติดตั้ง hook (ซึ่งฉันคิดว่าหมายถึงการเขียน โมดูล) เพื่อบอกโมดูล Views เกี่ยวกับมุมมอง SQL ของฉัน ดังนั้นดูเหมือนว่าสิ่งที่คุณแนะนำจะต้องเขียนโมดูล (ซึ่งฉันไม่รู้สึกพร้อม) และถ้าไม่ฉันก็ไม่ได้สิ่งที่คุณกำลังบอกให้ฉันทำ
ไซต์ใหม่
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.