Best practice – Řešení komentářů
- David Zadražil
- Člen | 62
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
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
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
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
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
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
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
@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
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
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
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)