การใช้มุมมองด้วยตาราง / สคีมาที่กำหนดเอง


19

ฉันต้องตั้งค่ามุมมองที่จะดึงข้อมูลบางอย่างจากตารางที่กำหนดเองที่ฉันสร้างขึ้น มุมมองบางอย่างจะต้องดึงเนื้อหาด้วยวิธีปกติและจากตารางที่กำหนดเองของฉัน (ที่ฉันอาจสอบถามnidเฉพาะฯลฯ )

ฉันจะทำสิ่งนี้หรือที่ที่ดีในการวิจัย?


7
บทความนี้น่าจะสวยในจุด: mydons.com/how-to-expose-cododule-module-table-to-views-in-drupal
Jimajamma

ดูเหมือนว่าอาจเป็นสิ่งที่ฉันกำลังมองหา ขอบคุณ!
vintorg

คำตอบ:


25

ความต้องการโมดูลของคุณที่จะใช้hook_views_data ()

ตัวอย่างที่ให้ไว้ในเอกสารประกอบของ hook สำหรับตารางที่กำหนดจาก SQL ต่อไปนี้

CREATE TABLE example_table (
  nid INT(11) NOT NULL,
  plain_text_field VARCHAR(32,
  numeric_field INT(11),
  boolean_field INT(1),
  timestamp_field INT(8),
  PRIMARY KEY(nid)
);
function mymodule_views_data() {
  $data['example_table']['table']['group'] = t('Example table');

  $data['example_table']['table']['base'] = array(
    'field' => 'nid',
    'title' => t('Example table'), 
    'help' => t('Example table contains example content and can be related to nodes.'), 
    'weight' => -10,
  );

  $data['example_table']['table']['join'] = array(
    'node' => array(
      'left_field' => 'nid', 
      'field' => 'nid',
    ),
  );

  $data['example_table']['nid'] = array(
    'title' => t('Example content'), 
    'help' => t('Some example content that references a node.'),
    'relationship' => array(
      'base' => 'node',
      'base field' => 'nid', // The name of the field on the joined table.
      // 'field' => 'nid' -- see hook_views_data_alter(); not needed here.
      'handler' => 'views_handler_relationship', 
      'label' => t('Example node'),
    ),
  );

  $data['example_table']['plain_text_field'] = array(
    'title' => t('Plain text field'), 
    'help' => t('Just a plain text field.'), 
    'field' => array(
      'handler' => 'views_handler_field', 
      'click sortable' => TRUE,
    ), 
    'sort' => array(
      'handler' => 'views_handler_sort',
    ), 
    'filter' => array(
      'handler' => 'views_handler_filter_string',
    ), 
    'argument' => array(
      'handler' => 'views_handler_argument_string',
    ),
  );

  $data['example_table']['numeric_field'] = array(
    'title' => t('Numeric field'), 
    'help' => t('Just a numeric field.'), 
    'field' => array(
      'handler' => 'views_handler_field_numeric', 
      'click sortable' => TRUE,
    ), 
    'filter' => array(
      'handler' => 'views_handler_filter_numeric',
    ), 
    'sort' => array(
      'handler' => 'views_handler_sort',
    ),
  );

  $data['example_table']['boolean_field'] = array(
    'title' => t('Boolean field'), 
    'help' => t('Just an on/off field.'), 
    'field' => array(
      'handler' => 'views_handler_field_boolean', 
      'click sortable' => TRUE,
    ), 
    'filter' => array(
      'handler' => 'views_handler_filter_boolean_operator',
      'label' => t('Published'),
      'type' => 'yes-no',
      'use equal' => TRUE,
    ), 
    'sort' => array(
      'handler' => 'views_handler_sort',
    ),
  );

  $data['example_table']['timestamp_field'] = array(
    'title' => t('Timestamp field'), 
    'help' => t('Just a timestamp field.'), 
    'field' => array(
      'handler' => 'views_handler_field_date', 
      'click sortable' => TRUE,
    ), 
    'sort' => array(
      'handler' => 'views_handler_sort_date',
    ), 
    'filter' => array(
      'handler' => 'views_handler_filter_date',
    ),
  );

  return $data;
}

นี่เป็นความช่วยเหลือที่ยอดเยี่ยม อย่างไรก็ตามหนึ่งในสาขาของฉันคือหลายค่าและดังนั้นฉันคิดว่ามันจะต้องตั้งค่าที่แตกต่างกัน - แต่อย่างไร
Vacilando

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

ขอบคุณ @kiamlaluno - ตกลงดังนั้นฉันค้นหาไม่พบแล้วลองสร้างคำถามแยกต่างหาก - ดูdrupal.stackexchange.com/questions/70561/ …
Vacilando

2

ฉันคิดว่ามันอาจจะมีมูลค่าการตรวจสอบโมดูลข้อมูล สิ่งนี้มีประสิทธิภาพมากเนื่องจากช่วยให้คุณสามารถประกาศตารางที่ไม่ใช่ Drupal ให้กับ Drupal ซึ่งจะปรากฏใน Views เป็นแหล่งข้อมูล (เช่น "เนื้อหา", "Taxonomy" เป็นต้น) คุณยังสามารถประกาศการรวมระหว่างตารางที่ไม่ใช่ Drupal และเอนทิตี Drupal (เช่นถ้าคุณสามารถเก็บ nid ในตารางที่ไม่ใช่ Drupal ของคุณคุณสามารถประกาศการเข้าร่วมบน nid กับโหนดใด ๆ )

นอกจากนี้ยังมี submodule ซึ่งช่วยให้คุณประกาศตารางที่ไม่ใช่ Drupal ของคุณเป็นเอนทิตี แต่จนถึงตอนนี้ฉันยังไม่ได้ลอง

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.