Utilizzo delle viste con una tabella / uno schema personalizzati


19

Devo impostare alcune viste che estrarranno alcuni dati da una tabella personalizzata che ho creato. Alcune viste dovranno estrarre il contenuto in modo regolare e dalla mia tabella personalizzata (dove posso richiedere un particolare nid , ecc.).

Come posso fare questo, o dove è un buon posto per la ricerca?


7
Questo articolo sembra essere abbastanza sul punto: mydons.com/how-to-expose-custom-module-table-to-views-in-drupal
Jimajamma

Sembra che potrebbe essere quello che sto cercando. Grazie!
vintorg,

Risposte:


25

Il tuo modulo deve implementare hook_views_data () .

L'esempio fornito nella documentazione hook è per una tabella definita dal seguente 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;
}

Questo è stato di grande aiuto. Tuttavia, uno dei miei campi è multivalore e quindi penso che debba essere impostato in modo diverso, ma come?
Vacilando,

La differenza sta nei gestori che devi usare e in quello che usi invece di "sì-no"; Non posso dirti quali gestori sono per un campo multi-valore. Probabilmente è meglio come domanda, se nessuno lo ha già fatto.
kiamlaluno

Grazie, @kiamlaluno - OK, così ho guardato, non ho trovato, quindi mi sono avventurato a creare una domanda separata - vedi drupal.stackexchange.com/questions/70561/…
Vacilando

2

Penso che varrebbe la pena indagare sul modulo dati . Questo è molto potente, poiché ti consente di dichiarare una tabella non Drupal su Drupal in modo tale che diventi visibile in Views come origine dati (come "Contenuto", "Tassonomia", ecc.). Puoi anche dichiarare join tra la tabella non Drupal e le entità Drupal (quindi ad esempio se puoi immagazzinare un nid nella tua tabella non Drupal, puoi dichiarare un join sul nid con qualsiasi nodo).

C'è anche un sottomodulo che ti consente di dichiarare la tua tabella non Drupal come entità, ma finora non ci ho provato.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.