Aller au contenu

Affichage news plutôt particulière


Max33

Sujets conseillés

Salut à toutes et à tous,

Voilà comme vous devez l'entendre souvent ici, je débute dans le langage PHP.

Je suis entrain de faire mon propre site dynamique :P

Mon problême est la façon que j'ai choisit pour afficher les news du site :) voici un exemple :

Aujourd'hui

- news1

- news2

- news3

- news4

Hier

- news5

- news6

Avant hier

- news7

- news8

- news9

- news10

Donc en faite j'aimerai que si la date est egal à "date("Y/m/d")" , on affiche la date (une seul fois) puis les news de cette date, ensuite si la date vaut "date('Y-m-d', time() - 3600 * 24)" par exemple, on affiche la date (une seul fois) et les news en relation à cette date etc...

Je sais pas du tout comment je peux faire ça avec des boucles :s suis-je pas assez logique ? Je sais pas, j'ai pas eu de problême pour le reste mais là :P

Si quelqu'un pourrait m'éclairer :)

Merci d'avance.

Modifié par Max33
Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

Il est possible de faire la chose en deux fois...

J'imagine que tu as une table dans ta BDD avec deux colonnes "date" et "nom" pour la news... Je ne sais pas si c'est réellement ça, mais vu que tu ne donnes pas d'infos là-dessus, je vais partir comme si c'était ça.

Après extraction de toutes les news de ta table, avec les dates

$requete = "SELECT date, nom FROM news";
$resultat_requete = mysql_query($requete);

Je ne sais pas vraiment comment tu sors tes données de ta base, mais on va dire que tu fais comme ça :

while($donnees = mysql_fetch_array($resultat_requete))
{
$news[$donnees['date']][] = $donnes['nom'];
}

foreach($news as $date=>$tab)
{
echo "date : $date<br>";
foreach($tab as $val)
{
echo $val."<br>";
}
}

Lien vers le commentaire
Partager sur d’autres sites

Le principe est simple : au début de ta boucle, tu intialises une variable date.

A chaque itération de la boucle, tu compares la date de ton résultat SQL avec celle de ta variable : si elle est différente, tu affiches la date, et tu mets la variable à jour.

Ca donnerait quelque chose du genre :

<?php
$sql = "SELECT date, texte FROM news ORDER BY date DESC";
$req = mysql_query($sql);
$date = '';
while($row = mysql_fetch_assoc($req)) {
if($row['date'] != $date) {
echo '<h2>'.$row['date'].'</h2>';
$date = $row['date'];
}
echo '<p>'.$row['texte'].'</p>';
}
?>

Mikaweb: pourquoi voir ça par MP ? Nous sommes sur un forum, le but est avant tout participatif.

Lien vers le commentaire
Partager sur d’autres sites

Le champ ou je stocke ma date sous ce format 2008/07/19 est "datereal" et pour le titre de la news le champ est "titreaccueil"

Je veut juste afficher la date (avec le second format que j'enregistre quand je poste ma news, qui est sous se format (lundi 1 janvier 2000) le nom du champ est "date") puis les titres des news.

Voici un exemple de ma requete sql

$news1 = 'SELECT * FROM youps3_news WHERE Actif="1" ORDER BY datereal DESC LIMIT 20';

$news2 = mysql_query ($news1);

$news3 = mysql_fetch_array ($news2);

Je viens de tester ta façon captain_torche mais le problême c'est que sa affiche la date pour tout (ou alors je l'ai mal édité), alors que j'aimerai afficher la date puis tout les articles de cette date et ainsi de suite.

Je vais essayer celle de sarc mais c'est la première fois que j'utilise "foreach" ^^

Merci encore pour vos message.

[EDIT] Voilà je viens de tester la technique de sarc est sa marche parfaitement :)

Voici l'apercu du projet:

http://91.121.53.135/index.ps3

Modifié par Max33
Lien vers le commentaire
Partager sur d’autres sites

Rebonjour,

En faite je viens de m'apercevoir que la dernière news que je venais de posté ne s'affiche pas :s

Sa commence à partir de la 2eme

Voici mon bout de code modifier à ma sauce

$requete = 'SELECT * FROM youps3_news WHERE Actif="1" ORDER BY datereal DESC LIMIT '.$premiereEntree.', '.$messagesParPage.'';
$resultat_requete = mysql_query($requete);
$news3 = mysql_fetch_array ($resultat_requete);

while($news3 = mysql_fetch_array($resultat_requete))
{
$news[$news3['date']][] = $news3['titreaccueil'];
}

foreach($news as $date=>$tab)
{
if($date == $datenow){$date2 = "Aujourd'hui";}else{$date2 = $date;}
echo '<table width="205" border="0" cellspacing="0" cellpadding="1"><tr><td class="NewsDate"><img src="Images/Spacer.gif" width="1" height="5" /><br />- '.$date2.'</td></tr>';
foreach($tab as $val)
{
$newslien1 = 'SELECT * FROM youps3_news WHERE titreaccueil="'.$val.'"';
$newslien2 = mysql_query($newslien1);
$newslien3 = mysql_fetch_array ($newslien2);
$url = $newslien3['titre'];

echo '<tr><td class="NewsTt"><a href="article-'.$newslien3[id].'-'.mon_urlencode($url).'.ps3">'.$val.'</a></td></tr>';
}
echo '</table>';
}

Pour rester un peu plus clair, voici celui de sarc un peu modifié :

$requete = "SELECT * FROM youps3_news WHERE Actif=1 ORDER BY datereal DESC LIMIT 20";
$resultat_requete = mysql_query($requete);
$news3 = mysql_fetch_array ($resultat_requete);

while($news3 = mysql_fetch_array($resultat_requete))
{
$news[$news3['date']][] = $news3['titreaccueil'];
}

foreach($news as $date=>$tab)
{
echo "date : $date<br>";
foreach($tab as $val)
{
echo $val."<br>";
}
}

les resultats sont les même, c'est à dire que le titre de la dernière news n'est pas affiché, sa commence à partir de la news 2

Un ptit apercu:

http://91.121.53.135/NewsAjax2.php?page=1

Modifié par Max33
Lien vers le commentaire
Partager sur d’autres sites

Rebonjour,

la ligne :

$news3 = mysql_fetch_array ($resultat_requete);

est en trop... Il le fait déjà dans le while !

Tu dois donc juste enlever cette ligne, et ça sera bon. :)

Lien vers le commentaire
Partager sur d’autres sites

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...