ForumControl - doplněk pro Nette Framework

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 (využívá jmenné prostory) 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é.

Instalace

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:
/**
 * Komponenta diskuzního fóra
 *
 * @access protected
 * @return ForumControl
 */
protected function createComponentForumControl()
{
  $forumId = 1;  // 1 = ID diskuzního fóra z tabulky forum
  $model = new ForumControl\ForumControlModel($forumId, new \DibiConnection($this->context->params['database']));

  // Mapování parametrů
  $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);
}

/**
 * Diskuzní fórum
 *
 * @access public
 * @param int $id ID vlákna na které se reaguje (0 = nový názor)
 * @param int $id2 příznak pro zobrazení všech příspěvků (hodnota 1)
 * @return void
 */
public function actionDefault($id, $id2)
{
}
    
Kód v šabloně
{block #content}
{control forumControl}
    
Je-li např. podstrčeno neexistující ID názoru, na který se reaguje, komponenta nastaví výchozí zobrazení.

Ukázky použití

Komponenta ForumControl
Výchozí zobrazení komponenty
Komponenta ForumControl
Přidání nového názoru
Komponenta ForumControl
Zobrazení vybraných názorů
Komponenta ForumControl
Zobrazení všech názorů

Ke stažení

Verze: 1.2.0
Autor: Radek Dostál
Licence: GNU Lesser General Public License
GitHub: https://github.com/radekdostal/Nette-ForumControl/
Download: ForumControl.zip