Hledat:
Obsah fora > Visual PHP™ > Tvorba prezentací > Ankety
Registrovat | Přihlásit
 

Ankety

od (September 20, 2009 1:23:59 PM)

Dobrý den, potřeboval bych help ohledně anket.

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,

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,

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,

4) je možné 1. den v měsíci odeslat e-mail s výsledky proběhlé ankety?

5) když db anket bude prázdná odeslat eml s upozorněním?

Omlouvám se, že jsem to na Vás takto vybalil, ale možná to pomůže více developerům a možná by se to mohlo i dát do manuálu pod "často kladené dotazy" 

Děkuji 


Přílohy:

od: (Enterprise)

   
 

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


od: (Technická podpora)

   
 

Ankety

od (September 23, 2009 5:19:56 PM)

Super, děkuji naprosto dokonale vysvětleno i s kodem ;-)

5) když db anket bude prázdná odeslat eml s upozorněním?

Myslel jsem to že když se už budou ankety vyčerpány tak aby to admina upozornilo že je má doplnit...upravím dotaz

5) nastavit upozorněni na poslední třeba 3 měsíce před vyčerpáním anket...(když budeme mluvit o měsíční výměně a anketa se nebude nikdy opakovat)

Už je to jasnější? :-)



od: (Enterprise)

   
 

Ankety

od (September 23, 2009 8:37:22 PM)

Co třeba toto?

Založit časový skript, který se bude spouštět každý den nebo týden a bude kontrolovat počet anket s datem v budoucnu? Když bude počet nulový, tak už žádné nejsou a je potřeba je doplnit...

Kód časového skriptu:
$records = getTable("votes")->getRecords("filter=date>NOW()");
if (count($records) == 0)
{  
    // poslu email
}

od: (Technická podpora)

   
 

Ankety

od (January 21, 2010 11:12:51 PM)

Dobrý den, ještě bych měl dotaz ohledně nastavení ve Vižli.
 
Jde mi o to, že filtr
SELECT  * FROM  `cms_votes` WHERE  `date`  <=  NOW() ORDER  BY  `date`  DESC  LIMIT 1
nebo také
SELECT  * FROM  `cms_votes` WHERE `date` > NOW() - INTERVAL 1 MONTH AND `date` <= NOW()


Správně funguje při zadávání datumu anket vždy na první den v měsíci např. 01.01.2010, 01.02.2010, 01.03.2010 atd. Když se zadá např. 02.01.2010 tak se anketa změní až 2.1.2010

Tak mě napadá jestli se nedá nějak upravit možnost výběru datumu pro admina aby tam byl pouze měsíc a rok, nebo při výběru s kalendáře jakéhokoliv datumu aby se nastavil vždy první den v měsíci.

V nastavení tabulky je na výběr date, time a nebo date and time.

Nebo jiné řešení? Můžete mi poradit? ;-)

Děkuji JP

 
 

Přílohy:

ankety

ankety1

od: (Enterprise)

   
 

Ankety

od (March 18, 2010 7:48:16 PM)

Dobrý večer

pochopil jsem to tak, že ať zadá uživatel jakékoli datum, potřebujete mít vždy pouze první den v měsíci. Můžete u pole date využít například události onGetDBValue(), která se volá před uložením zadané hodnoty do databáze. Do této události stačí vložit tento kód:

$value = $beforeRecordValues["date"];

return(date("Y-m", _strtotime($value))."-01");
funkce _strtotime() je podobná běžné funkci strtotime, ale umí rozpoznat i lokalizovaný zápis datumu - tedy například české dd.mm.rrrr. Funkcí date si naformátujeme rok a měsíc a připojíme natvrdo den "-01". Výsledkem tedy pro 12.5.2010 bude SQL datum 2010-05-01 a tato hodnota se uloží do databáze.

od: (Technická podpora)

   
Pages: 1
 

Zpět na stránky Visual PHP™ | Product | Technical support | Version | Video exhibits | Manuals | Contact
Powered by: Visual PHP™ Forum
* Tato technická podpora není jen otázkou klienta a odpovědí tvůrce software. Slouží i jako fórum mezi Vámi, našimi klienty samotnými. Nebojte se reagovat na příspěvek, když znáte odpovědi. Vyměňujte si zkušenosti s produktem Visual PHP™. Systém Visual PHP™ je jedinečný a lze v něm provádět jednu operaci více způsoby. Pochlubte se ostatním, pokud naleznete nový a jednodušší způsob, jak určitou součást řešit. Pomáháte tím sami sobě a zároveň se spolupodílíte na rozvoji celého systému.