Autor | Zpráva | ||
---|---|---|---|
mackopu Profil |
#1 · Zasláno: 26. 6. 2009, 12:38:15
Především ve firemních a skupinových webech se hodí použítí aplikace, která členům komunity rozesílá e-mailem upozornění na to, že dnes má jubileum ten či onen. Pokusil jsem se s uspokojivým výsledkem napsat skript, který jubileum indikuje, v případě narozenin spočítá věk a z e-mailových adres, na které upozornění odesílá, odstraní e-mail jubilanta. Ošetřuje také situaci, kdy má osoba svátek a narozeniny současně.
Pole zájmové skupiny může být zadáno napevno, ale lze jej po malé úpravě načítat i z databáze. Skript lze spouštět manuálně z komunitní administrace, na pozadí úvodní stránky hojně navštěvovaného webu, ale samozřejmě nejspolehlivější je CRON, nastavený na každodenní spouštění v brzkých ranních hodinách. Přivítám náměty na vylepšení nebo optimalizaci kódu. <?php function UrciVek($narozen) { list($den,$mesic,$rok)=explode(".",$narozen); $vek = strVal((Time()-mktime(0,0,0,$mesic,$den,$rok))/31536000); $vek = Floor($vek); return $vek; }; $lidi[] = "13.10.;11.03.1973;Renata Kosá;Renata@seznam.cz"; $lidi[] = "07.03.;23.04.1963;Tomáš Rána;rana@seznam.cz"; $lidi[] = "17.12.;29.05.1965;Daniel Suchý;suchy@seznam.cz"; $lidi[] = "28.06.;23.07.1969;Luboš Andrle;infoandrle@seznam.cz"; $lidi[] = "29.06.;21.09.1960;Petr Kučera;petr.kucera@seznam.cz"; $lidi[] = "21.03.;06.11.1966;Radek Novotnyk;studio-novotny@seznam.cz"; $dnes = Date("d.m."); for($i=0; $i<count($lidi); $i++) { list($svatek,$narozeniny,$jmeno,$email) = explode(";",$lidi[$i]); if($dnes == $svatek) { // pokud má svátek $coma = "svátek"; $hobluj_1 = true; } if($dnes == substr($narozeniny,0,6)) { // pokud má narozeniny $vek = UrciVek($narozeniny); // spočítám věk $coma = "narozeniny (".$vek." let)"; $hobluj_2 = true; } if($hobluj_1 && $hobluj_2) { // pokud má narozeniny i svátek současně $coma = "svátek a narozeniny (".$vek." let)"; } if($hobluj_1 || $hobluj_2) { // pokud má narozeniny nebo svátek // načtu maily do pole for($x=0; $x<count($lidi); $x++) { list($svatek,$narozeniny,$jmeno,$email) = explode(";",$lidi[$x]); $maily[] = $email; } array_splice($maily, $i, 1); // odstraním email osoby s jubileem $komu = implode(", ",$maily); // rozdělím pole mailů čárkou a mezerou pro odeslání $headers = "From: Nazev komunity <info@komunita.cz>\n"; $headers .= "Content-Type: text/plain; charset=windows-1250\n"; $predmet = "Nazev komunity - Automaticke upozorneni na jubileum"; $body = "Dnes má $coma $jmeno !!!\n"; $body .= "\n\nTato zpráva je generována automaticky."; @mail($komu, $predmet, $body, $headers); } // vynulování proměnných $coma = ""; $hobluj_1 = false; $hobluj_2 = false; $komu = ""; $headers = ""; $predmet = ""; $body = ""; unset($maily); // vyprázdním pole mailů } ?> |
||
petr 6 Profil |
#2 · Zasláno: 26. 6. 2009, 13:55:57 · Upravil/a: petr 6
5. a 6. radek bych zkratil na
$vek=date("Y")-$rok |
||
mackopu Profil |
#3 · Zasláno: 26. 6. 2009, 14:04:00
Děkuji za reakci. Máš pravdu. Přesto jsem použil už hotovou univerzální funci, která zjišťuje věk v kterémkoliv okamžiku. Zde je trochu nadbytečná, ale může být inspirací pro někoho, kdo zvažuje její použití i v jiných případech.
|
||
Časová prodleva: 12 měsíců
|
|||
kukweb Profil |
#4 · Zasláno: 14. 6. 2010, 21:41:25
Nebylo by mozne udelat upravu tohoto kodu s nacitanim z databaze. Jinak dekuji, neco podobneho jsem dlouho hledal.
|
||
tiso Profil |
mackopu: ten skript je neefektívny:
- posiela samostatný mail pre každého oslávenca - má zložitost NxN miesto 2xN - zbytočne ukladá duplicitné dáta o tom kto má meniny Vhodnejšie by bolo riešenie s databázou. edit: teraz pozerámm>m že je to staré vlákno. Moderátor Chamurappi: Tentokrát to asi moc nevadí…
|
||
mackopu Profil |
#6 · Zasláno: 15. 6. 2010, 09:20:48
kukweb:
Řádky 10 - 15 nahradíš tímto: $result = mysql_query("SELECT svatek, narozeniny, jmeno, prijmeni, email FROM tvoje_tabulka"); while ($zaznam = mysql_fetch_array($result)) { $lidi[] = $zaznam["svatek"].";".$zaznam["narozeniny"].";".$zaznam["jmeno"]." ".$zaznam["prijmeni"].";".$zaznam["email"]; } tiso: Nepředpokládám nasazení pro řádově stovky či tisíce e-mailů, kde by se neefektivnost teprve projevila. To už by zavánělo spamem. |
||
Časová prodleva: 3 dny
|
|||
kukweb Profil |
#7 · Zasláno: 18. 6. 2010, 18:25:31
Diky za upravu. Nakonec jsem nasel neco na netu a pouziju cast tveho kodu. Aby vse pracovalo, jak ja chci.
phpbirthday |
||
Časová prodleva: 13 let
|
0