Zod Posté(e) le 17 mars 2006 Partager Posté(e) le 17 mars 2006 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 :/ Lien vers le commentaire Partager sur d’autres sites More sharing options...
Sentinel Posté(e) le 18 mars 2006 Partager Posté(e) le 18 mars 2006 Initialise un compteur avant ta boucle foreach, puis dans la boucle, incrémente ton compteur, et s'il est pair (ou impair) affiche un fond grisé Lien vers le commentaire Partager sur d’autres sites More sharing options...
Zod Posté(e) le 18 mars 2006 Auteur Partager Posté(e) le 18 mars 2006 ok, merci maintenant j'ai plus qu'a trouver comment faire ça maintenant ^^ Merci :) Lien vers le commentaire Partager sur d’autres sites More sharing options...
fabien29200 Posté(e) le 18 mars 2006 Partager Posté(e) le 18 mars 2006 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 ! Lien vers le commentaire Partager sur d’autres sites More sharing options...
theocrite Posté(e) le 18 mars 2006 Partager Posté(e) le 18 mars 2006 Autre solution fait un AND avec 1 pour récupérer le dernier bit. Lien vers le commentaire Partager sur d’autres sites More sharing options...
Zod Posté(e) le 18 mars 2006 Auteur Partager Posté(e) le 18 mars 2006 merci à tous, je vais voir ce que je peux faire, je vous tiens au courant si j'y arrive pas Lien vers le commentaire Partager sur d’autres sites More sharing options...
Zod Posté(e) le 19 mars 2006 Auteur Partager Posté(e) le 19 mars 2006 Bien j'ai réussis à isoler une news sur 2, seulement l'autre news sur 2 ne s'affiche pas maintenant 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 :) Lien vers le commentaire Partager sur d’autres sites More sharing options...
Captain Hadock Posté(e) le 19 mars 2006 Partager Posté(e) le 19 mars 2006 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....) Lien vers le commentaire Partager sur d’autres sites More sharing options...
Zod Posté(e) le 19 mars 2006 Auteur Partager Posté(e) le 19 mars 2006 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 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 :) Lien vers le commentaire Partager sur d’autres sites More sharing options...
Captain Hadock Posté(e) le 19 mars 2006 Partager Posté(e) le 19 mars 2006 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? (enfin je pense, désolé si je me fourvoie) Lien vers le commentaire Partager sur d’autres sites More sharing options...
Zod Posté(e) le 20 mars 2006 Auteur Partager Posté(e) le 20 mars 2006 oki, je teste ça ce soir, merci beaucoup edit : Bon j'ai pas pu attendre ce soir en fin de compte et ça marchee yipee, merci merci :) Lien vers le commentaire Partager sur d’autres sites More sharing options...
Captain Hadock Posté(e) le 20 mars 2006 Partager Posté(e) le 20 mars 2006 De rien ça fera 100€. 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. (Et puis je suis pas un pro en php, alors t'a eu de la chance que ça marche ) Lien vers le commentaire Partager sur d’autres sites More sharing options...
Messages recommandés
Archivé
Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.