Jump to content

[résolu] problème de php cette fois ci :p


Recommended Posts

Oui, mon site avance et son lot de questions embettantes aussi...

Je résume, en gros mon site affiche des news générés par un script en php, jusque là tout va bien.

Maintenant j'aimerais savoir comment je peux griser le fond d'une news sur 2 à la manière de pcinpact par exemple afin de rendre l'ensemble plus lisible.

Pour l'instant mon site ressemble à ça : www.actus-pc.com c'est tout moche et tout reste à faire, mais comme vous le voyez toutes les news ont un fond blanc et c'est là que j'aimerais placer un fond gris pour une news sur 2.

Je présume qu'il faut que je bricole le script php, car c'est lui qui génére les texte après tout, voici donc le code php dans la page index suivit de celui qui génere le texte :

<?php
require_once("feedparser.php");
echo FeedParser("http://www.pcinpact.com/include/news.xml", 10);
?>

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

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

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

Si quelqu'un a une idée comment je dois m'y prendre ça serait avec plaisir, je ne connais pas grand chose au php malheureusement :/

Link to comment
Share on other sites

Petit indice, si tu prends un nombre, que tu fais le modulo par 2, si le résultat est zéro alors le nombre est pair, sinon il est impair.

autre méthode, tu prends un booléen que tu initialises à vrai.

Ensuite à chaque ligne tu fais

if ( flag ) mettreEnGris ();

flag = ! flag;

Voilà, bon courage !

Link to comment
Share on other sites

Bien j'ai réussis à isoler une news sur 2, seulement l'autre news sur 2 ne s'affiche pas maintenant :francais:

je vous copie colle le code que j'ai écris :


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"

 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">

 <head>
<link rel="shortcut icon" type="image/x-icon" href="icone.ico" />
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<meta http-equiv="Content-Language" content="fr" />
<meta name="keywords" lang="fr" content="News, news, New, new, Actus, actus, Actu, Actus, PC, MAC, pc, mac, hardware, Hardware, RSS, rss, Technology, technology, Geek, geek, Geeks, geeks, Linux, linux, Windows, windows, Software, software" />

<title>"Actus-PC le site qui rassemble les actualités informatiques françaises"</title>

<link rel="stylesheet" type="text/css" href="portal.css" media="screen" />

</head>

<?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_def'><ul>\n"; 
$htmll = "<span class='news_def_2'><ul>\n"; 

//initialisation du compteur
$compteur = 0;

// boucle sur tous les elements 
foreach ($items as $item) 
{ 
  $compteur++;
  if (($compteur % 2) != 0)
  {
  $date = date("d/m H:i", strtotime($item['pubdate']));
  $html .= "<li>[$date] <a href=\"".$item['link']."\" target=\"_blank\">";
  $html .= $item['title']."</a><br>";	
  $html .= $item['description']."</li><br />\n"; 
  }
  else
  {
  $date = date("d/m H:i", strtotime($item['pubdate']));
  $htmll .= "<li>[$date] <a href=\"".$item['link']."\" target=\"_blank\">";
  $htmll .= $item['title']."</a><br>";	
  $htmll .= $item['description']."</li><br />\n"; 
  }

} 
$html .= "</ul></span>\n";
$htmll .= "</ul></span>\n";
 }

 // retourne le code HTML a inclure dans la page

 return $html;
 return $htmll;
}
?>

En gros, j'ai 2 span class différentes et je veux appliquer une span class avec un fond gris aux news paires et une span class ordinaire aux autres.

Je me doute bien que ce que j'ai écris cloche, mais j'ai comme je l'ai déjà dis, j'ai pas du tout l'habitude du php, à la longue j'y arriverais tout seul j'espere ^^

Merci d'avance à celui qui me trouvera ce qui cloche :)

Link to comment
Share on other sites

J'ai suvolé, mais deux return à suivre, ça me choque, seulement le premier reviens, c'est pas comme ça qu'il faut procéder...

EDIT : J'aurai plutot utilisé la même chaine html dans les deux cas avec dans la structure de choix selement choisir le fond, mais vu que l'information est la meme, pas besoin de mettre les concaténation dans les if else. (si je suis pas clair, demande....)

Link to comment
Share on other sites

oui je vois ce que tu veux dire et c'était mon idée initiale, mais je vois pas comment proceder avec les 2 css...

Si j'ai bien compris ce que j'ai écris (oui oui j'ai du mal ^^) le css influence sur l'affichage de la variable $html, mais pour afficher cette variable différement selon que le compteur soit paire ou impaire je sais pas trop faire :francais:

Merci pour ta réponse en tout cas :)

edit : mmh je vais voir en integrant la span class dans la boucle, mais je crainds que ca alourdisse le traitement ^^

redit : bon ca donne rien de déclarer des span class dans la boucle, si quelqu'un a une idée qu'il n'hésite pas à le dire :)

Link to comment
Share on other sites

foreach ($items as $item)
{
  $compteur++;
  if (($compteur % 2) != 0)
  {
  $date = date("d/m H:i", strtotime($item['pubdate']));
  $html .= "<li>[$date] <a href=\"".$item['link']."\" target=\"_blank\">";
  $html .= $item['title']."</a><br>";	
  $html .= $item['description']."</li><br />\n";
  }
  else
  {
  $date = date("d/m H:i", strtotime($item['pubdate']));
  $htmll .= "<li>[$date] <a href=\"".$item['link']."\" target=\"_blank\">";
  $htmll .= $item['title']."</a><br>";	
  $htmll .= $item['description']."</li><br />\n";
  }

}
$html .= "</ul></span>\n";
$htmll .= "</ul></span>\n";
 }

Tout se joue ici, donc je serait toi je ferai :

  foreach ($items as $item)
{
  $date = date("d/m H:i", strtotime($item['pubdate']));

//test si news de numéro pair ou impaire
  $compteur++;
  if (($compteur % 2) != 0)
  {
//mettre la liste en class impaire
  $html .= "<li class=\"newsimpaire\">";
  }
  else
  {
//mettre la liste en class paire
  $html .= "<li class=\"newspaire\">";
  }

  $html .= "[$date] <a href=\"".$item['link']."\" target=\"_blank\">";
  $html .= $item['title']."</a><br>";	
  $html .= $item['description']."</li><br />\n";

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

Et hop, tu ne bosse plus qu'avec une seule variable de texte.

Ensuite dans ta CSS, tu met la propriété background-color de la classe de chaque li à la valeur que tu veux, du genre

.newspaire
{
 /*Rien, background tranparent*/
}
.newsimpaire
{
 background-color: #D0D0D0; /*Un peu gris*/
}

Et c'est dans la poche, compris? :reflechis: (enfin je pense, désolé si je me fourvoie)

Link to comment
Share on other sites

De rien ça fera 100€. :byebye::p

Content pour toi en tout cas, et rapelle toi que le mieux c'est de mettre dans les if seulement ce qui dépend de la condition, et toujours simplifer au maximum, ça fait gagner en performance et c'est mieux. :mdr:

(Et puis je suis pas un pro en php, alors t'a eu de la chance que ça marche :p )

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...