Implementare funzione di ricerca (hook_search)

2 contenuti / 0 new
Ultimo contenuto
Implementare funzione di ricerca (hook_search)

Salve qualcuno ha mai usato la "maniglia" di ricerca? (hook_search)

Dovrei implementare una funzione di ricerca all'interno di un modulo ed in particolare porla come opzione all'interno di un report che visualizza record(ovviamente) . Esiste un modo veloce x creare questo box di ricerca passandogli i controlli da visualizzare?

Grazie della pazienza

io di solito in Drupal 5 faccio così:

inizio creando un elemento del menu che esporti pubblicamente la funzione, diciamo miomodulo_find(), in questo modo:

<?php
        $items
[] = array('path' => 'miomodulo/find',
                        
'title' => t('Find'),
                        
'callback' => 'miomodulo_find',
                        
'access' => TRUE,
                        
'type' => MENU_LOCAL_TASK
                       
);
       
$items[] = array('path' => 'miomoulo/find/result',
                        
'title' => t('Find Results'),
                        
'callback' => 'miomodulo_findform_results',
                        
'access' => TRUE,
                        
'type' => MENU_SUGGESTED_ITEM
                       
);
?>

Come vedi c'è il primo elemento che serve per mostrare il form di ricerca ed il secondo che serve per mostrare i risultati.
Dopodichè implemento la funzione miomodulo_find in questo modo:

<?php
function miomodulo_find() {
       
// questa funzione qua è un piccolo helper
        // che uso per settare i breadcrumb piu' velocemente
   
_miomodulo_set_breadcrumb(array('find'));
   
$content = " Search for XXX";
   
$content .= drupal_get_form('miomodulo_findform');
    return
$content;
}
?>

Ora la funzione che crea il form, non è niente di speciale, in soldoni restituisce un array contenente la struttura del form che ti interessa.

<?php
function miomodulo_findform() {
   
$form = array();
       
// QUA IN MEZZO CI VA IL TUO FORM
       
return $form;
?>

A questo punto, utilizzo il submit per fare le seguenti cose: liberare il contenuto del form dai campi settati da drupal che ora non mi sono più utili, riempire la variabile di sessione con i campi serializzati del form e redirigere l'utente alla pagina che mostra i risultati.

<?php
function miomodulo_findform_submit($form_id, $form_values) {
    unset(
$form_values['op']);
    unset(
$form_values['submit']);
    unset(
$form_values['form_token']);
    unset(
$form_values['form_id']);
   
$_SESSION['miomodulo_form_values'] = serialize($form_values);
    return
"miomodulo/find/result";
}
?>

Per finire, in questa funzione ricevo i dati del form e li utilizzo per costruire una query di ricerca, lanciarla e stipare i dati dentro ad una o più tabelle, che in fondo alla funzione ritorno in modo che siano visulaizzati.

<?php
function miomodulo_findform_results() {
       
// disserializzo i dati del form
   
$form_values = unserialize($_SESSION['miomodulo_form_values']);
   
// setto il solito breadcrumb
   
_miomodulo_set_breadcrumb(array('find', 'results'));
      
// creo ed eseguo la query
       // immetto i risultati in una o più tabelle e ritorno
      
return $table;
}
?>

Con questo è tutto