Ankety
od
(September 23, 2009 4:54:43 PM)
1) nevím (nedal jsem to dokupy ani podle php manuálu) co dát do date->getDate() aby se mi zobrazoval pouze název měsíce,
pro zobrazení měsíce použijte [date.getMonth()] - viz manuál - komponenta DATETIME
2) jaký filtr zadat do table content, aby se mi zobrazovala pouze aktuální anketa na daný měsíc? (ankety budou vytvořeny dopředu a podle tohoto parametru se nastaví vždy aktuální)
obr.1,
Stačí toto nastavení:
Filtr (where): date <= NOW()
Seřadit (order by): date DESC
Položek na stránce: 1
nebo lze pro ankety použít globálně filtraci, abyste si na to nemusel pořád myslet. Ve vlastnostech tabulky zadejte do
Filtrace (www) hodnotu
date <= NOW(). Tento filtr bude aplikován na každý Table Content, který čte z této tabulky.
3) jak udělat, aby v přehledu všech anket se zobrazily jen ty co už proběhly (podle měsíců v roce a už byly jen readonly - zřejmě to asi bude nějak směrované na šablonu votes_readonly) obr.2,
Upravte si layout votes tak, že přidáte další SQL filtr:
Filtr (where): date < DATE_ADD(NOW(), INTERVAL -1 MONTH)
Šablona: votes_readonly
Jak si nastavíte filtraci podle datumu už je na Vás, berte to jako ukázku zobrazení anket starších 1 měsíce. Více informací o možnostech SQL filtrací naleznete v mySQL manuálu:
http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#function_date-add
4) je možné 1. den v měsíci odeslat e-mail s výsledky proběhlé ankety?
Určitě. Zde přicházejí v úvahu například časové skripty. Přejděte do nabídky
Prezentace -> Časové skripty a založte nový s tímto nastavením:
Identifikátor (tid): votes_mail
Minuty: 00
Hodiny: 00
Dny: 1
Měsíce: [zaškrtněte všechny]
Dny v týdnu: [zaškrtněte všechny]
Do kódu vložte např. tento příklad:
// najdeme první a poslední den v minulém měsíci
$DateTime = createObject("DateTime");
$DateTime->add("month", -1);
$DateTime = $DateTime->BOM();
$firstDay = $DateTime->asString();
$DateTime = $DateTime->EOM();
$lastDay = $DateTime->asString();
$mailBody = "";
// načteme ankety z předchozího měsíce
$voteRecords = getTable("votes")->getRecords("filter=DATE(date)>=DATE('".$firstDay."') AND DATE(date)<=DATE('".$lastDay."')");
foreach($voteRecords as $voteRecord)
{
$mailBody .= $voteRecord["name"].":\n";
// nactu položky hlasování
$voteItemRecords = getTable("vote_items")->getRecords("parent=".$voteRecord["id"]);
foreach($voteItemRecords as $voteItemRecord)
{
$mailBody .= " - ".$voteItemRecord["percent"]."% \n";
}
$mailBody .= "\n\n";
}
$Mail = getObject("Mail");
$Mail->setRecipient("zc.liame@savi");
$Mail->setSubject("Výsledky anket za minulý měsíc");
$Mail->setBody($mailBody);
$Mail->send();
Každý první den v měsící dojde ke spuštění tohoto skriptu. Pokud byste potřeboval tento skript ladit, je možné jej aktivovat ručně pomocí volání:
http://www.domena.cz/cron.php?tid=votes_mail
5) když db anket bude prázdná odeslat eml s upozorněním?
Zde trochu nerozumím požadavku