Usando visualizações com uma tabela / esquema customizado

19

Preciso configurar algumas visualizações que extrairão alguns dados de uma tabela personalizada que criei. Algumas visualizações precisarão extrair conteúdo da maneira regular e da minha tabela personalizada (onde posso consultar um nid específico etc.).

Como faço isso ou onde é um bom lugar para pesquisar?

vintorg
fonte
7
Este artigo parece ser bastante no ponto: mydons.com/how-to-expose-custom-module-table-to-views-in-drupal
Jimajamma
Parece que pode ser o que estou procurando. Obrigado!
Vintorg

Respostas:

25

Seu módulo precisa implementar hook_views_data () .

O exemplo dado na documentação do gancho é para uma tabela definida a partir do SQL a seguir.

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;
}
kiamlaluno
fonte
Esta tem sido uma excelente ajuda. No entanto, um dos meus campos é de múltiplos valores e, portanto, acho que deve ser configurado de maneira diferente - mas como?
vacilando
A diferença está nos manipuladores que você precisa usar e o que você usa em vez de "sim-não"; Porém, não posso dizer quais manipuladores são para um campo com vários valores. Provavelmente é melhor como pergunta, se ninguém já perguntou.
Kiamlaluno
Obrigado, @kiamlaluno - OK, pelo que eu olhei, não encontrei e, em seguida, arrisquei criar uma pergunta separada - consulte drupal.stackexchange.com/questions/70561/…
Vacilando:
2

Eu acho que provavelmente valeria a pena investigar o módulo Dados . Isso é muito poderoso, pois permite que você declare uma tabela não Drupal para Drupal, de modo que ela se torne visível no Views como uma fonte de dados (como "Conteúdo", "Taxonomia" etc.). Você também pode declarar junções entre a tabela não Drupal e as entidades Drupal (por exemplo, se você pode estocar um nid em sua tabela não Drupal, poderá declarar uma junção no nid com qualquer nó).

Há também um submódulo que permite declarar sua tabela não Drupal como uma entidade, mas até agora eu não tentei isso.

Martin K
fonte