Aller au contenu

Script de news.


DJsmileyus

Sujets conseillés

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 :)

Lien vers le commentaire
Partager sur d’autres sites

<?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é par Ldo
Lien vers le commentaire
Partager sur d’autres sites

Salut DJ,

Voici une petite fonction qui devrait t'aider. Modifies le format de l'appel à strftime pour obtenir la sortie au format voulu ;)

<?php
function 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' ....

Lien vers le commentaire
Partager sur d’autres sites

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é

Lien vers le commentaire
Partager sur d’autres sites

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 ^^:hypocrite: ).

Merci quand même pour votre aide :)

Edit : En faîte, un peu comme les weblogs :)

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

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 ?

Lien vers le commentaire
Partager sur d’autres sites

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é par DJsmileyus
Lien vers le commentaire
Partager sur d’autres sites

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 !

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

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 :)

Lien vers le commentaire
Partager sur d’autres sites

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é par ElMoustiko
Lien vers le commentaire
Partager sur d’autres sites

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.

@++

Lien vers le commentaire
Partager sur d’autres sites

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.

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...