8795 sujets

Développement web côté serveur, CMS

Pages :
Bonjour,

Je récupère les infos du blog en utilisant magpierss sur la page d'accueil de mon site mais l'affichage de la date n'est pas correcte; voici le code du fichier php concerné :

http://i.imagefra.me/235hxihg.jpg

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

   // boucle sur tous les elements
   foreach ($items as $item)
   {
      $date = date("d-m-Y H-i", strtotime($item['pubdate']));
      $html .= "<li>[$date] <a href=\"".$item['link']."\">";
      $html .= $item['title']."<br>";
      $html .= $item['description']."</li></a><br>\n";
   }
    $html .= "</ul></span>\n";
 }


Quelle est la solution ?

merci
Modifié par CyberNord (14 Jan 2011 - 15:32)
Salut,

Peux-être faut-il accéder à la date par $item['date_timestamp'] ou par $item['dc']['date'].


function item_time($item){
	$f=false;
	if(isset($item['date_timestamp'])){
		$t=$item['date_timestamp'];   
		$f=($t!=='');
	}elseif(isset($item['pubdate'])){
		$pubdate=$item['pubdate']; 
		if($pubdate!=='')$f=(($t=@strtotime($pubdate))!==false);
	}elseif(isset($item['dc']['date'])){
		$pubdate=$item['dc']['date'];
		if($pubdate!=='')$f=(($t=@strtotime($pubdate))!==false);
	}
	if(($f)and(($pubdate=@date('d-m-Y H-i',$t))!==false))return $pubdate;
	return '';
}

$date=item_time($item);

Modifié par Eric2A (13 Jan 2011 - 22:02)
Oula je n'y connais rien en php. Voici le code complet du fichier .php

<?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 = "<span class='news_blog'><ul>\n";

   // boucle sur tous les elements
   foreach ($items as $item)
   {
      $date = date("d-m-Y H-i", strtotime($item['pubdate']));
      $html .= "<li>[$date] <a href=\"".$item['link']."\">";
      $html .= $item['title']."<br>";
      $html .= $item['description']."</li></a><br>\n";
   }
    $html .= "</ul></span>\n";
 }

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


Comment je dois insérer ton code dans ce fichier ?
Tu peux placer les lignes
function item_time($item){
	$f=false;
	if(isset($item['date_timestamp'])){
		$t=$item['date_timestamp'];   
		$f=($t!=='');
	}elseif(isset($item['pubdate'])){
		$pubdate=$item['pubdate']; 
		if($pubdate!=='')$f=(($t=@strtotime($pubdate))!==false);
	}elseif(isset($item['dc']['date'])){
		$pubdate=$item['dc']['date'];
		if($pubdate!=='')$f=(($t=@strtotime($pubdate))!==false);
	}
	if(($f)and(($pubdate=@date('d-m-Y H-i',$t))!==false))return $pubdate;
	return '';
}

juste après la ligne

require_once("magpierss/rss_fetch.inc");


Ensuite, tu remplaces la ligne

$date = date("d-m-Y H-i", strtotime($item['pubdate']));


par celle-ci

$date=item_time($item);
Bonjour.
Pour la mise en page c'est assez facile tu peux la voir dans les ligne de type
$html = "<span class='news_blog'><ul>\n";

Tu vois qu'il crée un span et ensuite commence un liste.
ensuite la li avec la date, le lien, le titre, la description puis il ferme la li puis le lien (deja une erreur il ferme la liste avant le lien), l'ul et le span.
$html .= "<li>[$date] <a href=\"".$item['link']."\">";
$html .= $item['title']."<br>";
$html .= $item['description']."</li></a><br>\n";
$html .= "</ul></span>\n";

Tu dois pouvoir modifier ça facilement.
Pour la date qui ne s'affiche pas je ne vois pas le pb.
quelle est la valeur de $item['pubdate'] si tu fais un var_dump() ?

D'après ton problème, pour afficher la date du 01/01/1970 c'est que strtotime($item['pubdate']) renvoie 0, ou plutôt false car strtotime ne parvient pas à convertir $item['pubdate'] certainement pour une raison de format erroné.
 // boucle sur tous les elements
foreach ($items as $item)
{

      var_dump($item['pubdate']); // le test pour savoir quelle est la valeur de $item['pubdate']

      $date = date("d-m-Y H-i", strtotime($item['pubdate']));

      $html .= "<li>[$date] <a href=\"".$item['link']."\">";

      $html .= $item['title']."<br>";

      $html .= $item['description']."</li></a><br>\n";

}
Donc d'après le résultat, $item['pubdate'] vaut NULL. Autrement dit, il n'y a pas de variable "pubdate".
Quelle est l'url que tu passes à la fonction FeedParser() ?
Y-a-t'il un élément "pubdate" dans le XML à cette url ?
Je ne sais pas si c'est cela que tu demandes mais voici ce que j'ai renseigné dans index.php

<div class="single_half_left">
	<img src="/images/index_message_blog.jpg" alt="les derniers post du blog" title="les derniers post du blog" />
	<div class="news_blog">
	<p><?php require_once("feedparser.php"); echo FeedParser("http://sickpunk.free.fr/blog/wp-rss.php"); ?></p>
	</div>
</div>


et dans wp-rss.php il y a ce code :

<?php
/**
 * Redirects to the RSS feed
 * This file is deprecated and only exists for backwards compatibility
 *
 * @package WordPress
 */

require( './wp-load.php' );
wp_redirect( get_bloginfo( 'rss_url' ), 301 );

?>
Comme ceci ?

<p><?php require_once("feedparser.php"); echo FeedParser('http://sickpunk.free.fr/blog/?feed=rss2'); ?></p>
Modifié par Eric2A (14 Jan 2011 - 14:41)
CyberNord a écrit :
Peut-on aussi afficher l'auteur du message comme sur le blog ?

Oui,

$auteur=isset($item['dc']['creator'])?$item['dc']['creator']:'';


NB : Pour une question de sécurité, il est préférable de convertir les caractères spéciaux (des chaines déstinées à être affichées) à l'aide de la fonction htmlspecialchars().

Par exemple...

$html .= $item['title']."<br>";

devient
$html .= htmlspecialchar($item['title'])."<br>";



CyberNord a écrit :
Et comment limiter le nombre de caractères dans la description ?

Voir la fonction substr()
J'ai essayé cela avec succès :

$auteur=isset($item['dc']['creator'])?$item['dc']['creator']:'';
$html .= "<li><span class='news_blog_date'>($date) - $auteur</span> <a href=\"".$item['link']."\">";


merci Smiley cligne

le fichier php n'a pas aimé cette modif :
$html .= $item['title']

devient
$html .= htmlspecialchar($item['title'])


J'ai essayé avec un "s" en plus :
$html .= "<span class='news_blog_title'>".htmlspecialchars($item['title'])."</span><br>";

pas de changement dans les caractères.
Modifié par CyberNord (14 Jan 2011 - 16:15)
Pages :