DJsmileyus Posté 30 Septembre 2004 Posté 30 Septembre 2004 Bonjour, je viens de créer un script de news, tout fonctionne bien mais j'aimerais créer un fichier archives.php, qui classe les archives par mois, mais je ne sais pas vraiment comment faire sachant que les dates de mes news sont en DATETIME, les classer je sais, mais mettre à chaque fois "Janvier 2004 : xxxxx ; Février 2004 : xxxxx je n'arrive pas, en réalité je ne sais pas pas ou commencer... Si une personne à une piste
Guest Ldo Posté 30 Septembre 2004 Posté 30 Septembre 2004 (modifié) <?php function frToUs($dateUs) { $mois = array('', 'janvier', 'fevrier', 'mars', 'avril', 'mai', 'juin', 'juillet', 'aout', 'septembre', 'octobre', 'novembre', 'decembre'); list($a,$m,$j)=explode("-",$dateUs); $dateFr = $j." ".$mois[$m]." ".$a; return $dateFr; } echo frToUs('2004-09-30'); // retournera 30 septembre 2004 ?> sinon juste pour info, une autre méthode directement grâce à MySql mais a éviter http://dwef.12h26.com/dwef-22.htm Modifié 30 Septembre 2004 par Ldo
DJsmileyus Posté 30 Septembre 2004 Auteur Posté 30 Septembre 2004 lol je me disais aussi, j'avais essayé ton script et j'arrivais po Pas grave, si une autre personne à la solution...
Dan Posté 30 Septembre 2004 Posté 30 Septembre 2004 Salut DJ, Voici une petite fonction qui devrait t'aider. Modifies le format de l'appel à strftime pour obtenir la sortie au format voulu <?phpfunction convert_date($date) { setlocale(LC_TIME,'french'); $break = explode(" ", $date); $datebreak = explode("-", $break[0]); $time = explode(":", $break[1]); return strftime("%A, %d %B %Y - %H:%M:%S", mktime($time[0],$time[1],$time[2],$datebreak[1],$datebreak[2],$datebreak[0])); }// un petit exemple$date="2004-09-30 14:55:45";print convert_date($date);?> Sur base de la date donnée, cela devrait te donner ceci en sortie: Jeudi, 30 septembre 2004 14:55:45 Dan Ps: selon le système utilisé, le deuxième argument de setlocale peut changer... tu peux essayer les valeurs 'fr_FR' et 'fr_FR_AT_euro' ....
Guest Ldo Posté 30 Septembre 2004 Posté 30 Septembre 2004 voila, désolé pour le cafouillage, ca m'apprendra à copier/coller mes codes sans relire, j'ai remit une fonction, qui marche celle la. sinon la solution de Dan est trés élégante et ne necessite pas d'avoir un tableau contenant les valeurs possible encore désolé
DJsmileyus Posté 30 Septembre 2004 Auteur Posté 30 Septembre 2004 (modifié) Hum...merci bien, mais j'ai du mal m'exprimer, en faîte ce sont des archives que j'aimerais genre : Janvier 2004 : - news 1 : xxxx - news 2 : xxxx - news 3 : xxxx En bref, que toutes les news soit classer automatiquement par mois et non les afficher date par date (ca je sais faire ). Merci quand même pour votre aide Edit : En faîte, un peu comme les weblogs Modifié 30 Septembre 2004 par DJsmileyus
Dan Posté 30 Septembre 2004 Posté 30 Septembre 2004 Ben tout simplement en modifiant l'argument de strftime... return strftime("%B %Y", mktime($time[0],$time[1],$time[2],$datebreak[1],$datebreak[2],$datebreak[0])); te retournera "Septembre 2004" ... et à partir de là tu utilises cette valeur pour trier tes news, non ?
DJsmileyus Posté 30 Septembre 2004 Auteur Posté 30 Septembre 2004 (modifié) Oui oui bien sûr, mais ca affichera : Septembre 2004 : xxxx Septembre 2004 : xxxx Septembre 2004 : xxxx Septembre 2004 : xxxx Septembre 2004 : xxxx Moi, j'aimerais que ce soit : Septembre 2004 : xxxxx xxxxx xxxxx xxxxx xxxxx Bref, qu'il n'y ai pas tout le temps septembre 2004, je pense que c'est dans la requête MySQL qu'il faut faire quelque chose mais quoi... Modifié 30 Septembre 2004 par DJsmileyus
Dan Posté 30 Septembre 2004 Posté 30 Septembre 2004 Dans la requête mySQL, tu pourrais faire un "Group By" mais pas sur un champ dont toutes les valeurs sont uniques... car tu grouperais les valeurs par blocs de 1 A part un script php qui te permettrait de trier les valeurs en fonction du mois, pas de miracle !
DJsmileyus Posté 30 Septembre 2004 Auteur Posté 30 Septembre 2004 D'accord, donc si je comprend bien, tout ce qui es weblog et compagnie utilise GROUP By ?
Guest Ldo Posté 30 Septembre 2004 Posté 30 Septembre 2004 dans ton while, il suffit simplement d'avoir une variable $lastdate ensuite tu test while($row = mysql_fetch_assoc($result)) { if($row["date"] != $lastdate OR empty($lastdate)) { $lastdate = $row["date"]; echo $row["date"]; } echo $row['news']; } //fin du while un truc dans le genre quoi en fait a chaque itération du while, tu test que la date en cours ne correspond pas avec la date précédente si les 2 diffèrent, tu affiche la date, si elle sont identique, tu ne l'affiche pas
DJsmileyus Posté 30 Septembre 2004 Auteur Posté 30 Septembre 2004 D'accord, j'ai retourné le script dans tout les sens mais je n'ai toujours pas réussis... Je vais demander à une personne qui à programmer un Weblog lui même pour savoir si il peut me mettre sur la piste, je vous tiendrez au courant (ElMoustiko, si tu ne veux pas être bombarder de question, ne te connecte pas sur MSN ) Encore merci pour votre aide
ElMoustiko Posté 1 Octobre 2004 Posté 1 Octobre 2004 (modifié) Moi sur le blog j'ai utilisé un truc trouvé après pas mal de galère ;p C'est crado, loin d'etre orthodoxe mas ca marche ! Désolé pour les puristes ! <h3>Archives</h3><ul><?php $req = "SELECT DISTINCT YEAR(col_table)an, MONTH(col_table)mois FROM table ORDER BY col_table ASC"; $result = mysql_query($req); while ($data = mysql_fetch_array($result)) { $select_month = array('1'=>'Janvier', '2'=>'Février', '3'=>'Mars', '4'=>'Avril', '5'=>'Mai', '6'=>'Juin', '7'=>'Juillet', '8'=>'Août', '9'=>'Septembre', '10'=>'Octobre', '11'=>'Novembre', '12'=>'Décembre'); if($data['mois'] <= 9) { echo '<li><a href="blog.php?select_date=0'.$data['mois'].'/'.$data['an'].'">'.$select_month[$data['mois']].' '.$data['an'].'</a></li>'; } else { echo '<li><a href="blog.php?select_date='.$data['mois'].'/'.$data['an'].'">'.$select_month[$data['mois']].' '.$data['an'].'</a></li>'; } }?></ul> Voilà après faut adapter selon sa table et sa bdd mais dans l'idée c'est ça. Le truc le plus crade c'est mon array et mon test sur le <= 9 ;p Enfin c'est mes 1eres armes en PHP. Modifié 1 Octobre 2004 par ElMoustiko
ElMoustiko Posté 1 Octobre 2004 Posté 1 Octobre 2004 Enfin j'ai oublié de préciser le format de la date YYYY-MM-DD HH:MM:SS En enregistrant dans la table via la fonction mysql NOW() Et col_table c'est le nom de la colone de la table où sont stockées les dates à ce format. @++
DJsmileyus Posté 1 Octobre 2004 Auteur Posté 1 Octobre 2004 Wééé merci ca fonctionner Seulq uestion : à quoi correspond le " if($data['mois'] <= 9) " ? Merci d'avance, et encore merci
ElMoustiko Posté 1 Octobre 2004 Posté 1 Octobre 2004 C'est LA bidouille crado du truc ! C'est parceque SELECT DISTINCT MONTH(col_table)mois renvoi un chiffre et 01 n'est pas un chiffre, donc ca renvoi 1,2,3, ... 9,10,11,12 et mes url sont de la forme MM/YYYY (je crois ;p) Donc il faut que je rajoute 0 devant les 1,2,3,...9 pour avoir une url MM/ et non M/ ou MM/ suivant le mois.
DJsmileyus Posté 1 Octobre 2004 Auteur Posté 1 Octobre 2004 Ah oKay, rien de bien grave quoi En tout cas ca fonctionne, merci beaucoup
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant