Komentáře ke článku které se po přidání překreslí
- jAkErCZ
- Člen | 322
Zdravím,
Mám udělané články a rád bych s k nim udělal možnost přidat komentáře..
Všechno tak nějak mám ale je tu pár věcí kde prostě nevím jak pokročit…
Udělal sem si funkci na výpis komentářů ale problém nastává v tom že mi to vypisuje reply komentáře jako hlavní ale přitom bych rád aby mi to vrátilo hlavní komentáře a pod nimi by byli případné odpovědi pokud jsou… takže by mi to vrátilo něco jako 2× foreach jeden na hlavní a v něm další na odpovědi… třeba
Struktura kometářů
comment_id int(11) Auto Increment
user_id int(11)
article_id int(11)
parent_id int(11) NULL
content text
created_at timestamp [CURRENT_TIMESTAMP]
images int(11) [0]
pak bych chtěl udělat že pokud člověk přidá článek tak se článek jen přidá pod ostatní bez reloadu stránky… a poté když klikne na reply tak mu to v textovým poli napíše placeholder=„Odpovídáte na komentář uživetele JMÉNO“
<div class="comments">
<h4 class="page-header"><i class="fa fa-comment-o"></i> Comments ({$comments_count})</h4>
<a href="#" class="btn btn-block btn-primary text-left margin-bottom-30"><i class="fa fa-spinner fa-pulse margin-right-10"></i> Load more 4 comments</a>
{snippet comments}
<div n:foreach="$comments as $comment" class="media">
<a class="media-left" href="#">
<img src="{$basePath}/images/user/avatar3.jpg" alt="" />
</a>
<div class="media-body">
<div class="media-content">
<a href="#" class="media-heading">{$comment->user->username}</a>
<a n:if="$user->isLoggedIn()" n:href="reply! $comment->user->user_id" class="btn btn-sm btn-primary pull-right ajax">reply</a>
<span class="date">{$comment->created_at|date:'j. n. Y H.i'}</span>
<p>{$comment->content}</p>
</div>
<div class="media">
<a class="media-left" href="#">
<img src="{$basePath}/images/user/avatar.jpg" alt="" />
</a>
<div class="media-body">
<div class="media-content">
<a href="#" class="media-heading">YAKUZI</a>
<a href="#" class="btn btn-sm btn-primary pull-right">reply</a>
<span class="date">April 15, 2016 at 13:00 am</span>
<p>Duis ultricies commodo accumsan. Donec augue leo, feugiat lobortis ex ut, convallis blandit arcu.</p></div>
</div>
</div>
</div>
</div>
{/snippet}
<div class="comment-form">
<h4 class="page-header">Leave a comment</h4>
{if ($user->isLoggedIn())}
<form n:name="commentForm">
<div class="form-group">
<textarea n:name="content" class="form-control" rows="6" placeholder="Your Comment"></textarea>
</div>
<input type="submit" id="addCommentForm" n:name="send" class="btn btn-primary btn-rounded btn-shadow pull-right" value="Submit Comment">
</form>
{else}
<p>Pro přidání komentáře je nutné se přihlásit</p>
{/if}
</div>
</div>
public function renderDefault($url)
{
if (!$url) $url = $this->redirect(':Front:Homepage:default'); // Pokud není zadaná URL, vykreslí se hlavní stránka.
if (!($article = $this->articleManager->getArticle($url))) throw new BadRequestException();
/* Načítání funkcí */
$comments = $this->articleManager->getComments($article->article_id);
bdump($comments);
/* Načítání funkcí do šablony */
$this->template->article = $article; // Předá článek do šablony.
$this->template->comments_count = $article->related('comment')->count();
$this->template->comments = $comments;
$this['commentForm']->setDefaults([
'user_id' => $this->user->id,
'article_id' => $article->article_id,
]);
}
public function handleReply($parent_id){
if ($this->isAjax()) {
$this['commentForm']->setDefaults([
'parent_id' => $parent_id,
]);
bdump($parent_id);
}
$this->redrawControl('flash');
}
protected function createComponentCommentForm()
{
$form = new Form; // means Nette\Application\UI\Form
$form->addHidden('user_id');
$form->addHidden('article_id');
$form->addHidden('parent_id');
$form->addTextArea('content', 'Komentář:')
->setRequired();
$form->addSubmit('send', '');
$form->onSuccess[] = [$this, 'commentFormSucceeded'];
return $form;
}
public function commentFormSucceeded(Form $form, ArrayHash $values)
{
if ($this->isAjax()) {
$this->flashMessage('Děkuji za komentář', 'success');
$this->redrawControl('comments');
bdump($values);
} else {
$this->flashMessage('Nefunguje', BasePresenter::MSG_ERROR);
}
}
Můj model kde se pokouším vymyslet aby to vracelo zvlášť v jiným foreach ty odpovědi…
public function getComments($article_id, $parent_id = NULL){
if ($parent_id === NULL) {
$comment = $this->database->table(self::TABLE_COMMENTS)->where(self::COLUMN_COM_ARTICLE_ID, $article_id)->order('created_at')->fetchAll();
} else {
}
return $comment; // vrátit komentáře
}
Tady jsem se o něco pokoušel ale ty ten snippet se nepřekreslil a nevím proč..
Všem děkuji za rady a pomoc.
Editoval jAkErCZ (10. 10. 2018 14:59)
- Pavel Kravčík
- Člen | 1196
Nepřekreslení snippetu může mít mnoho příčin:
- Rozchozený ajax v Nette
- Pokud nette.ajax – třída „ajax“ u odkazu
- Správná struktura (nevolá se z komponenty jinam apod)
- Pokud je to zanořené (include) musíš použít {snippetArea}
Tipuji problém v zanořené komponentě – viz https://doc.nette.org/…ication/ajax#…
PS: Být Tebou zkusil bych mrknout po nějaké práci, zkus najít nějakou juniorskou pozici, kde Ti tyhle věci vysvětlí on-site a mnohem rychleji, než když založíš každý týden na fóru „plachtu“ (čti: dlouhé vlákno).