Tronquer les descriptions d'un flux rss sous magpierss ?

Discussion dans 'Développement d'un site Web ou d'une appli mobile' créé par Ectorio, 30 Août 2009.

  1. Ectorio
    Ectorio WRInaute discret
    Inscrit:
    9 Août 2009
    Messages:
    72
    J'aime reçus:
    0
    Salut,

    Pour afficher un mix de quelques flux, j'utilise magpierss de la même manière que le tuto suivant de WRI : https://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.
     
  2. Monty973
    Monty973 WRInaute passionné
    Inscrit:
    21 Mars 2006
    Messages:
    1 160
    J'aime reçus:
    1
  3. spout
    spout WRInaute accro
    Inscrit:
    14 Mai 2003
    Messages:
    9 207
    J'aime reçus:
    365
    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;
    	}
    
     
  4. Ectorio
    Ectorio WRInaute discret
    Inscrit:
    9 Août 2009
    Messages:
    72
    J'aime reçus:
    0
    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;
                }
            }
        }
     
  5. spout
    spout WRInaute accro
    Inscrit:
    14 Mai 2003
    Messages:
    9 207
    J'aime reçus:
    365
    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
     
  6. Ectorio
    Ectorio WRInaute discret
    Inscrit:
    9 Août 2009
    Messages:
    72
    J'aime reçus:
    0
    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.
     
  7. spout
    spout WRInaute accro
    Inscrit:
    14 Mai 2003
    Messages:
    9 207
    J'aime reçus:
    365
    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)
     
  8. Ectorio
    Ectorio WRInaute discret
    Inscrit:
    9 Août 2009
    Messages:
    72
    J'aime reçus:
    0
    Salut,

    Merci encore... mais j'ai une erreur :
    Fatal error: Call to undefined function: truncate() in /www/actualite/feedparser.php on line 28
     
  9. spout
    spout WRInaute accro
    Inscrit:
    14 Mai 2003
    Messages:
    9 207
    J'aime reçus:
    365
  10. Ectorio
    Ectorio WRInaute discret
    Inscrit:
    9 Août 2009
    Messages:
    72
    J'aime reçus:
    0
    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"; 
     
  11. UsagiYojimbo
    UsagiYojimbo WRInaute accro
    Inscrit:
    23 Novembre 2005
    Messages:
    12 018
    J'aime reçus:
    133
    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.
     
Chargement...
Similar Threads - Tronquer descriptions flux Forum Date
Tronquer les descriptions du flux rss de Freeglobes Développement d'un site Web ou d'une appli mobile 15 Janvier 2010
Tronquer un tableau array Développement d'un site Web ou d'une appli mobile 27 Novembre 2017
Smarty / Presta tronquer une variable depuis le début Développement d'un site Web ou d'une appli mobile 16 Mars 2015
Comment tronquer une partie d'une url ? Développement d'un site Web ou d'une appli mobile 11 Février 2009
Tronquer une page, bon ou pas bon ? Débuter en référencement 18 Novembre 2008
Tronquer images à la volée Développement d'un site Web ou d'une appli mobile 10 Décembre 2007
[RESOLU] Tronquer la description d'un site dans freeglobes Annuaires et moteurs 27 Juillet 2007
Tronquer les mots-clés ?? Débuter en référencement 27 Mai 2004
Combien de mots pour des descriptions de fiches produit Référencement Google 5 Novembre 2021
Meta Descriptions dans le <head> et dans l'article Référencement Google 7 Avril 2021
Plagiat de Title et de Meta Descriptions Référencement Google 14 Décembre 2020
Search Console Titres et descriptions en double dans la nouvelle search console Google : l'entreprise, les sites web, les services 10 Avril 2019
Titres et descriptions en chinois dans Google après attaque... Problèmes de référencement spécifiques à vos sites 9 Décembre 2016
Probleme de descriptions non mises à jour Crawl et indexation Google, sitemaps 16 Août 2016
[Résolu] 2 descriptions pour une même url selon requête Crawl et indexation Google, sitemaps 1 Juin 2016
Descriptions des produits similaires Débuter en référencement 17 Mai 2016
Descriptions différentes pour une même page Référencement Google 26 Mars 2016
Dans les serps je vois les descriptions sur 4 ou 5 lignes Référencement Google 9 Mai 2014
Descriptions différentes entre Google.com et .fr Référencement Google 1 Janvier 2014
Descriptions jamais correct Problèmes de référencement spécifiques à vos sites 20 Février 2013