Temi

In questa sezione vengono raccolte le più comuni domande sui temi di drupal, nella sezione si cerca di comprire tutti gli argomenti: reperimento, installazione e modifica.

Dove posso trovare temi (template) per Drupal?

Ecco alcuni siti interessanti dove trovare temi grafici per Drupal:

Temi singoli

Tema: Aggiungere Avanti e Indietro alle foto delle gallerie di IMAGE.

Obbiettivo:
Aggiungere i pulsanti di navigazione alle foto delle gallerie create con Image o Image_import e modificare la pagina standard con le anteprime piccole.

Requisiti:
1) Aver installato correttamente il modulo image.
2) Aver installato correttamente php engine.
3) Utilizzare un tema che utilizzi phptemplate (es. blumarine in versione phptemplate, NON la versione standard).

Introduzione:

Utilizzando il motore phptemplate è possibile senza modificare il tema o il modulo personalizzare tutte le pagine generate da drupal.
Questo tipo di personalizzazione ci consente di modificare pesantemente l'interfaccia lasciandoci la possibilita di possibili aggiornamenti di drupal poichè le modifiche provengono da file esterni.
Il motore phptemplate quando genera un pagina "nodo" controlla che per la suddetta pagina nodo esista un file contenente una paricolare output per il nodo, in caso contrario applica il template di defaultg.In sostanza il motore quando genera una pagina "image" cerca un template per la pagina Image.
I file che cerca il motore nella cartella del tema devono avere un nome preciso:

nodeg-[tipo di nodo].tpl.php

Per sapere il nome esatto del tipo di nodo gurda dentro la tabella node nella colonna type del nodo di cui vuoi modificare l'output.

Vediamo in questo caso come aggiungere i pulsanti di navigazione al modulo Image.

Passo 1
Creo il file template.php e lo copio nella cartella principale del tema che stiamo personalizzando.
Questo file contiene le funzioni da invocare nelle script che creano le pagine.
Nel nostro caso ho messo nel file un Wrapper per la pagina della galleria e le funzioni necessarie a calcolare la pagina precedente e quella successiva nelle pagina foto.

Passo 2
Creo il file node-image.tpl.php e lo copio nella cartella principale del tema che stiamo personalizzando.
Questo file rappresenta tutto il codice che generare la pagina con la foto. (nodo image)
Il motore phptemplate quando genera un pagina "nodo" controlla che per il suddetto tipo ci sia un file node-[tipo di nodo].tpl.php e usa quello per definire l'aspetto del nodo.

Passo 3
Creo il file image_gallery.tpl.php e lo copio nella cartella principale del tema che stiamo personalizzando.
Questo file rappresenta tutto il codice che generare la pagina delle anteprime.
In questo caso per esempio la pagina non mostra il nome del file (riga commentata)ed inoltre mostra un piccolo avviso per gli utenti.

Bene a questo punto dovrebbe essere tutto ok; La pagina delle anteprime dovrebbe avere alcune righe di commento sopra e sotto e non dovrebbe mostrare il nome dei file. Inoltre nalla pagina relativa alla foto dovrebbero esserci i pulsanti avanti e indietro.

Documentazione:

http://drupal.org/node/45050
http://drupal.org/node/41257

Uccio

File image_gallery.tpl.php

Dentro questo file devi metterci la parte di codice che genera la pagina delle anteprime.

Copia dal modulo image la parte di codice che inizia con:

/**
* Theme a gallery page
*/
  function theme_image_gallery($galleries, $images) {//escludendo questa riga

e finisce:

  return $content;
}

/**
* Fetch a random N image(s) - optionally from a given term.
*/

Ovvero nel modulo per drupal 4.6.5. le righe da 513-570

Ricorda che il file che stai creando è codice php quindi non dimenticarti i tagg php

Ciao Uccio

File node-image.tpl.php

Contenuto del file nodeg-image.tpl.php

<div class="node <?php print ($sticky) ? " sticky" : ""; ?> ">
   <?php if ($page == 0): ?>
    <h2><a href="/dr474/ <?php print $node_url ?> " title=" <?php print $title ?> "> <?php print $title ?> </a></h2>
   <?php endif; ?>
   <?php print $$terms ?>
   <?php print $picture ?>
  <div class="info"> <?php print $submitted ?> <span class="terms"> <?php print $terms ?> </span></div>
  <div class="content">
     <?php print $content ?>
  </div>
<?php if ($links): ?>
     <?php if ($picture): ?>
      <br class='clear' />
     <?php endif; ?>
    <div class="links"> <?php print $links ?> </div>
<?php endif; ?>
<div class="book"><div class="nav"> <div class="links">
<?php
  $next
= next_prev($node->nid, 'image', 'next', 'Successiva', 'next');
 
$previous = next_prev($node->nid, 'image', 'prev', 'Precedente', 'prev');
  echo
$previous;
  echo
$next;
?>

File template.php

Questo è il contenuto del file template.php.

<?php
function phptemplate_image_gallery($galleries, $images) {
  return
_phptemplate_callback('image_gallery', array('galleries' => $galleries, 'images' => $images));
  }

function
next_prev($current_nid, $type, $btn_type, $label, $class) {
  
$query = db_query("SELECT tid FROM {term_node} WHERE nid = $current_nid;");
  
$tid = db_result($query);
  
$sql = "SELECT n.nid, n.title FROM {node} n INNER JOIN {term_node} t ON n.nid = t.nid ";
  
$sql .= "INNER JOIN {term_data} r ON t.tid = r.tid WHERE n.type = '".$type."' AND n.nid ";
   switch (
$btn_type) {
        case
"next":
               
$sql .= "< ";
                break;
        case
"prev":
               
$sql .= "> ";
                break;
        default:
                return
NULL;
                break;
   }
  
$sql .= $current_nid ." AND r.tid = ". $tid ." AND n.status = 1 ORDER BY nid DESC;";
  
$query = db_query($sql);
  
$result = db_fetch_array($query);
   if (!
$result) {
       
$query = db_query("SELECT name FROM {term_data} WHERE tid = $tid;");
       
$name = db_result($query);
     return
l("Ritorna a $name", "$type/tid/$tid", array("title" => $name, "class" => $class));
   } else {
     return
l($label, "node/".$result['nid'], array("title" => $label, "class" => $class));
   }
}
?>