Autor | Zpráva | ||
---|---|---|---|
piiiiiiiip Profil |
#1 · Zasláno: 16. 7. 2016, 20:44:54
Udělal jsem si v Nette vypisování článků. Když článek rozkliknu tak ho chci mít možnost komentovat. Udělal jsem si tedy k modelu, presenteru a template toho článku ještě model a presenter pro komentáře (zatím jen vypisování). Nevím ale jak ty komentáře dostat do šablony toho článku.
|
||
Alphard Profil |
#2 · Zasláno: 16. 7. 2016, 21:34:14
Jestli mají být komentáře na stejné stránce se článkem, je třeba je načíst v presenteru článku, nejde to zcela oddělit.
Konkrétní implementace šablony záleží na návrhu, mohla by to být třeba komponenta, ale jestli začínáte, nebál bych se přidat je jako includovaný blok přímo k tomu článku. public function renderArticle($id) { $this->template->article = $articlesModel->find($id); $this->template->comments = $commentsModel->findByArticle($id); } |
||
piiiiiiiip Profil |
Když udělám šablonu pro komentáře a do šablony pro článek dám
{include 'comments.latte'} Undefined variable: comments. Edit: Už jsem nato přišel. Funkce v modelu: public function getComments($url) { return $this->database->table(self::TABLE_NAME)->WHERE(self::COLUMN_URL, $url); } když ale na konec připíšu fetch() tak mi to vypíše jeden komentář ale tu chybu ne. Nevíte proč? |
||
Alphard Profil |
#4 · Zasláno: 16. 7. 2016, 23:12:12
comment_content je název sloupce? Metoda fetch() vyhodnotí dotaz a vrátí výsledek. Dokud ji nezavoláte, tak pracujete s instancí Table\Selection.
Když těch komentářů chcete více, použijte foreach, pak se implicitně zavolá fetchAll(), nebo tak něco. |
||
piiiiiiiip Profil |
#5 · Zasláno: 16. 7. 2016, 23:24:05
Už to běží, děkuji za pomoc :)
|
||
piiiiiiiip Profil |
Ještě se chci zeptat jak dostanu proměnou url článku, podle které se určí k jakému článku komentář patří do formuláře pro přidávání komentářů? Formulář vytvořím v presenteru článků ve kterém jsem s tou proměnnou už pracoval, ale když ji chci dát do toho formuláře:
$form->addText('comment_url', 'URL')->setRequired()->setValue($url); |
||
Keeehi Profil |
#7 · Zasláno: 17. 7. 2016, 15:19:19
Na první pohled nevidím chybu. Jedině, že bys v proměnné url měl něco jiného než si myslíš.
Jinak předávat si URL mi přijde zbytečné. Pokud by SIS chtěl něco předávat, pak by bylo asi hezčí ID článku. Ale ani to by nemělo být potřeba. Formulář je v nějakém presenteru a ten zná svoji URL i parametry. Z formuláře bys tedy měl být schopen zjistit, co je v URL a tudíž i potřebný identifikátor. |
||
piiiiiiiip Profil |
#8 · Zasláno: 17. 7. 2016, 15:33:46
Já jsem se nato snažil přijít asi čtyři hodiny ale tu chybu prostě nemůžu najít.
Takto si vytvořím formulář pro komentování v ArticlePresenter.php. protected function createComponentEditorFormm($url) { $form = new Form; $form->addGroup('Komentuj'); $form->addHidden('comment_id'); $form->addText('comment_url', 'URL')->setRequired()->setValue($url); $form->addText('posted_by', 'Autor:')->setRequired(); $form->addTextArea('comment_content', 'Komentář:')->setRequired(); $form->setCurrentGroup(NULL); $form->addSubmit('submit', 'Odeslat'); $form->onSuccess[] = [$this, 'editorFormmSucceeded']; return $form; } |
||
Taps Profil |
#9 · Zasláno: 17. 7. 2016, 15:52:24
Podivej se na doc.nette.org/cs/2.4/http-request-response
|
||
piiiiiiiip Profil |
#10 · Zasláno: 17. 7. 2016, 15:59:17
Já nepotřebuju nic s URL adresou. Já mám v databázi v tabulce pro články sloupec url do kterého se zapisuje název článku bez speciálních znaků. Takže když mám článek jménem Úvod tak se do url v db uloží uvod a když chci článek přečíst tak zadám url adresu web.cz/test. Když pod ten článek napíšu komentář tak ta proměnná url z db se uloží i do tabulky komentáře abych věděl který komentář patří k jakému článku ale nemůžu tu proměnnou uložit do tabulky pro komentáře protože ji nedostanu do formuláře.
|
||
Taps Profil |
#11 · Zasláno: 17. 7. 2016, 16:14:50
Tim padem musis pres model ziskat radek z databaze, ktery se vztahuje ke konkretnimu clanku. Vytahnout z nej url a nastavit ji jako setValue formularovemu poli
|
||
piiiiiiiip Profil |
#12 · Zasláno: 17. 7. 2016, 16:27:53
To už ale mám. Kdybych to neměl tak ten článek přece nevypíšu. Já to akorát nedostanu do toho formuláře.
|
||
Taps Profil |
#13 · Zasláno: 17. 7. 2016, 16:44:39
Dival ses na pla.nette.org/cs/vychozi-data-pro-editacni-formular ?
|
||
piiiiiiiip Profil |
#14 · Zasláno: 17. 7. 2016, 16:47:51
Já tam potřebuju jen dostat tu proměnnou a nic víc.
|
||
Keeehi Profil |
#15 · Zasláno: 17. 7. 2016, 17:11:04
Takhle se ale data do komponenty nepředávají.
createComponentEditorFormm($url) Z dokumentace Metoda createComponent($name) zavolá v aktuální komponentě metodu createComponent<název komponenty> a jako parametr jí předá název komponenty. Volal bych něco jako $this->getPresenter()->request->getParameter("jméno identifikatoru v url") |
||
piiiiiiiip Profil |
#16 · Zasláno: 17. 7. 2016, 17:30:11
Odeslaný formulář zpracovávám takto:
public function saveComment($comment) { if(!$comment[self::COLUMN_ID]) $this->database->table(self::TABLE_NAME)->insert($comment); else $this->database->table(self::TABLE_NAME)->WHERE(self::COLUMN_ID, $comment[self::COLUMN_ID])->update($comment); } |
||
Taps Profil |
Podle me cela ta problematika vlozeni komentare je zbytecne komplikovana. Tak jak podotkl [#7] Keeehi v praxi se nejcasteji pouziva id (clanku, komentare)..tim je zaroven i zajistena unikatnost zaznamu, se kterym budes pozdeji pracovat (editovat, mazat). Vlozeni a nasledna editace komentare je z meho pohledu zbytecna.
V praxi se nejcasteji jedna o ulozeni komentare (1 sql prikaz). Pri ulozeni komentare se zaroven ulozi jeho unikatni id (neni potreba zadna nasledna editace) |
||
piiiiiiiip Profil |
#18 · Zasláno: 17. 7. 2016, 19:57:00
ID článků je article_url (je unikátní). To id článku (article_url) musím uložit do komentáře když ten článek komentuji. Kdybych to neudělal tak se mi vypisují všechny komentáře ke všem článkům. já akorát nevím jak to id článku (article_url) do toho komentáře dostat. Když jsem to dělal ve statickym php tak to nebyl problém, tet se ale učím to nette a nevím jak to udělat.
|
||
Taps Profil |
#19 · Zasláno: 17. 7. 2016, 20:44:24
piiiiiiiip:
Mas to nekde na ftp, ze bych se na to podival? |
||
piiiiiiiip Profil |
#20 · Zasláno: 17. 7. 2016, 22:01:20
Nemám. Můžu sem dát kod jestly to pomůže.
|
||
Taps Profil |
#21 · Zasláno: 17. 7. 2016, 22:29:26
Zipni mi tu appku a posli na mail ( mam ho v profilu).Podivam se na to
|
||
CZechBoY Profil |
#22 · Zasláno: 17. 7. 2016, 22:39:43
Lepší dát na github
|
||
Časová prodleva: 3 dny
|
|||
piiiiiiiip Profil |
#23 · Zasláno: 20. 7. 2016, 11:38:15
Github nepoužívám.
|
||
Kcko Profil |
#24 · Zasláno: 20. 7. 2016, 21:45:52
Děkujeme za informaci.
|
||
piiiiiiiip Profil |
#25 · Zasláno: 21. 7. 2016, 12:29:56
Jinak už jsem nato přišel. Pokut to někoho bude zajímat.
ArticlePresenter: ¨ public function editorFormmSucceeded($form, $values) { try{ $data = $values; $data['comment_url'] = $this->getParam('url'); $url = $this->commentsManager->saveComment($data); $this->flashMessage('Komentář byl uložen.'); $this->redirect(':Core:Article:', $values->comment_url); } catch (UniqueConstraintViolationException $ex) { $this->flashMessage('Komentář s tímto URL již existuje.'); } } |
||
Kcko Profil |
piiiiiiiip:
Nic moc řešení, URL si přes GET skutečně posílat nemusíš, dá se to vyřešit uvnitř objektu, podívej se na příklady na NETTE do cookboku, někdo Ti už sem odkaz dal (Taps). PS. Nejlepší bude, pokud se na Nette budeš ptát na oficiálním fóru a pokud ještě zapracuješ na svojí bídné češtině bude to velké plus. |
||
piiiiiiiip Profil |
#27 · Zasláno: 22. 7. 2016, 19:51:19
|
||
Časová prodleva: 12 dní
|
|||
piiiiiiiip Profil |
#28 · Zasláno: 3. 8. 2016, 13:01:05
Pročítal jsem si doc.nette.org a tam ty komentáře v jednom z těch příkladů řešily takto:
$data['comment_url'] = $this->getParameter('url'); akorát použily id místo url. Což je to samé jako getParam() nebo né? |
||
Jan Tvrdík Profil |
#29 · Zasláno: 4. 8. 2016, 10:50:59
piiiiiiiip:
Metoda getParam() je už dlouho dobu deprecated, v budoucnu bude pravděpodobně odstraněna. Měl bys vždycky používat getParameter() .
|
||
piiiiiiiip Profil |
#30 · Zasláno: 4. 8. 2016, 10:59:30
Ano tu už tet používám.
|
||
Časová prodleva: 9 let
|
0