Formular pre pridavanie komentarov, AJAX ako?
- azicko
- Člen | 7
Ahoj,
potreboval by som radu, uz neviem ako ten ajax rozchodit :) Mam niaky article a pod nim mam comment form + komentare, chcel by som po vlozeni komentara form vyprazdnit a aktualizovat iba komentare s tym ze by som neprekresloval stranku, skusal som to podla tohoto : https://pla.nette.org/…ivajici-ajax#…
Nalinkovane scripty mam v hlavnom layoute :
<script type="text/javascript" src="{$basePath}/js/jquery.js"></script>
<script type="text/javascript" src="{$basePath}/js/jquery.nette.js"></script>
<script type="text/javascript" src="{$basePath}/js/jquery.ajaxform.js"></script>
Takze : commentForm component =>
public function createComponentCommentForm($name) {
$form = new Form($this, $name);
$form->getElementPrototype()->class('ajax');
$form->addTextArea('text', 'Komentár :')
->addRule(Form::FILLED, 'Nemožeš pridať prázdny komentár');
$form->addSubmit('send', 'Odoslať');
$form->onSuccess[] = callback($this, 'commentFormSubmitted');
return $form;
}
Obslusna metoda :
public function commentFormSubmitted(Form $form) {
$data = $form->getValues();
$data['written'] = new DateTime();
$data['article_id'] = $this->getParameter('id');
$data['user_id'] = $this->getUser()->getId();
$this->commentRepository->insertComment($data);
$this->flashMessage('Komentár uložený!');
if (!$this->isAjax())
$this->redirect('this');
else {
$this->invalidateControl('comments');
$this->invalidateControl('commentForm');
$form->setValues(array(), TRUE);
}
}
Sablona :
<div id = "article">
<h2>{$article->subject}</h2>
<p>{$article->text|noescape}</p>
<p align="right"> Publikované : <b>{$article->written|date:'j. n. Y'}</b><br>
Autor : <b>{$article->user->name}</b><br>
<a href="javascript:changeVisibility('comments');"><span>Komentáre</span></a></p>
<!-- <a href="#" id="link" onclick="changeVisibility('comment');"><span>Print Directions</span></a><p>-->
</div>
{block #comments}
{snippet commentForm}
{if $isLoggedIn}
{control commentForm}
{else}
<strong>Po prihlásení budeš mocť komentovať aj ty :), tak šup šup.</strong>
{/if}
{/snippet}
{snippet comments}
<div class="comments" id ="comments" style="display:block;">
<h3>Komentáre : </h3>
{foreach $flashes as $flash}
<div class="flash {$flash->type}">{$flash->message}</div>
{/foreach}
{foreach $comments as $comment}
<b>{$comment->user->username} | {$comment->written|date:'j. n. Y, h:i'} | {$comment->user->name} </b>
<br>
{$comment->text}
<hr>
{/foreach}
</div>
{/snippet}
{/block}
Ked som pustil ladenku debug tak $this->isAjax() vracia false .. proc
?
Nette a celkove webove aplikace sa ucim :) .. takze prosim nie moc
tvrdo namna
Dik
- honos
- Člen | 109
Nalinkovane scripty mam v hlavnom layoute :
<script type="text/javascript" src="{$basePath}/js/jquery.js"></script> <script type="text/javascript" src="{$basePath}/js/jquery.nette.js"></script> <script type="text/javascript" src="{$basePath}/js/jquery.ajaxform.js"></script>
Pokud pouzivaš javascript pro Nette co jeste pouziva udalost
$.live
ale mas nalinkovanou novějši verzi JQuery co udalost
$.live
jiz nepouziva tak ten formular se odesle bez AJAX. zkus
projit script jquery.nette.js a dokumentaci k tvoji verzi
JQuery. Ja jsem bylo jako nahradu za $.live
pouzil
$.delegate
.
EDIT: Koukni se do ladenky zda ti JS hazi chybu..
EDIT II: podivej se sem
Editoval honos (9. 1. 2014 12:22)
- azicko
- Člen | 7
honos napsal(a):
Nalinkovane scripty mam v hlavnom layoute :
<script type="text/javascript" src="{$basePath}/js/jquery.js"></script> <script type="text/javascript" src="{$basePath}/js/jquery.nette.js"></script> <script type="text/javascript" src="{$basePath}/js/jquery.ajaxform.js"></script>
Pokud pouzivaš javascript pro Nette co jeste pouziva udalost
$.live
ale mas nalinkovanou novějši verzi JQuery co udalost$.live
jiz nepouziva tak ten formular se odesle bez AJAX. zkus projit script jquery.nette.js a dokumentaci k tvoji verzi JQuery. Ja jsem bylo jako nahradu za$.live
pouzil$.delegate
.EDIT: Koukni se do ladenky zda ti JS hazi chybu..
EDIT II: podivej se sem
Ahoj,
dakujem ti ..idem to hned vyskusat ..diky za radu