Generare feed RSS

 

A volte capita di dover generare pagine contenenti tutti i feed rss che possono essere estratti da un determinato vocabolario, per fare questo esiste un modulo apposito, si chiama syndication, che però ha dei limiti, innanzitutto non indenta correttamente i vari feed delle voci gerarchizzate, non inserisce l'icona del feed affianco alle rispettive voci, non genera i feed di termini che non hanno contenuti, .... Tutto questo potrebbe essere sistemato agendo sul codice del modulo (lo farò e invierò la patch), ma è altrettanto possibile farlo senza utilizzare alcun modulo ma generando una semplice pagina con codice PHP. Vediamo come proseguire in questa direzione.

Prima di tutto creiamo una nuova pagina e scegliamo, per questo contenuto, come formato di input PHP Code. Ora all'interno della pagina andiamo ad inserire il seguente codice:

<?php
$vid
= 4;
$main = taxonomy_get_tree($vid, 0, 0, 2);
$items = array();
$image = '&lt;img src="/misc/feed.png" alt="icona del feed RSS" width="16" height="16" /&gt;';
foreach(
$main as $i => $item) {
 
$tid = $main[$i]->tid;
 
$main2 = taxonomy_get_children($tid);
 
// print_r($main2);
 
$items2 = array();
  foreach(
$main2 as $j => $item) {
   
$items2[$j] = l( $image . '<span>' . $main2[$j]->name . '</span>', 'taxonomy/term/'. $main2[$j]->tid . '/0/feed', array(), NULL, NULL, FALSE, TRUE);
   
$items2[$j] .= '<p>' . $main2[$j]->description . '</p>';
  }
 
$items[$i] = l($image . '<span>' . $main[$i]->name . '</span>', 'taxonomy/term/'. $main[$i]->tid . '/0/feed', array(), NULL, NULL, FALSE, TRUE);
 
$items[$i] .= '<p>' . $main[$i]->description . '</p>';
 
$items[$i] .= theme('item_list', $items2);
  unset(
$items2);
}
print
theme('item_list', $items, NULL, 'ul', array('class' => 'feedlist'));
?>

Andiamo ora a "configurare" questo piccolo script, andando a mettere, come prima cosa il numero del vocabolario di cui vogliamo andare a generare l'albero dei feed alla variabile $vid, ed impostiamo all'interno della variabile $image il codice HTML che vogliamo andare ad utilizzare come immagine del feed da inserire. Per ora ho utilizzato semplicemente l'immagine dei feed standard che si trova all'interno dell'installazione di Drupal, ma ciò non toglie che potete personalizzarla scegliendone di altre o rimuovendola.

A questo punto vi troverete con l'albero dei feed associati ai vari termini del vostro vocabolario gerarchizzato nella pagina che avete indicato; per ogni termine, se avete associato ad essi una descrizione, questa sarà visualizzata nella pagina subito dopo l'immagine e il nome del feed.

Un esempio del risultato ottenibile è il seguente:

NB: i feed elencati qui sopra non esistono!

Ovviamente possiamo poi intervenire sui CSS per modificare lo stile in cui questo vien presentato.

Note

Attualmente questo script prevede una conoscenza minima del codice PHP per poter essere configurato e utilizzato, genera solamente l'elenco dei termini e sei sottotermini, ma è facilmente espandibile al numero di livelli che si vuole ottenere. Successivamente verrà perfezionato per avere una maggiore stabilità ed espandibilità.

Commenti

Ritratto di Anonimo

Ho fatto la correzzione al

Ho fatto la correzzione al secondo codice per Drupal 6... come indicato... ma mi appaiono i tag HTML in chiaro e non vengono eseguiti... così:

<ul>
<li>Argomento1 (2)</li>
<li>Argomento12 (35)</li>
</ul>

Come mai stampa i tag invece di interpretarli?

Ciao

Ritratto di mavimo

Che altri moduli hai

Che altri moduli hai installato? Hai fatto modifiche all template.php del tuo tema? Lo script funziona correttamente, quindi deve esserci qualceh cosa nel tuo sistema che va in conflitto..

Ritratto di Anonimo

Ti ringrazio. Sostitutendo

Ti ringrazio. Sostitutendo la riga così come mi hai mostrato, funziona.

Occorre però fare un'ulteriore piccola modifica, riguardante il path dell'immagine. Ho drupal in locale e l'ho installato in una sottocartella di htdocs di XAMPP.

Affinchè l'immagine venga visualizzata devo aggiungere, nel path, il nome della cartella in cui ho installato il cms:"/misc/feed.png" diventa "/folderincuihoinstallatodrupal/misc/feed.png"Ne approfitto per chiederti ancora una cosina.

Avendo questo snippet:

<?php
  $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 .= "&lt;ul>&lt;li>$feed $link";
   
$count = taxonomy_term_count_nodes($term->tid);
    if (
$count) {
     
$out .= " ($count)";
    }
   
$out .= "&lt;/li>&lt;/ul>";
  }
  return
$out;
?>

..come dovrei effettuare la modifica, sulla base di ciò che mi hai già detto? Grazie ancora.

PS: non so perchè ma non sono riuscito a far visualizzare correttamente lo snippet nei tag <code> </code>.

Ritratto di mavimo

Ti consiglio di dare un

Ti consiglio di dare un occhio alla documentazione ufficiale, e in particolare della funzione l alle pagine:

per vedere le differenze nell'uso della funzione l tra D5 e D6, con l'esempio di prima sottomano non dovrebbe essere complesso da trasformare.

PS: per la formattazione te l'ho sistemato io.

Ritratto di Anonimo

Problemino

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.

Ritratto di mavimo

Questo script è valido per

Questo script è valido per Drupal 5, Drupal 6 cambia leggermente la gestione di alcune API, prova a vedere, la linea incriminata dovrebbe essere:

<?php
$items
[$i] = l($image . '' . $main[$i]->name . '', 'taxonomy/term/'. $main[$i]->tid . '/0/feed', array(), NULL, NULL, FALSE, TRUE);
?>

che dovrebbe diventare:

<?php
$items
[$i] = l($image . '' . $main[$i]->name . '', 'taxonomy/term/'. $main[$i]->tid . '/0/feed', array('html' => true));
?>

Cambiato questo dovrebbe andare tutto.

Invia nuovo commento





  • Elementi HTML permessi: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd> <img> <h2> <h3> <h4>
  • You may post code using <code>...</code> (generic) or <?php ... ?> (highlighted PHP) tags.
  • Linee e paragrafi vanno a capo automaticamente.
  • Indirizzi web o e-mail vengono trasformati in link automaticamente

Maggiori informazioni sulle opzioni di formattazione.



Condividi contenuti