Nouveau sujet Répondre Imprimer Syndication RSS 2.0

[MODV] Anniversaire

Flamme ardente
Avatar de bthivent
  • Age : 19 ans
  • Messages : 440
  • Inscrit : 27 Novembre 2004
  Lien vers ce message 08 Janvier 2005, 21:14

Reprise du dernier message

[quot=Grummfy]pour février il suffit pour calculer les année bisextille de savoir si les 2 dernier chiffre sont divisible par 4: exemple 2000 -> ok, 1999 --> non, 1998 -> non, 1996 -> ok....[/quot]
je vien d'essayer de mettre 31/2/1989
et ça m'affiche comme date de naissance : Ven 03 Mar 1989
lol donc c'est pas mal !
j'ai de la chance quand même
(c'est parce que j'utilise timestamp, donc c'est tout gérer automatiquement..
génial non ? ;)


bthivent
Téléchargez Greyline theme V2
 
Chef du projet FSB
Avatar de Genova
  • Age : 22 ans
  • Messages : 14347
  • Inscrit : 16 Septembre 2004
  Lien vers ce message 08 Janvier 2005, 21:28
Je te déconseille de passer par les MP... Le emc aura pas forcément installé la messagerie privée :D Et puis autant juste un mail plutot que un mail et un MP ^^

Pour le cadre ma fois je 'nai pas trop d'idée.. Soit tu le rajoute au tableau statistique, soit tu fais une page à part, etc...

Ca serait cool aussi que le jour de l'anniv d'un membre tu affiches un truc genre "anniversaire de ce membre" dans les données du profil du sujet ^^


Cause Im as free as a bird now, And this bird you can not change. - Freebird - Lynyrd Skynyrd
There's someone in my head but it's not me. - Brain damage - Pink Floyd
I said baby, you know Im gonna leave you. - Babe I'm gonna leave you - Led Zeppelin
Father ? yes son, I want to kill you - The end - The Doors
 
Flamme ardente
Avatar de bthivent
  • Age : 19 ans
  • Messages : 440
  • Inscrit : 27 Novembre 2004
  Lien vers ce message 08 Janvier 2005, 21:32
ouais ! ça c'est pas trop dur ...
et j'avais oublié que mp était un mod lol...dommage..
donc j'enverrai un mail avec la class mail de grummfy :D
Il vaut mieux que je l'envoie en html ou en texte ?
et le texte est enregistré dans les fichiers langue je crois ?

Et donc comment faire pour contrà´ller si le mail n'a pas déjà été envoyé ?
Je coirs que pour phpBB le créateur avait mis un truc du style prochain anniversaire ? c'est peut-être ça ?
et l'ensemble des contrà´le + envoie du mail je les fait sur quel fichier


bthivent
Téléchargez Greyline theme V2
 
Chef du projet FSB
Avatar de Genova
  • Age : 22 ans
  • Messages : 14347
  • Inscrit : 16 Septembre 2004
  Lien vers ce message 08 Janvier 2005, 21:45
En HTML les mails ;)

Bah il te suffit de faire une variable dans la table membres que tu switchera dès qu'un mail aura été envoyé :) Par exemple :
if (!$membre['switch_anniv_mail'] && $cest_son_anniv_aujourdui)
{
   $mail->envoie();
   $sql = 'UPDATE membre SET switch_anniv_mail = 1';
   $bdd->requete($sql);
}
else if ($membre['switch_anniv_mail'] && !$cest_son_anniv_aujourdui)
{
   $sql = 'UPDATE membre SET switch_anniv_mail = 0';
   $bdd->requete($sql);
}


Bien sur je shématise pas mal là , mais tu vois le principe ?


Cause Im as free as a bird now, And this bird you can not change. - Freebird - Lynyrd Skynyrd
There's someone in my head but it's not me. - Brain damage - Pink Floyd
I said baby, you know Im gonna leave you. - Babe I'm gonna leave you - Led Zeppelin
Father ? yes son, I want to kill you - The end - The Doors
 
Flamme ardente
Avatar de bthivent
  • Age : 19 ans
  • Messages : 440
  • Inscrit : 27 Novembre 2004
  Lien vers ce message 08 Janvier 2005, 22:08
oui :D
merci ;)
sinon je pense que je reprendrai ça demain..
là j'ai assez programmé pour aujourd'hui lol :D


bthivent
Téléchargez Greyline theme V2
 
Chef du projet FSB
Avatar de Genova
  • Age : 22 ans
  • Messages : 14347
  • Inscrit : 16 Septembre 2004
  Lien vers ce message 08 Janvier 2005, 22:18
