Snippet - Previous/Next Link Node

1 contenuto / 0 new
Snippet - Previous/Next Link Node

Come il titolo suggerisce in questo tutorial descrivo come inserire i classici link "Previous Post" o "Next Post" che solitamente si trovano nei blog. Per esempio un CMS come Wordpress ha un apposita funzione che stampa questi link nel tema, invece lavorando in Drupal la cosa bisogna "inventarsela" perchè quest'ultimo non è pensato per usarlo solo nei blog.

Introduzione
La soluzione mi è stata suggerita da questo link, ma ho dovuto fare alcune modifiche per risolvere un ulteriore problema durante l'ultimo lavoro di cui mi sto occupando e soprattutto ho dovuto modificare il codice per poterlo utilizzare in modo più corretto all'interno dei file di Drupal.

Prima di continuare il tutorial vi informo che esiste comunque un modulo che fà essenzialmente la stessa cosa raggiungibile attraverso link. Non l'ho testato, ma a quanto pare offre prestazioni più elevate rispetto al metodo proposto di seguito.

Tutorial

    Problemi:
  • Inserire, come mostra l'immagine, link "Previous Post/Next Post" all'interno di un nodo;
  • Questi link devono essere inseriti, come mi è stato cheisto dalle indicazioni dei mockup, sotto il titolo del nodo e sotto il form dei commenti. Nel primo caso si ha pochi problemi, invece nella seconda richiesta le cose si complicano, ma niente paura ho trovato una soluzione;

Soluzione:
Inserire il codice mostrato di seguito in temlate.php del vostro tema, ovviamente potreste anche crearci un modulino apposito rinominando secondo le regole degli Hook_Preprocess_* di Drupal. Fate voi.
mytheme_preprocess_node(){}

<?php
function myTheme_preprocess_node(&$vars, $hook) {
  switch(
$vars['node']->type){
    case
'nodeType':
      if(
$vars['node']->body) {
     
$resultn = db_query("SELECT nid, title FROM {node} WHERE created > '%d' AND status=1 and promote=1 AND type='%s' ORDER BY created ASC LIMIT 1", $vars['node']->created, $vars['node']->type);
     
$vars['nextvars'] = db_fetch_object($resultn);
        if(
$vars['nextvars'] != ''){
        
$vars['next_node'] = l('Next Post &#187;','node/' . $vars['nextvars']->nid, array('html'=>true));
        
$vars['node']->next_node = $vars['next_node'];
        }
     
$resultp = db_query("SELECT nid, title FROM {node} WHERE created < '%d' AND status=1 and promote=1 AND type='%s' ORDER BY created DESC LIMIT 1", $vars['node']->created, $vars['node']->type);
     
$vars['prevvars'] = db_fetch_object($resultp);
        if(
$vars['prevvars'] != ''){
         
$vars['prev_node'] = l('&#171; Previous Post','node/' . $vars['prevvars']->nid, array('html'=>true));
         
$vars['node']->prev_node= $vars['prev_node'];
        }
      }
    break;
  }
}
?>

phptemplate_preprocess_page(){}

<?php
function phptemplate_preprocess_page(&$vars) {
  switch(
$vars['node']->type){
    case
'nodeType':
      if(
$vars['node']->body) {
       
$vars['next_node'] = $vars['node']->next_node;
       
$vars['prev_node'] = $vars['node']->prev_node;
      }
    break;
  }
}
?>

node.tpl.php e page.tpl.php
A questo punto potete usare in entrambi i file citati le variabili $next_node e $prev_node per visualizzare i link come nell'immagine. Qualcuno si chiederà senza dubbio perchè abbiamo permesso l'uso delle variabili anche in Page.tpl.php? La motivazione può risiedere in questioni tecniche legate al posizionamento dei link in luoghi della pagina non renderizzati da node.tpl, come per esempio viene mostrato nell'immagine, la possibilità di inserirle dopo il form per commentare il nodo.