Un blocco per la tassonomia di Drupal

Dom, 02/03/2008 - 14:34

Drupal logoVisto che preparando il blog ho deciso di utilizzare sia i tags che le categorie, così come indicato in questo post, mi sono posto il problema di come rendere fruibili i contenuti, agevolando la navigazione fra i termini di entrambi i vocabolari.
Per i tags la vita viene facilitata dal modulo Tagadelic, ma per il mio secondo vocabolario non sono riuscito a trovare nulla che soddisfacesse le mie esigenze.
Mi interessava un blocco in perfetto blog-style, con il conteggio dei post per categoria e il link al feed rss, ma dopo un paio di giorni di ricerche vane fra i moduli per Drupal sono giunto a concludere che era meglio arrangiarsi da soli.
Naturalmente per uno che con il php ci fa più che altro a pugni la cosa è tutt'altro che semplice.
I risultati però arrivano a volte anche per i praticoni e nel mio caso si possono ammirare in tutto lo splendore del blocco Canali. Riporto di seguito i passaggi necessari a replicarlo, sperando che possa venir utile a qualcuno e/o che qualche lettore esperto di php mi possa dare suggerimenti su come migliorarlo.

Riferimenti

Per realizzare il blocco ho fatto riferimento alle seguenti risorse:

  • il modulo Taxonomy dhtml, in particolare la funzione function taxonomy_dhtml_block;
  • lo script per generare un riassunto dei feeds rss proposto da Mavimo.

Mi sono limitato a prelevare le parti di codice che mi interessavano e ad apportare alcune piccolissime modifiche.

Ma passiamo alla fase operativa: entriamo nelle funzioni di amministrazione del nostro sito e aggiungiamo un nuovo blocco con /admin/build/block/add; spuntiamo Php code come formato di input e copiamo nel corpo del blocco il codice riportato di seguito:

<? 

  $vid = 2;
  $tree = taxonomy_get_tree($vid, 0, 0, 2);
  $image = '<img src="/misc/feed.png" alt="icona del feed RSS" align="right" />';

  foreach ($tree as $term) {
    $url = "taxonomy/term/$term->tid";
    $url2 = "taxonomy/term/$term->tid/0/feed";

    $feed = l(t($image), $url2, array(), NULL, NULL, FALSE, TRUE);
    $link = l(t($term->name), $url, array("title" => t($term->description)));
   

    $out .= "<ul><li>$feed $link";
    $count = taxonomy_term_count_nodes($term->tid);
    if ($count) {
      $out .= " ($count)";
    }
    $out .= "</li></ul>";
   
  }
  return $out;

?>

Ora, per prima cosa un paio di annotazioni: la variabile $vid richiama il numero identificativo del vocabolario che portiamo alla visualizzazione nel blocco e va pertanto modificata verificando la numerazione del vocabolario che ci interessa richiamare. La variabile $image visualizza invece l'icona del feed presente di default nella directory misc di Drupal: se vogliamo ne possiamo caricare un'altra e modificare l'url riportato nel nostro codice.

Fatte le mofiche opportune salviamo il nostro blocco e lo portiamo in visualizzazione. Adesso abbiamo un bell'elenco con i links alle pagine delle categorie, un contatore di post per ogni termine e i links ai feeds rss.

Naturalmente possiamo anche controllare la formattazione del nostro blocco utilizzando i Css. Apriamo il nostro file style.css e inseriamo il seguente codice:

#block-block-3 li {
background: url(images/folder.png) no-repeat left top;
padding-left: 22px;
}

Anche qui due annotazioni: dobbiamo verificare il numero identificativo del blocco che abbiamo creato e richiamarlo nel nostro foglio di stile (nel codice proposto sopra è il blocco 3, da modificare con l'identificativo interessato); nella cartella images del nostro tema dobbiamo caricare l'icona che che viene visualizzata nel blocco (in questo caso folder.png).

Canali:

commenti

  1. mbaro Says:

    Avevo pensato a views, ma avrei finito per installarlo solo per questo blocco, perchè per il resto (immagini a parte) faccio un uso piuttosto leggero di drupal.

    Grazie per il commento e per il supporto, s'intende ;)

    ***io non centro***

  2. Andrea@BV (non verificato) Says:

    Interessante guida, io non ci sarei mai arrivato, ho sempre usato un blocco fatto con le Views :)

    Grazie per avermi citato nei credits, sempre a disposizione! ;)

  3. Invia nuovo commento

    Il contenuto di questo campo è privato e non verrà mostrato pubblicamente.
    • Indirizzi web o e-mail vengono trasformati in link automaticamente
    • Allowed HTML tags: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd>
    • Linee e paragrafi vanno a capo automaticamente.

    Maggiori informazioni sulle opzioni di formattazione.

    CAPTCHA
    Questa domanda serve per prevenire l'inserimento di spam automatico
    2 + 6 =
    Risolvi questa semplice addizione e inserisci il risultato.

Site powered by Drupal&Drupalitalia | Theme based on Glossyblue.