사용자 정의 테이블 / 스키마와 함께 뷰 사용


19

내가 만든 사용자 지정 테이블에서 일부 데이터를 가져 오는 몇 가지 뷰를 설정해야합니다. 일부 뷰는 정기적으로 콘텐츠를 사용자 정의 테이블에서 가져와야합니다 (특정 nid 등을 쿼리 할 수있는 곳 ).

어떻게해야합니까, 아니면 연구하기 좋은 곳은 어디입니까?



내가 찾는 것일 수도 있습니다. 감사!
vintorg

답변:


25

모듈은 hook_views_data () 를 구현해야합니다 .

후크 문서에 제공된 예제는 다음 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

차이점은 사용할 핸들러와 "yes-no"대신 사용하는 핸들러에 있습니다. 그래도 다중 값 필드에 대한 핸들러는 말할 수 없습니다. 아무도 묻지 않았다면 아마도 질문으로하는 것이 좋습니다.
kiamlaluno

감사합니다, @kiamlaluno-알았어요. 그래서 찾고, 찾지 못하고 별도의 질문을하기 위해 모험을 했습니다
drupal.stackexchange.com/questions/70561/…

2

데이터 모듈을 조사해 볼 가치가 있다고 생각합니다 . 드루팔이 아닌 테이블을 Drupal에 선언하여 뷰에서 데이터 소스 (예 : "Content", "Taxonomy"등)로 보이도록 매우 강력합니다. 비 Drupal 테이블과 Drupal 엔티티 사이에 조인을 선언 할 수도 있습니다 (예를 들어, 비 Drupal 테이블에 nid를 저장할 수있는 경우 임의의 노드로 nid에 조인을 선언 할 수 있음).

비 Drrupal 테이블을 엔티티로 선언 할 수있는 하위 모듈도 있지만 지금까지 시도하지 않았습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.