Tronquer les descriptions d'un flux rss sous magpierss ?

Ectorio
WRInaute discret
WRInaute discret
 
Messages: 84
Inscription: 9 Aoû 2009

Tronquer les descriptions d'un flux rss sous magpierss ?

Message le Dim Aoû 30, 2009 1:52

Salut,

Pour afficher un mix de quelques flux, j'utilise magpierss de la même manière que le tuto suivant de WRI : http://www.webrankinfo.com/dossiers/webmastering/integrer-un-flux-rss

Cependant, je me demandais comment faire pour tronquer les descriptions car elles sont parfois énormes...
Etant limité en développement, est-ce que quelqu'un connait la solution ici ?
Merci.


Monty973
WRInaute passionné
WRInaute passionné
 
Messages: 1636
Inscription: 21 Mar 2006

Re: Tronquer les descriptions d'un flux rss sous magpierss ?

Message le Dim Aoû 30, 2009 5:06

Code: Tout sélectionner
$descriptionCourte = substr($description,0,nombre_de_caracteres_a_afficher);


http://fr2.php.net/manual/fr/function.substr.php


spout
WRInaute accro
WRInaute accro
 
Messages: 4382
Inscription: 14 Mai 2003

Re: Tronquer les descriptions d'un flux rss sous magpierss ?

Message le Dim Aoû 30, 2009 11:35

Code: Tout sélectionner
   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;
   }

Ectorio
WRInaute discret
WRInaute discret
 
Messages: 84
Inscription: 9 Aoû 2009

Re: Tronquer les descriptions d'un flux rss sous magpierss ?

Message le Dim Aoû 30, 2009 16:59

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: Tout sélectionner
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;
            }
        }
    }


spout
WRInaute accro
WRInaute accro
 
Messages: 4382
Inscription: 14 Mai 2003

Re: Tronquer les descriptions d'un flux rss sous magpierss ?

Message le Dim Aoû 30, 2009 20:52

C'est pas vraiment comme l'exemple de WRI (FeedParser)
Code: Tout sélectionner
if ( isset($item['description']))
                    $item['summary'] = $item['description'];


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


Pas sûr mais à essayer

Ectorio
WRInaute discret
WRInaute discret
 
Messages: 84
Inscription: 9 Aoû 2009

Re: Tronquer les descriptions d'un flux rss sous magpierss ?

Message le Dim Aoû 30, 2009 23:02

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: Tout sélectionner
<?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.


spout
WRInaute accro
WRInaute accro
 
Messages: 4382
Inscription: 14 Mai 2003

Re: Tronquer les descriptions d'un flux rss sous magpierss ?

Message le Lun Aoû 31, 2009 6:55

Code: Tout sélectionner
<?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)

Ectorio
WRInaute discret
WRInaute discret
 
Messages: 84
Inscription: 9 Aoû 2009

Re: Tronquer les descriptions d'un flux rss sous magpierss ?

Message le Lun Aoû 31, 2009 7:39

Salut,

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


spout
WRInaute accro
WRInaute accro
 
Messages: 4382
Inscription: 14 Mai 2003

Re: Tronquer les descriptions d'un flux rss sous magpierss ?

Message le Mar Sep 01, 2009 9:29

Il faut que tu déclares la fonction truncate que je t'ai donné ici:
http://forum.webrankinfo.com/tronquer-les-descriptions-flux-rss-sous-m ... l#p1089846

Ectorio
WRInaute discret
WRInaute discret
 
Messages: 84
Inscription: 9 Aoû 2009

Re: Tronquer les descriptions d'un flux rss sous magpierss ?

Message le Mar Sep 01, 2009 22:15

Salut,

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

Code: Tout sélectionner
$html .= $item['description']."</a><br /><br />\n";

à remplacer par
Code: Tout sélectionner
$html .= substr($item['description'],0,100)."...<br /><br />\n";


UsagiYojimbo
WRInaute accro
WRInaute accro
 
Messages: 8579
Inscription: 23 Nov 2005

Re: Tronquer les descriptions d'un flux rss sous magpierss ?

Message le Mar Sep 01, 2009 22:18

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.


Si vous avez aimé cette discussion, partagez-la sur vos réseaux sociaux préférés :

Lectures recommandées sur ce thème :



Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités