Page 1 sur 1

Affichage des images d'un flux rss ou xml

Posté : 21 juil. 2009, 17:56
par Mamat1
Bonjour,

je cherche à afficher des flux sur une page en PHP.
J'utilise MagPieRss et un feedparser et cela marche très bien à part pour les images qui sont trop grandes et cassent ma mise en page.
Pourriez-vous me dire ce que je dois rajouter pour que les images ne s'affichent qu'en petit (150px de large par exemple ?)
Merci d'avance.
Voici mon feedparser :
<?php
// inclusion de la classe magpierss
require_once("magpierss/rss_fetch.inc");

// Fonction d'extraction des données du flux
// 2 paramètres, l'url du flux et le nombre d'informations à afficher (5 par défaut)
function FeedParser($url_feed, $nb_items_affiches=5) {

// lecture du fichier distant (flux XML)
$rss = fetch_rss($url_feed);

// si la lecture s'est bien passée, on lit les élements
if (is_array($rss->items)) {

// On ne garde que les $nb_items_affiches premières informations
$items = array_slice($rss->items, 0, $nb_items_affiches);

// Récupération des informations sur le site et sur la vignette
$site_titre = $rss->channel["title"];
$site_lien = $rss->channel["link"];
$site_description = $rss->channel["description"];
$logo_titre = $rss->image["title"];
$logo_description = $rss->image["description"];
$logo_url = $rss->image["url"];
$logo_lien = $rss->image["link"];

// Création de la chaine de résultat

// Vignette cliquable
$html = "<span style=\"float:left;margin:5px 0 0 5px\"><a href=\"".$logo_lien."\"><img src=\"".$logo_url."\" border=\"0\" alt=\"".$logo_description."\" title=\"".$logo_titre."\"></a></span>\n";

// Titre cliquable
$html .= "<a href=\"".$site_lien."\" title=\"".$site_description."\" target=\"_blank\"></span>".$site_titre."</a><br>\n";

// Description
$html .= "<span style=\"font-size:10px;font-weight:bold;\">".$site_description."</span><br clear=\"left\"><br>\n";

// Boucle sur les informations et récupérations du contenu des balises
foreach($items as $item) {
$titre = $item["title"];
$lien = $item["link"];
$description = $item["description"];
$photo = $item["enclosure"];

// Il n'y a pas systématiquement une photo, on test donc sa présence
if($photo!="")
$html .= "<img src=\"".$photo."\" alt=\"".$titre."\" style=\"float:left;margin-right:5px\">\n";

// Affichage du titre
$html .= "<a href=\"".$lien."\" title=\"".$titre."\" target=\"_blank\">".$titre."</a><br>\n";

// Affichage de la date et de la description
$html .= "<span class=\"tiny\">".$description."</span><br clear=\"left\"><br>\n";
} // Boucle sur les infos

// retourne le code HTML à inclure dans la page
return $html;
} // Condition de récupération des données
} // Fin de la fonction


?>

Posté : 21 juil. 2009, 23:43
par Victor BRITO
Une solution de facilité consiste à ajouter à la balise img l'attribut width="150".

Une autre solution consiste à générer des miniatures depuis les images originales, chose pour laquelle la bibliothèque GD est ton amie, notamment grâce à la fonction imagecopyresampled(). ;)

Posté : 22 juil. 2009, 10:46
par Mamat1
Merci pour ta réponse, je vais tenter ces deux approches. :pouce:

J'ai un petit problème avec l'attribut, c'est sans doute une erreur de syntaxe, mais je ne trouve pas laquelle :
$html .= "<img width="150" src=\"".$photo."\" alt=\"".$titre."\" style=\"float:left;margin-right:5px\">\n";
J'ai une erreur :
Parse error: syntax error, unexpected T_LNUMBER on line 55

La 55, c'est la ligne du dessus.

Merci à vous !

Posté : 22 juil. 2009, 11:41
par Victor BRITO
Corrige ta ligne de code comme suit :
$html .= '<img width="150" src="'.$photo.'" alt="'.$titre.'" style="float:left;margin-right:5px">'."\n";

Posté : 22 juil. 2009, 12:35
par Mamat1
Merci à toi !
Je n'ai plus d'erreur, mais les photos ne sont pas réduites... :-k

Posté : 22 juil. 2009, 12:53
par Victor BRITO
Auquel cas utilise la seconde solution que j'ai évoquée. Sinon, essaie (autre solution de facilité) d'ajouter à l'attribut style, toujours dans img, width: 150px, comme suit :
$html .= '<img src="'.$photo.'" alt="'.$titre.'" style="float: left; margin-right: 5px; width: 150px;">'."\n";
Mais, le mieux, c'est de générer une miniature avec la fonction imagecopyresampled() de la bibliothèque GD.

Posté : 22 juil. 2009, 13:28
par Mamat1
Je te remercie, je vais suivre tes conseils et tenter la seconde solution !