Utilisation de vues avec une table / un schéma personnalisé

19

J'ai besoin de configurer des vues qui extrairont certaines données d'une table personnalisée que j'ai créée. Certaines vues devront extraire le contenu de la manière habituelle et de ma table personnalisée (où je peux rechercher un nid particulier , etc.).

Comment est-ce que je fais ceci, ou où est un bon endroit pour rechercher?

vintorg
la source
7
Cet article semble être assez pertinent
Jimajamma
Cela ressemble peut-être à ce que je recherche. Merci!
vintorg

Réponses:

25

Votre module doit implémenter hook_views_data () .

L'exemple donné dans la documentation du hook concerne une table définie à partir du SQL suivant.

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
la source
Cela a été une excellente aide. Cependant, l'un de mes domaines est à valeurs multiples, et je pense donc qu'il doit être configuré différemment - mais comment?
Vacilando
La différence réside dans les gestionnaires que vous devez utiliser et ce que vous utilisez au lieu de "oui-non"; Je ne peux cependant pas vous dire quels gestionnaires sont pour un champ à plusieurs valeurs. C'est probablement mieux comme question, si personne ne l'a déjà demandé.
kiamlaluno
Merci, @kiamlaluno - OK, alors j'ai regardé, je n'ai pas trouvé, puis je me suis aventuré à créer une question distincte - voir drupal.stackexchange.com/questions/70561/…
Vacilando
2

Je pense qu'il vaudrait probablement la peine d'étudier le module Data . C'est très puissant, car il vous permet de déclarer une table non Drupal à Drupal de telle sorte qu'elle devienne visible dans Views comme source de données (comme "Contenu", "Taxonomie", etc.). Vous pouvez également déclarer des jointures entre la table non Drupal et les entités Drupal (ainsi, par exemple, si vous pouvez stocker un nid dans votre table non Drupal, vous pouvez déclarer une jointure sur le nid avec n'importe quel nœud).

Il existe également un sous-module qui vous permet de déclarer votre table non Drupal en tant qu'entité, mais jusqu'à présent, je n'ai pas essayé cela.

Martin K
la source