Best practice – Řešení komentářů

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
David Zadražil
Člen | 62
+
0
-

Zdravím všechny,

dnes jsem se zamyslel nad tím, jak bych mohl vyřešit vytváření a načítání komentářů na místě, kde mě zrovna napadne. Abych to lépe vysvětlil, představoval jsem si něco jako, že v šabloně napíšu {control comments} a místo toho se mi vykreslí formulář na přidání komentáře a již komentáře napsané.

Začal jsem psát doplněk. Ale nevím si teď moc rady jak zjišťovat, na jaké URL se uživatel právě nachází, aby se podle toho komentáře vypsali. Jde mi o to, že pokud použiji něco jako:

// Zjišťování URL aktuální stránky
$requestParameters = $this->request->getParameters();
$url = $this->request->getPresenterName().':'.$requestParameters['action'];

a $url přiřadím ke každému napsanému komentáři do tabulky v databázi, tak potom nastane problém, když například změním název článku. Možná, nebo spíše určitě je tohle nesmysl, ale nenapadá mě jak jinak bych to mohl řešit a proto se ptám těch zkušenějších.

Díky za rady.

Tomas Jancik
Člen | 103
+
0
-

delam zrovna neco podobneho a chtel jsem to resit tak, ze si do doplnku sam nastavim ID, ktere chci…

takze treba v presenteru

$this['comments']->setId('myId');

a nebo v sablone

{control comments $myID}

zatim to mam rozpracovany, tak mozna jeste svuj nazor zmenim

David Zadražil
Člen | 62
+
0
-

To ale bude pořád záviset na nějakém ID, které ty určíš. Já jsem to chtěl tak trochu zautomatizovat a to hlavně proto, že předtím jsem měl například komentáře pouze u článků a řešil jsem tím, že do tabulky comment jsem dal article_id a potom jsem to vypisoval.

Tomas Jancik
Člen | 103
+
0
-

a co vzit nazev clanku, ktery uz mas a jen ho prohnat databazi a najit k nemu potrebne ID a to potom ukladam ke komentarum?

David Zadražil
Člen | 62
+
0
-

To mi taky nepřijde úpně vhodný, protože když to bude nějaká statická stránka, třeba pravidla k nějaké soutěži, tak už se mi to bude blbě prohledávat v tabulce s článkama. Proto jsem chtěl nějak pracovat s tou URL. Ale na tohle asi nebude existovat nějaký super řešení.

Tomas Jancik
Člen | 103
+
0
-

dalsi co me napada… nazev clanku asi nebdes menit moc casto, a kdyz uz by se to stalo, provedes nad tabulkou s komentari update

Arynev
Člen | 33
+
0
-

Použijte tabulku content.

content
- id
- type (Enum [article, page, …])

V tabulkách s obsahem mějte sloupec content_id a při přidávání obsahu nejprve přidejte řádek do tabulky content, id pak uložte k obsahu.

$connection->beginTransaction();
	$content = $connection->table("content")->insert(array("type" => "article"));

	$data["content_id"] = $content->id;
	$article = $connection->table("article")->insert($data);

$connection->commit();

return $article;

„Komentáře pak přidávejte k content.id

Přijde mi to jako nejschůdnější řešení, řeší to i možnost pozdějšího přidání např. hodnocení atd.

Pro vykreslení komentářů použijte komponentu comments, kde bude továrna na komentář s multiplierem a továrnana na formulář.

Editoval Arynev (31. 10. 2012 15:21)

David Zadražil
Člen | 62
+
0
-

@Arynev

Tohle vypadá dobře a hlavně použitelně, ale ještě mi zkus prosím popsat, jak bych to mohl vyřešit u těch statických stránek jak jsem psal. Tedy například komentáře pod stránkou s pravidly, nebo se soutěží, aniž bych musel stránku spojovat s databází, pokud rozumíš.

Arynev
Člen | 33
+
0
-

Rozumím. Jednoduše to asi nelze. Url adresy se mění (i když by neměli). Maximálně někde v šabloně ukládat jako nějaká metadata content_id.

{var $contentId = 1}// v šabloně statické stránky

{control comments $contentId}

Rozhodně však doporučuji „statické“ stránky ukládat do db. Stačí id, content_id a obsah. Nejlépe ještě doplnit titulek. Nemusíš k nim vytvářet administraci, stačí data uložit pomocí sql.

David Zadražil
Člen | 62
+
0
-

Nad tím už jsem také přemýšlel, budu mít teď chvíli čas to zkoušet, tak se na to vrhnu. Díky za tipy.

Aearsis
Člen | 57
+
0
-

URL bych rozhodně jako identifikátor nebral. Pak budeš chtít zobrazit přehled článků i s komentářema a už tehdy budeš znásilňovat odkazy jen aby si dostal komentáře. Vzhledem k tomu, že tu komponentu stejně musíš vytvořit v něaký továrničce, nevidím nejmenší problém v tom jí předat konstruktorem nějaký textový identifikátor – article/$id, static/$id, contest/$id atp.

EDIT: Jo, a předávání identifikátoru skrz render metodu ({control comments $id}) kvůli jistému vleklému bugu zazdí použití AJAXu – metodě se parametry nepředají.

Editoval Aearsis (31. 10. 2012 22:46)