ForumControl
Doplněk umožňuje jednoduché vytváření diskuzních fór ve stylu, který se dá považovat za standard na webech jako jsou Root.cz, Zdroják.cz, Lupa nebo Živě.
Komponenta je napsána pro PHP 5.3 a Nette Framework 2.0 (20110804). Jedinou použitou knihovnou (kromě Nette) je knihovna dibi.
Databázový model diskuzního fóra (MySQL) vychází z článku Diskuze s reakcemi, který uveřejnil Jakub Vrána na svém blogu. Z něj je patrné, že pro úspěšné provozování fóra je potřeba pro uživatele databáze oprávnění k zamykání tabulek. Výhodou Jakubova přístupu je vždy jen jeden SQL dotaz, kterým lze zobrazit buď všechny názory v diskuzi nebo jen vybrané.
| Verze | 1.2.0 |
| Download | ForumControl.zip (178 kB) |
| GitHub | https://github.com/radekdostal/Nette-ForumControl/ |
| Fórum | http://forum.nette.org/cs/7146-komponenta-forumcontrol-pro-diskuzni-fora |
| Autor | Radek Dostál |
| Licence | GNU Lesser General Public License |
| PHP | 5.3 |
Instalace
V archivu je doplněk již součástí ukázkové aplikace. Samotná komponenta se nachází v adresáři lib/Nette/Extras/ForumControl.
Součástí distribuce je rovněž SQL skript, který vytvoří dvě databázové tabulky – forum pro diskuzní fóra a forum_threads pro názory v těchto fórech.
Implementace
Prvním krokem je vytvoření továrničky na komponentu – viz metoda createComponentForumControl(). V této metodě se vytvoří instance modelu a společně s namapovanými parametry se předá konstruktoru třídy ForumControl. Model je součástí distribučního archivu. Nic ovšem nebrání použití jiného modelu, za předpokladu, že tento bude implementovat rozhraní IForumControlModel a zachovávat aliasy sloupců databázových tabulek.
Druhým a posledním krokem je už jen vykreslení komponenty do šablony default.latte.
Příklad použití
Metody v presenteru:
/**
* Forum Control component
*
* @access protected
* @return ForumControl
*/
protected function createComponentForumControl()
{
$forumId = 1; // 1 = forum ID from table "forum"
$model = new ForumControl\ForumControlModel($forumId, new \DibiConnection($this->context->params['database']));
// Params mapping
$params = array(
'topicId' => $this->getParam('id'),
'allTopics' => $this->getParam('id2'),
'selectedTopicsIds' => array('name' => 'o', 'value' => $this->getParam('o'))
);
return new ForumControl\ForumControl($this->context, $model, $params);
}
/**
* Discussion forum
*
* @access public
* @param int $id topic ID to reply (0 = new topic)
* @param int $id2 view all topics? (1 = yes)
* @return void
*/
public function actionDefault($id, $id2)
{
}
Kód v šabloně default.latte:
{block #content}
{control forumControl}
Ukázky použití
Poznámka
Je-li např. podstrčeno neexistující ID názoru, na který se reaguje, komponenta nastaví výchozí zobrazení.
Komentáře 
radas | 31. 8. 2011, 10:55 | comment
V této verzi mazání v modelu není, přes frontend tedy zatím mazat nelze. Nicméně kód metody pro mazání k dispozici mám (zamykají se tabulky, mění se pořadí, …), zahrnu jej do nové verze.
Pepis | 9. 11. 2011, 22:41 | question
Ahoj, jsem úplný začátečník a chtěl jsem vyzkoušet ForumControl, ale když spustím index.php, tak mi laděnka vypíše chybu
Fatal Error Class ‚SimpleRouter‘ not found
28: $router[] = new SimpleRouter(‚Default:default‘);
Poraďte co s tím, díky.
radas | 3. 1. 2012, 14:26 | comment
Doplněk používá verzi Nette pro PHP 5.3 se jmennými prostory. Používáš správně klauzuli „use“?
Jamicon | 26. 1. 2012, 19:17 | question
Ahoj, vyskúšal som komponentu, páči sa mi a celkom som sa s ňou žil. Vyskúšal som verziu Nette-2.0-rc1 a zrazu všetky presentery, ktoré ju využívajú končia chybou. Možno je problém inde, písal som o nej na fóre.

aannubis | 29. 8. 2011, 11:14 | question
Řešil někdo, jak mazat příspěvky? Hádám, že tam bud v modelu nějaký háček, s nutností něco přepočítat..?