EN | CS | Přihlásit | Registrovat

Poll control – komponenta pro realizaci anket (hlasování)

Tento plugin umožňuje jednoduše vkládat, zobrazovat a formátovat zobrazení rúzných typů anket. V distribuci jsou dodávané dva příklady, pro anketu řízenou „odkazy“ a „formulářem“.

Verze 0.1
Download Poll-control-v0.1.tar.gz (4,5 kB)
GitHub http://github.com/…-PollControl
Ukázka http://nette.warden.cz/poll-control/
Forum thread http://forum.nette.org/…et-hlasovani
Autor Ondřej Brejla
Licence New BSD License

Instalace

Stáhněte archiv poll-control.tar.gz a jeho obsah vložte do adresáře „app/controls/“. V archivu je soubor PollControlPresenter.php, v něm je ukázka použití kódu. Odstraňte ho z adresáře PollControl. V adresáři je dále soubor „poll_control.sql“, kde se nachází vyexportovaná příkladová databáze (jednoduché řešení). Importujte ji do své databáze. Nyní máte připravené zázemí a můžete začít s implementací do Nette.

Implementace do aplikace

V presenteru (nebo ve vašich controlech) vytvořte továrničku pro vytvoření PollControlu (dle příkladového presenteru – LinkPollControl, FormPollControl). Poté je potřeba vytvořenému objektu předat objekt modelu, což je jakákoliv třída implementující rozhraní IPollControlModel. PollControl je distribuován i s příkladovým modelem, který spolupracuje s přiloženým exportem databáze. Počítá s připojením do databáze využitím informací ze souboru config.ini, které očekává ve formátu database.driver = "mysql"

V šabloně pak stačí uvést makro widget se jménem komponenty (případně použít jinou možnost vyrenderování komponenty). Pro využití AJAXu je potřeba před makro vložit zavináč.

Kontrola vícenásobného hlasování

V modelu je nastíněná možná kontrola vícenásobného hlasování. Kontrola je realizována pomocí session a pomocí kontroly IP (ukládáno do databáze). Z jedné IP je možné hlasovat jednou za 30s (je to pouze příklad), takže v případě vymazávání cookies můžete hlasovat každých 30s a testovat (nebo si přepište model a upravte chování dle svého).

Příklad použití

Následuje zdrojový kód příkladového Presenteru.

class PollControlPresenter extends Presenter {

/**
* Returns LinkPollControl component.
*
* @return PollControl Link poll control.
*/

public function createComponentPollControl() {
$poll = PollControl::factory('link');
// alternatively:
// $poll = new LinkPollControl();
$poll->setModel(new PollControlModel(1));

return $poll;
}

/**
* Returns FormPollControl component.
*
* @return PollControl Form poll control.
*/

public function createComponentPollControl2() {
$poll = new FormPollControl();
// alternatively:
// $poll = PollControl::factory('form');
$poll->setModel(new PollControlModel(1));

return $poll;
}

}

Připojené soubory


Komentáře Comments feed

radas | 21. 2. 2010, 17:55 | comment

Pokud mám na jedné stránce dvě ankety, pak po hlasování v jedné z nich se pak u druhé objeví noticka „Undefined offset: $id in …PollControlMo­del.php on line 89“, kde $id je ID otázky z databáze. Jde to samozřejmě potlačit přidáním @ před $sess->poll$this->id na tom řádku 89, ale to není systémové řešení.

radas | 25. 2. 2010, 8:33 | comment

Mám takový návrh na vylepšení. Pokud by se přidal parametr, nebylo by možné v anketě hlasovat (neexistovaly by odkazy nebo formulář). Využití by to našlo u anket, jejichž hlasování již bylo ukončeno, ale přesto se zobrazují.

radas | 25. 2. 2010, 17:48 | comment

A ještě jedna myšlenka, jak by šly ankety vylepšit. Předáním data a času od kdy do kdy má být anketa aktivní, tedy v jakém časovém intervalu by bylo možné hlasovat (viz předchozí komentář). Tyto parametry by vlastně mohly být dva sloupce v tabulce v databázi anket.

Ondřej Brejla | 23. 3. 2010, 16:56 | comment
  1. Šoupnu si to do Todo, až bude čas, tak na to kouknu.
  2. Logiku „hlasovatelnosti“ ankety šoupnout do metody isVotable() modelu. Podle booleanu, který metoda vrací, se buď odkazy zobrazí, nebo ne (a v ukázkovém modelu je na isVotable() závislé i samotné vložení hlasu do db).
  3. Opět logika isVotable(), v metodě si zjistím, jestli je „správný čas“ a anketu podle toho zobrazím, nebo ne (je „hlasovatelná“, nebo není).

Komponenta nic neříká o struktuře databáze (nebo jiného úložiště), ve kterém je anketa uložena, pouze definuje rozhraní modelu, se kterým pracuje.

Nicméně až budu dělat opravy a úpravy, tak to případně přidám.

Díky.

Login to submit a comment