Tronquer les descriptions d'un flux rss sous magpierss ?

WRInaute accro
Code:
	function truncate($string, $max, $rep = '...') {
		$stringlength = strlen($string);
		$string = $string." ";
		$string = substr($string,0,$max);
		$string = substr($string,0,strrpos($string,' '));
		if($stringlength > $max)
			$string = $string.$rep;
	
		return $string;
	}
 
WRInaute discret
Salut à vous,

Et merci pour ces réponses, le problemo, c'est que je ne sais pas du tout où placer ces bouts de code...

Est-ce que ça se joue dans cette partie :
Code:
function normalize () {
        // if atom populate rss fields
        if ( $this->is_atom() ) {
            $this->channel['description'] = $this->channel['tagline'];
            for ( $i = 0; $i < count($this->items); $i++) {
                $item = $this->items[$i];
                if ( isset($item['summary']) )
                    $item['description'] = $item['summary'];
                if ( isset($item['atom_content']))
                    $item['content']['encoded'] = $item['atom_content'];
                
                $atom_date = (isset($item['issued']) ) ? $item['issued'] : $item['modified'];
                if ( $atom_date ) {
                    $epoch = @parse_w3cdtf($atom_date);
                    if ($epoch and $epoch > 0) {
                        $item['date_timestamp'] = $epoch;
                    }
                }
                
                $this->items[$i] = $item;
            }       
        }
        elseif ( $this->is_rss() ) {
            $this->channel['tagline'] = $this->channel['description'];
            for ( $i = 0; $i < count($this->items); $i++) {
                $item = $this->items[$i];
                if ( isset($item['description']))
                    $item['summary'] = $item['description'];
                if ( isset($item['content']['encoded'] ) )
                    $item['atom_content'] = $item['content']['encoded'];
                
                if ( $this->is_rss() == '1.0' and isset($item['dc']['date']) ) {
                    $epoch = @parse_w3cdtf($item['dc']['date']);
                    if ($epoch and $epoch > 0) {
                        $item['date_timestamp'] = $epoch;
                    }
                }
                elseif ( isset($item['pubdate']) ) {
                    $epoch = @strtotime($item['pubdate']);
                    if ($epoch > 0) {
                        $item['date_timestamp'] = $epoch;
                    }
                }
                
                $this->items[$i] = $item;
            }
        }
    }
 
WRInaute accro
C'est pas vraiment comme l'exemple de WRI (FeedParser)
Code:
if ( isset($item['description']))
                    $item['summary'] = $item['description'];

A remplacer par:
Code:
if ( isset($item['description'])){
                    $item['description'] = truncate($item['description'], 200, '...');
                    $item['summary'] = $item['description'];
}

Pas sûr mais à essayer
 
WRInaute discret
Salut,

Exact, car je suis allé chercher ce code dans /magpierss/rss_parse.inc
J'ai bien le feedparser.php mais après avoir essayé différentes choses dessus (un peu à l'aveugle), je me suis dis que ça se jouait ailleurs...

Code:
<?php
// inclusion de la classe magpierss
require_once("magpierss/rss_fetch.inc");

function FeedParser($url_feed, $nb_items_affiches=10)
{
  // lecture du fichier distant (flux XML)
  $rss = fetch_rss($url_feed);

  // si la lecture s'est bien passee,
  // on lit les elements
  if (is_array($rss->items))
  {
   // on ne recupere que les elements les + recents
   $items = array_slice($rss->items,
    0, $nb_items_affiches);

   // debut de la liste
   // (vous pouvez indiquer un style CSS
   // pour la formater)
   $html = "<br />\n";

   // boucle sur tous les elements
   foreach ($items as $item)
   {
$html .= "<a target=\"_blank\" href=\"".$item['link']."\">";
    $html .= $item['title']."</a><br />\n";
    $html .= $item['description']."</a><br /><br />\n";

   }
   $html .= "<br />\n";
 }

 // retourne le code HTML a inclure dans la page
 return $html;
}
?>

J'ai bien essayé ton code mais cela n'a rien changé apparemment.
Merci de toute solution.
 
WRInaute accro
Code:
<?php
// inclusion de la classe magpierss
require_once("magpierss/rss_fetch.inc");

function FeedParser($url_feed, $nb_items_affiches=10)
{
  // lecture du fichier distant (flux XML)
  $rss = fetch_rss($url_feed);

  // si la lecture s'est bien passee,
  // on lit les elements
  if (is_array($rss->items))
  {
   // on ne recupere que les elements les + recents
   $items = array_slice($rss->items,
    0, $nb_items_affiches);

   // debut de la liste
   // (vous pouvez indiquer un style CSS
   // pour la formater)
   $html = "<br />\n";

   // boucle sur tous les elements
   foreach ($items as $item)
   {
$html .= "<a target=\"_blank\" href=\"".$item['link']."\">";
    $html .= $item['title']."</a><br />\n";
    $html .= truncate($item['description'], 200, '...')."</a><br /><br />\n";

   }
   $html .= "<br />\n";
 }

 // retourne le code HTML a inclure dans la page
 return $html;
}
?>

Et comme ceci? (truncate dans le foreach)
 
WRInaute discret
Salut,

Merci encore... mais j'ai une erreur :
Fatal error: Call to undefined function: truncate() in /www/actualite/feedparser.php on line 28
 
WRInaute discret
Salut,

Ok spout, merci mais finalement, voici une solution qui marche, je la poste pour ceux qui passeront par ici par la suite :

Code:
 $html .= $item['description']."</a><br /><br />\n";
à remplacer par
Code:
 $html .= substr($item['description'],0,100)."...<br /><br />\n";
 
WRInaute accro
Je pense que vu que la variable que tu tronques peut contenir du HTML, il vaut peut-être mieux faire un strip_tags dessus avant de tronquer.
 
Discussions similaires
Haut