Par contre si tu fais un script qui a chaque page vérifie les anniversaires des gens ca risque de devenir vite très lourd... Essai de trouver la solution la plus optimisée (affichage du script uniquement sur l'index, rafrachissement des anniversaires uniquement une fois par jour à l'aide d'un switch, etc...).


Cause Im as free as a bird now, And this bird you can not change. - Freebird - Lynyrd Skynyrd
There's someone in my head but it's not me. - Brain damage - Pink Floyd
I said baby, you know Im gonna leave you. - Babe I'm gonna leave you - Led Zeppelin
Father ? yes son, I want to kill you - The end - The Doors
 
Flamme ardente
Avatar de bthivent
  • Age : 19 ans
  • Messages : 440
  • Inscrit : 27 Novembre 2004
  Lien vers ce message 08 Janvier 2005, 22:23
euh je comprend pas trop
Citation
si tu fais un script qui a chaque page vérifie les anniversaires des gens ca risque de devenir vite très lourd...

tu parles du script qui vérifierai s'il faut envoyer un mail non ?

Citation
rafrachissement des anniversaires uniquement une fois par jour à l'aide d'un switch


???euh ? :O


bthivent
Téléchargez Greyline theme V2
 
Chef du projet FSB
Avatar de Genova
  • Age : 22 ans
  • Messages : 14347
  • Inscrit : 16 Septembre 2004
  Lien vers ce message 08 Janvier 2005, 22:30
Bah disons que globalement le script au niveau de l'envoie des mails ca sera u ntruc genre :
$sql = 'SELECT machin FROM membres_table WHERE birthday = truc';
$result = $bdd->requete($sql);
while ($data = $bdd->tableau($result))
{
   // Envoie de mail (ou récupération des multi adresses).
}


non ? c'est un peu lourd à charger sur chaque page, donc tu peux essayer d'optimiser en mettant par exemple ce script uniquement sur l'index, et aussi en lancant le script qu'une seule fois toutes les 24 H. Par exemple dans le tableau config tu rajoutes un truc genre $config['script_birthday'] et sur l'index :
if ($config['script_birthday'] <  (time() - (24 * 3600)))
{
   envoyer_mail_aux_anniversaires();
   $config['script_birthday'] = time();
   $cache->write_in_cache($config, 'config', count($config));
}

comme ca ton script de mail ne sera lancé qu'une seule fois par jour, et dès qu'il se lance tu update le time avec celui actuel et tu le relance 24h après ^^

Tu me suis jusque là ? ce genre de méthode est super important, parce que ca permet d'optimiser à fond des scripts :D Si ca t'interesse vraiment il y a moyen d'optimiser encore largement plus mais ca devient plus compliqué ensuite, si tu veux savoir hesites pas à poser la question par contre :)


Cause Im as free as a bird now, And this bird you can not change. - Freebird - Lynyrd Skynyrd
There's someone in my head but it's not me. - Brain damage - Pink Floyd
I said baby, you know Im gonna leave you. - Babe I'm gonna leave you - Led Zeppelin
Father ? yes son, I want to kill you - The end - The Doors
 
Flamme ardente
Avatar de bthivent
  • Age : 19 ans
  • Messages : 440
  • Inscrit : 27 Novembre 2004
  Lien vers ce message 09 Janvier 2005, 10:45
ouais la j'ai tout compris, c'est vrai que c'est vraiment plus intelligent comme ça
j'avais pensé à ajouter un champs dans la table membres mais comme ça c'est beaucoup mieux...
Je pense que je vais faire un fichier à part pour la gestion d'envoie de mail + le tableau des anniversaires..

Si tu as d'autres conseils pour optimisé moi je veux bien ! il faut un bon mod quand même ;)


bthivent
Téléchargez Greyline theme V2
 
Chef du projet FSB
Avatar de Genova
  • Age : 22 ans
  • Messages : 14347
  • Inscrit : 16 Septembre 2004
  Lien vers ce message 09 Janvier 2005, 11:46
Bah étant donné que les anniversaires sont toujours fixes un jour donné, il te suffit de calculer une seule fois la liste des membres dont le jour même c'est n'anniversaire, tu enregistre cette liste sous forme de tableau dans le cache, puis toute la journée ca t'economise la requète vu que tu include() le tableau du cache... Le lendemain tu recommances, tu recréé le cache avec la nouvelle liste, etc...


Cause Im as free as a bird now, And this bird you can not change. - Freebird - Lynyrd Skynyrd
There's someone in my head but it's not me. - Brain damage - Pink Floyd
I said baby, you know Im gonna leave you. - Babe I'm gonna leave you - Led Zeppelin
Father ? yes son, I want to kill you - The end - The Doors
 
Flamme ardente
Avatar de bthivent
  • Age : 19 ans
  • Messages : 440
  • Inscrit : 27 Novembre 2004
  Lien vers ce message 09 Janvier 2005, 11:54
euh pour séléectionner les membre dont l'anniversaire est dans les x prochains jours, sachant que leur date de naissance est enregistrée sour le format 1/1/2000, comment je peux m'y prendre ?
La seule solution que j'ai trouvé est de faire une boucle du type :
[php]<?php
$un_jour = 60*60*24;
$i = time();
$fin = $i + $config['jours_aff_anni'] * $un_jour;
while($i > $fin)
{
$sql.= ' AND date_naissance LIKE ' . date("j/n", $i);
$i = $i*$un_jour;
}
?>[/php]
mais ça risque de ralentir un peu le script..
Vous en penser quoi ?


bthivent
Téléchargez Greyline theme V2
 
Flamme ardente
Avatar de bthivent
  • Age : 19 ans
  • Messages : 440
  • Inscrit : 27 Novembre 2004
  Lien vers ce message 09 Janvier 2005, 11:55
[quot=Genova]Bah étant donné que les anniversaires sont toujours fixes un jour donné, il te suffit de calculer une seule fois la liste des membres dont le jour même c'est n'anniversaire, tu enregistre cette liste sous forme de tableau dans le cache, puis toute la journée ca t'economise la requète vu que tu include() le tableau du cache... Le lendemain tu recommances, tu recréé le cache avec la nouvelle liste, etc...[/quot]
euh ok, je vois...
ça risque d'alourdir le mod ! :O


bthivent
Téléchargez Greyline theme V2
 
Chef du projet FSB
Avatar de Genova
  • Age : 22 ans
  • Messages : 14347
  • Inscrit : 16 Septembre 2004
  Lien vers ce message 09 Janvier 2005, 12:04
Non justement faire un cache est plus rapide, mais c'est vrai que c'est un compliqué tu n'es aps obligé.

Pourquoi ne pas avoir enregistré la date de naissance sous forme de timestamp ? C'est bien plus simple non ?


Cause Im as free as a bird now, And this bird you can not change. - Freebird - Lynyrd Skynyrd
There's someone in my head but it's not me. - Brain damage - Pink Floyd
I said baby, you know Im gonna leave you. - Babe I'm gonna leave you - Led Zeppelin
Father ? yes son, I want to kill you - The end - The Doors
 
Flamme ardente
Avatar de bthivent
  • Age : 19 ans
  • Messages : 440
  • Inscrit : 27 Novembre 2004
  Lien vers ce message 09 Janvier 2005, 12:05
ouais c'est sà»r... je crois que je vais devoir faire ça !


bthivent
Téléchargez Greyline theme V2
 
Flamme ardente
Avatar de bthivent
  • Age : 19 ans
  • Messages : 440
  • Inscrit : 27 Novembre 2004
  Lien vers ce message 09 Janvier 2005, 19:14
Bon alors après avoir beaucoup hésité avec les dates, jje continu comme au début, les dates seront enregistrées dans la base de donnée comme ceci : j/m/aaaa
Mais il reste cependant un problème, c'est qu'il est impossible de gérer les personnes nées avant le 1/1/1970 (timestamp UNIX) donc il faudra avoir moins de 35 ans lol..
enfin je rigole mais j'ai toujours pas trouver de solutions.
Là je vien de finir la boite anniversaire qui marche parfaitement, et qui peut être include n'importe oà¹...
Dans le mod, je la fait mettre juste en dessous du header.
Donc il me reste : l'envoie de mail aux gens dont c'est l'anniversaire
et la possibilité de mettre sa date de naissance quand on a plus de 35 ans lol


bthivent
Téléchargez Greyline theme V2
 
Flamme ardente
Avatar de bthivent
  • Age : 19 ans
  • Messages : 440
  • Inscrit : 27 Novembre 2004
  Lien vers ce message 09 Janvier 2005, 19:26
bonne nouvelle, en réfléchissant un peu je crois que ça peut-être assez facilement résolu :
Dans la boà®te anniversaire, le calcule l'age des membres (pour le mettre en parenthèses) en soustrayant l'année actuelle, moins leur année de naissance.. :
[php]<?
$age = date("Y", time()) - $annee_naissance;
?>[php]
et comme dans la boà®te on affiche soit l'age que le membre vient d'avoir, soit l'age qu'il va avoir, ça marche tout le temps.

J'affiche aussi l'à¢ge des membres dans les sujets.
Il me suffit de faire comme celà , mais si le mois actuelle est inférieu au mois de naissance du membre, alors on enlèvera un pour avoir le résultat correct..
Cool non ? :D
maintenant le seul problème je crois est pour l'affichage de la date de naissance dans le profil public..
On pourrais croire qu'il n'y a rien de difficile, puisque on enregistre la date de naissance sous le forma j/m/aaaa...
seulement, si des anglais s'inscrivent :D il penseront au 1 septembre 1989 s'il voit 9/1/1989 ....
donc il faut que j'utilise la fonction aff_date() du forum, et pour cela, je fais un mktime() pour transformer le format initial d'enregistrement en format timestamp UNIX, le format qu'il faut utiliser pour aff_date()
Donc si quelqu'un a des solutions..
enfin là j'ai quelques idées quand même
voilou :D x)


bthivent
Téléchargez Greyline theme V2
 
Répondre


.