Nascondere i tab di troppo

Mi è capitato l'altro giorno di installare un modulo di drupal che pur configurato a dovere per quanto riguarda i permessi, inseriva un tab nella sezione delle impostazioni dell'utente; nulla da dire sul tab, se non che portava ad una pagina senza testo a causa dei permessi restrittivi. Due soluzioni: patchare il modulo oppure nascondere il tab via css. E se al posto di nasconderlo lo togliessimo dai tab visualizzati ? Ecco come.

Il modulo in questione si chiama “Twitter” e permette di associare l'account twitter dell'utente ai nuovi contenuti scritti dallo stesso utente, così che ogni nuovo contenuto sia pubblicizzato anche su questo social. Oltre a questo è possibile associare un account twitter generico e far si che tutti i contenuti siano pubblicizzati utilizzando questo account. Il problema di questa impostazione è quello descritto nell'apertura di questo post: viene creato un tab dal titolo “Twitter” che pero' porta ad una pagina senza contenuto.

Per toglierlo abbiamo due soluzioni: lo nascondiamo via CSS oppure lo eliminiamo dalla lista dei tab. La prima soluzione non è così semplice come si possa credere (se non sai dove mettere le mani) e richiede la conoscenza dei fogli di stile, nonché come modificare il file .info del nostro tema in uso.

La seconda si avvale dell'uso del file template.php, di un hook di drupal e di una funzione creata ad-hoc. Sembra più complicata ma non lo è.

Prima di tutto apriamo il file template.php del nostro tema (che chiameremo zb_001); se non avete tale file createlo con un editor di testi; spostatevi alla fine del file e copiate questo pezzo di codice:

 
function _zb_001_removetab($label, &$vars) { 
  $tabs = explode("\n", $vars['tabs']); 
  $vars['tabs'] = ''; 

  foreach ($tabs as $tab) { 
    if (strpos($tab, '>' . $label . '<') === FALSE) { 
      $vars['tabs'] .= $tab . "\n"; 
    } 
  } 
}

Il suo funzionamento è molto semplice, non penso di doverlo spiegare, ma c'è un punto fermo su cui si basa tutto: ogni tabs corrisponde ad una riga html, ed ecco il perché della divisione tramite “\n”. 

Ora, sempre all'interno di questo file cercate la funzione zb_001_preprocess_page. Se non esiste createla voi, e verso la fine della funzione scrivete:

  _zb_001_removetab('Twitter',$vars);  

Abbiamo così tolto il tab “Twitter” da tutte le pagine. Questa operazione, seppur semplice, richiede comunque dei cicli macchina che impattano sulle performance del sito web se questo è molto trafficato. Vediamo di migliorare un po' questo pezzo di codice: sappiamo che questo tab compare solamente quando stiamo editando il profilo di un utente, il che vuole dire avere un path simile a “/user/{UID}/edit” dove {UID} è l'user identification dell'utente che stiamo editando; quello che ci serve è un semplicissimo IF prima del richiamo della funzione:

 

if (arg(0) == 'user' && arg(2) == 'edit' && $_GLOBALS['user']->uid > 1) { 
    _zb_001_removetab('Twitter',$vars); 
}

L'ultimo controllo è dedicato all'utente super amministratore che deve poter vedere tutto.

Come vedete riuscire ad eliminare un tab non è così complicato come potrebbe sembrare, non richiede ne' la creazione ne' la modifica di un modulo, ma solo poche righe di codice PHP. Attenzione: l'url a cui puntava il tab che abbiamo tolto è comunque ancora raggiungibile; non pensiate di nascondere una sezione di amministrazione eliminando solamente un tab, sia ben chiaro. Le operazioni da fare sono altre.

Trackback URL for this post:

http://www.ziodrupal.net/trackback/1181