You are here

Drupal : template_preprocess_page hook o API ?

Inviato da giovanninews on Lun, 06/02/2012 - 19:04

template_preprocess_page è un hook o API per Drupal Andando avanti con Drupal trovo che questo cms mi stupisce sempre di più. Come semplice utilizzatore mi accorgo che ciò che maggiormente mi manca sono le basi.

Drupal , come forse tutti gli altri cms open source , permette di configurare il proprio sito web fin nei minimi dettagli; per questo, dopo essersi soffermati sull' uso di moduli aggiuntivi per Drupal, è necessario andare un pò più in là, magari cercando di capirne un pò più il funzionamento.

Le informazioni possibili che troviamo su Drupal sono tantissime, direi quasi infinite, ed i punti di riferimento sono sempre Drupal.org come riferimento internazionale, i vari forum nazionali e la rete, che con i vari siti personali, è sempre una risorsa insostituibile.

Dal punto di vista dello sviluppo con Drupal si parla di " hook " e di API; gli " hook " o ganci, si, proprio come capitan uncino, e le API sono un qualcosa che permettono l' espansione di Drupal .

Personalmente non ho ancora capito la differenza tra hook ed API in Drupal ; i più studiosi possono andare a questa pagina di Drupal dove troveranno la lista e le infinite spiegazioni sulle API di Drupal (o anche " hook " ?). Qualcuno ha provato a spiegarmi che tra API ed hook in Drupal vi è una notevole differenza, ma io, sinceramente, non l' ho ancora capita.

Mi manca tanto John Leach. John, dove sei finito ? Ogni volta che rileggo qualcosa di John, mi accorgo che ogni cosa che ha lasciato nasconde una ricchezza di informazioni incredibile e ci ha lasciato molto da imparare.

Da questo articolo di John inerente alla creazione di un template, nasce la mia scoperta di un hook o API di Drupal che mi ha permesso di migliorare l' indicizzazione del mio sito web al fine di eliminare i contenuti duplicati in Drupal .

Nella fase di creazione del template per Drupal , John lascia commentata nel template.php una riga per l' override o l' inserimento di variabili per il page.tpl.php. Da qui si capisce che Drupal , tra le tante cose che fa, esegue dei passi sequenzali; Drupal per visualizzare un nodo (o una url o una pagina) agli utenti (ed ai motori di ricerca) esegue prima il file template.php e poi il file page.tpl.php.

Un " hook " o una API di Drupal (ripeto, non so la differenza), permette di intercettare delle variabili sul template.php e di trasferirle, magari modificate o con più informazioni, al page.tpl.php.

Nei miei precedenti articoli sui contenuti duplicati interni in un sito Drupal , ho parlato di come eliminare questi duplicati interni con moduli aggiuntivi Drupal .

Nel 2011, con l' introduzione anche in Italia di Google Panda, Google tende a promuovere siti web di qualità; i contenuti duplicati sono tra i fattori che più negativamente incidono nella definizione dei siti web di qualità.

Drupal , ma qualsiasi altro cms, genera contenuti duplicati per tag e categorie, ma anche per moduli e/o percorsi di sistema. Con Drupal è possibile eliminare la maggioranza dei contenuti duplicati interni con alcuni moduli aggiuntivi; per eliminarli del tutto è necessario a volte agire a livello di codice e gli " hook " o le API servono anche a questo.

La view "Archivio mensile" che raggruppa le nostre pagine web per i contenuti mensili pubblicati genera pagine che "potrebbero" essere contenuti duplicati in quanto raggruppano anteprime di nodi (già pubblicati ed indicizzati); per questo sito web esistono circa 60 pagine indicizzate come /archive/mese... e per toglierle dall' indice di Google, ma anche degli altri motori di ricerca, è necessario aggiungere a queste pagine il meta name="robots" content="noindex" .

Per fare questo non si fa con i moduli aggiuntivi, ma si fa da codice utilizzando l ' " hook " o API template_preprocess_page . Il contenuto dell' array arg , per la modifica della sezione HEAD e l' inserimento del meta name, non può essere testato in node.tpl.php in quanto questo è restituito nella sezione BODY, quindi dopo la pubblicazione della sezione HEAD.

E' necessario quindi testare la variabile prima della pubblicazione del nodo (pagina) nel template.php con l' " hook " o API Drupal template_preprocess_page ed assegnare qui il meta name da passare alla sezione HEAD di node.tpl.php.

L' " hook " o API di Drupal va dichiarato in template.php e l' array testato e valorizzato. Di seguito la mia implementazione in template.php :

function mytheme_preprocess_page(&$vars) {  if (arg(0) == 'archive') {  $vars['head'] = drupal_set_html_head('<meta name="robots" content="noindex" />');  } }

il termine mytheme va cambiato con il nome del tema o sottotema utilizzato.
In pratica se l' array arg(0) contiene "archive" che è il percorso della mia view degli articoli per mese, nella variabile HEAD viene aggiunto il meta name indicato che sarà quindi visualizzato nella sezione HEAD della pagina web.

Ho implementato questo hook (?) un paio di giorni fa; le mie pagine con il percorso /archive/ dovrebbero a breve sparire dall' indice di Google. Spero di aver dato con semplicità qualche indicazione in più sul template_preprocess_page di Drupal e su " hook " ed API in generale.

Aggiornamento del 17/02/2012

Con l' aggiornamento del modulo Nodewords alla versione 6.x-1.13 , se andato a buon fine, è possibile aggiungere il robot noindex anche ai percorsi di sistema. L' hook indicato non è quindi più necessario per chi usa la nuova versione del modulo Nodewords.

<< Pagina precedente