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:

    Il problema posto sull'icona del file rss riguarda la versione di drupal in uso. La soluzione viene prososta da Mavimo sul suo sito.

    ***io non centro***

  2. mbaro Says:

    Intanto ti suggerirei di ricontrollare il codice, che spesso copiaincollando salta qualcosa.

    ***io non centro***

  3. Anonimo (non verificato) Says:

    Ciao,
    ho provato ad utilizzare lo snippet che proponi ma, non so per quale motivo, la feed icon non mi appare.

    Le categorie vengono visualizzate correttamente ma sono precedute dai caratteri rappresentanti il codice HTML relativo all'immagine.

    E' come se drupal vedesse il tag IMG come un testo da stampare a video. Come detto, infatti, sulla pagina mi viene visualizzato il codice HTML e non la "traduzione" del markup nell'icona dei feed.

    Quale potrebbe essere il problema?

    Ho installato Drupal 6.4, attivato PHP Filter e provato a smanettare in tutti i modi con le configurazioni di quest'ultimo (anche impostando il tag IMG tra quelli consentiti)

    Grazie in anticipo.

  4. Mavimo (non verificato) Says:

    Ovviamente grazie per la citazione nei credit anche da parte mia :D

  5. 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***

  6. 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! ;)

  7. 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
    5 + 2 =
    Risolvi questa semplice addizione e inserisci il risultato.

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