Custom Modulo
Salve a tutti,
ho un problema riguardo ai campi di un modulo creato da 0.
Questo modulo va a sostituire la normale registrazione utente di drupal inserendo campi personalizzati che fanno diversi controlli....
Tutto perfettamente funzionante!
Oggi però vorrei poter filtrare tramite una View questi campi che purtroppo sono paralleli al sistema drupal.
Cioè il modulo funziona, le tabelle del DB sono ben collegate, ma i campi scritti all'interno del modulo non sono visibili all'interno di Drupal.
Come posso ricavare questi campi del modulo personalizzato? Ho pensato di dichiararli entity all'interno del modulo ma non ho idea di come posso fare.
Qualcuno ha altre soluzioni?
Grazie

Risposte
Ciao, puoi esporre i campi a
Ciao, puoi esporre i campi a Views implementando l'hook_views_data (https://api.drupal.org/api/views/views.api.php/function/hook_views_data/7) all'interno del tuo modulo.
Puoi farmi un esempio?
Puoi farmi un esempio?
Ciao, ma non c'è problema
Ciao, ma non c'è problema drupal ti da tutti gli esempi che vuoi :D
https://www.drupal.org/project/examples
La pagina che ti linkato alla
La pagina che ti linkato alla documentazione contiene un esempio completo.
Provo a postare un semplice esempio:
nel tuo modulo inserisci (devi dire al sistema che il tuo modulo ha dei metodi per Views)
<?php
NOMEMODULO_views_api() {
return array(
'api' => '3.0',
);
}
?>
nella directory del tuo modulo crei NOMEMODULO.views.inc con qualcosa del genere:
<?phpfunction NOMEMODULO_views_data(){
$data = array(
'report_data' => array(
'table' => array(
'group' => 'report data',
'base' => array(
'field' => 'rid',
'title' => 'report data',
'help' => 'report table',
'weight' => 10,
),
'join' => array(
'node' => array(
'left_field' => 'nid',
'field' => 'nid',
'type' => 'LEFT',
),
),
),
'rid' => array(
'title' => 'Rid',
'help' => 'Rid',
'field' => array(
'handler' => 'views_handler_field_numeric',
'help' => 'Rid',
'click sortable' => TRUE,
),
'filter' => array(
'handler' => 'views_handler_filter_numeric',
'allow empty' => TRUE,
'help' => 'filtro rid',
),
'argument' => array(
'handler' => 'views_handler_argument_numeric',
'help' => 'Rid',
),
'sort' => array(
'handler' => 'views_handler_sort',
'help' => 'ordinamento rid',
),
),
'nid' => array(
'title' => 'Nid',
'help' => 'Nid',
'field' => array(
'handler' => 'views_handler_field_numeric',
'help' => 'Nid',
'click sortable' => TRUE,
),
'filter' => array(
'handler' => 'views_handler_filter_numeric',
'allow empty' => TRUE,
'help' => 'filtro nid',
),
'argument' => array(
'handler' => 'views_handler_argument_numeric',
'help' => 'Nid',
),
'sort' => array(
'handler' => 'views_handler_sort',
'help' => 'ordinamento nid',
),
'relationship' => array(
'label' => 'report_data.nid -> node.nid',
'base' => 'node',
'base field' => 'nid',
),
),
),
);
return $data;
}
?>
immaginando che la tabella del modulo "report_data" sia composta un campo seriale rid e da un intero nid (con il quale è necessario un join sulla tabella node).
Ad ogni modifica è necessaria la pulizia della cache.
Spero che tutte le parentesi siano a posto ...
Altrimenti c'è qualche altro
Altrimenti c'è qualche altro metodo in cui in una vista posso recuperare i miei campi come ad esempio:
Contenuto: MY_CUSTOM_FIELDS
?
Dichiarando i campi Entity all'interno del modulo?
Grazie per le risposte, mi state aiutando parecchio
Per adottare delle tabelle ed
Per adottare delle tabelle ed esporle automaticamente a Views è possibile usare https://www.drupal.org/project/data. Però questo lo puoi fare solo con tabelle "esterne" cioè non dichiarate da alcun modulo attraverso le schema API di Drupal.
Per le tabelle generate e gestire con le schema API la via di solito è quella sopra descritta.
Per definire i tuoi campi come properties di un'entità dovresti prima dichiare una entity che abbia come tabella base la tabella in questione. Per semplificare in questo caso potresti usare il modulo entity api (https://www.drupal.org/project/entity) che ti mette a disposizione anche una classe controller per Views (http://www.drupalcontrib.org/api/drupal/contributions!entity!views!entity.views.inc/class/EntityDefaultViewsController/7).