Sử dụng các khung nhìn với một bảng / lược đồ tùy chỉnh


19

Tôi cần thiết lập một số chế độ xem sẽ lấy một số dữ liệu từ bảng tùy chỉnh mà tôi đã tạo. Một số chế độ xem sẽ cần kéo nội dung theo cách thông thường và từ bảng tùy chỉnh của tôi (nơi tôi có thể truy vấn cho một nid cụ thể , v.v.).

Làm thế nào để tôi làm điều này, hoặc một nơi tốt để nghiên cứu?



Có vẻ như đó có thể là những gì tôi đang tìm kiếm. Cảm ơn!
vintorg

Câu trả lời:


25

Mô-đun của bạn cần triển khai hook_view_data () .

Ví dụ được đưa ra trong tài liệu hook là cho một bảng được xác định từ SQL sau.

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

Đây là một sự trợ giúp tuyệt vời. Tuy nhiên, một trong những lĩnh vực của tôi là đa giá trị, và vì vậy tôi nghĩ nó phải được thiết lập khác nhau - nhưng bằng cách nào?
Vacilando

Sự khác biệt là ở các trình xử lý bạn cần sử dụng và những gì bạn sử dụng thay vì "có - không"; Tuy nhiên, tôi không thể cho bạn biết trình xử lý nào dành cho trường đa giá trị. Có lẽ nó là tốt hơn như câu hỏi, nếu không có ai hỏi nó.
kiamlaluno

Cảm ơn, @kiamlaluno - OK, vì vậy tôi đã tìm, không tìm thấy, sau đó mạo hiểm để tạo một câu hỏi riêng - xem drupal.stackexchange.com/questions/70561/iêu
Vacilando

2

Tôi nghĩ rằng nó có thể đáng để nghiên cứu mô-đun Dữ liệu . Điều này rất mạnh mẽ, vì nó cho phép bạn khai báo bảng không phải Drupal cho Drupal sao cho nó hiển thị trong Chế độ xem dưới dạng nguồn dữ liệu (như "Nội dung", "Phân loại", v.v.). Bạn cũng có thể khai báo các phép nối giữa bảng không phải Drupal và các thực thể Drupal (ví dụ: nếu bạn có thể lưu trữ một nid trong bảng không Drupal của mình, thì bạn có thể khai báo một phép nối trên nid với bất kỳ nút nào).

Ngoài ra còn có một mô hình con cho phép bạn khai báo bảng không phải Drupal của bạn là một thực thể, nhưng cho đến nay tôi chưa thử điều đó.

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.