Come nascondere dei campi in Drupal

Drupal permette di gestire e personalizzare in maniera abbastanza granulare i permessi di accesso ai campi in un form. Alcuni campi o controlli però non possono essere disabilitati, ad esempio il titolo o il selettore della tassonomia.

Un metodo semplice potrebbe essere quello di nascondere i campi dal CSS. Questa soluzione però è facilmente aggirabile usando software come firebug, tramite il quale possiamo ri-visualizzare i campi nascosti e di conseguenza avremmo prodotto solamente una falla di sicurezza. Un metodo più efficace potrebbe essere quello di agire nel core di Drupal, però ciò è contrario alla filosofia di utilizzo e soprattutto è molto pericoloso in quanto ad ogni aggiornamento è necessario rieseguire ogni modifica effettuata.

La soluzione migliore è quindi scrivere un modulo personalizzato che, in determinate condizioni, nasconda in maniera definitiva dei campi in un form.

Potremmo ad esempio voler nascondere il campo di modifica del titolo nel caso in cui l'utente appartenga ad un certo ruolo.

Per fare ciò dovremmo creare un modulo e creare al suo interno una funzione che si agganci a hook_form_alter(). Chiamerò il modulo hidetitle

function hidetitle_form_alter($form_id, &$form) {
  ...
}

In base alle specifiche esigenze, per nascondere il titolo basta eseguire questo codice. Nell'esempio il campo titolo sarà nascosto per i nodi di tipo story:

  switch ($form_id) {
    case 'story_node_form':
      $form['title']['#access'] = FALSE;
    break;
  }

Per decidere quando applicare la modifica, sarà opportuno caricare l'elenco dei ruoli associati all'utente e quindi confrontarli con i ruoli che non potranno visualizzare il campo.

Per aumentare la flessibilità del modulo, si potrebbe creare un nuovo permesso in modo da configurare il ruolo che ha accesso alla modifica dei titoli dei nodi attraverso l'interfaccia di amministrazione di Drupal.

Ciao.
Vi segnalo anche il modulo http://drupal.org/project/cck_field_perms che penso potrebbe essere adatto a questo scopo, senza stare ad intervenire sul codice.

Come ho scritto nel primo paragrafo, alcuni campi NON possono essere gestiti, cck_field_perm gestisce solo i campi CCK, non titolo e tassonomia.