Diskuze: Nette Ajax form, nette.ajax.js
Člen
Zobrazeno 9 zpráv z 9.
K personalizaci obsahu a reklam, poskytování funkcí sociálních médií a analýze naší návštěvnosti využíváme soubory cookie. Informace o tom, jak náš web používáte, sdílíme se svými partnery pro sociální média, inzerci a analýzy. Partneři tyto údaje mohou zkombinovat s dalšími informacemi, které jste jim poskytli nebo které získali v důsledku toho, že používáte jejich služby.
Používáme nezbytné cookies pro fungování webu a s tvým souhlasem také analytické a marketingové cookies.
Zajišťují základní funkce, bezpečnost a služby, které sis vyžádal. Nelze je vypnout.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| ITnetwork | ITnetwork | Provoz webu, relace, přihlášení a uložení nastavení cookies. | PHPSESSID, auth_token, sid, itn_consent_impression, __Host-itn_consent | Relace až 1 rok |
| Google Tag Manager | Správa značek a načítání měřicích nástrojů webu. | Žádné | Neukládá se | |
| Google Fonts | Načítání typografie webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google Hosted Libraries | Načítání potřebných knihoven a stylů webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google reCAPTCHA | Ochrana formulářů a webu před zneužitím. | _GRECAPTCHA, rc::a, rc::b, rc::c, rc::f | Relace až 180 dní | |
| YouTube | Přehrávání vloženého video obsahu. | localStorage, IndexedDB; cookies after playback interaction | Relace až trvalé úložiště | |
| Vimeo | Vimeo | Přehrávání vloženého video obsahu. | __cf_bm, _cfuvid, vuid, localStorage, IndexedDB | Relace až 2 roky |
| Facebook Login | Meta | Přihlášení pomocí účtu třetí strany. | Úložiště řízené poskytovatelem | Relace až 1 rok |
| GoPay | GoPay | Zpracování uživatelem vyžádané platby. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
Pomáhají nám porozumět používání webu a zlepšovat ho.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Analytics 4 | Měření návštěvnosti a používání webu. | _ga, _ga_* | Až 2 roky | |
| Microsoft Clarity | Microsoft | Měření návštěvnosti a používání webu. | _clck, _clsk, _cltk | Relace až 1 rok |
Slouží k měření kampaní, personalizaci reklamy a marketingové komunikaci.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Ads | Měření kampaní, reklama a remarketing. | _gcl_au, _gcl_ls | Relace až 90 dní | |
| Meta Pixel | Meta | Měření kampaní, reklama a remarketing. | _fbp, _fbc, localStorage | Až 90 dní |
| Sklik | Seznam.cz | Měření kampaní, reklama a remarketing. | retargeting, sid, szn:* | Relace až trvalé úložiště |
| LinkedIn Insight | Měření kampaní, reklama a remarketing. | bcookie, li_gc, lidc, __cf_bm | Relace až 1 rok | |
| Ecomail | Ecomail.cz | Měření kampaní, reklama a remarketing. | ecmid, Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
| Atribuce kampaní ITnetwork | ITnetwork | Přiřazení návštěvy a objednávky ke kampani. | campaign_clid[*], user_session_context | Až 1 rok |
Ahoj, zkontroluj si, jestli máš někde na začátku (nejlíp hned za <body>) zavoláno
$.nette.init();
případně když odešleš formulář, tak jestli konzole nepíše nějakou chybu.
Hází to totu chybu:
Screenshot
Jinak
$.nette.init();
Mám vloženo v @layout.latte
{**
* @param string $basePath web base path
* @param array $flashes flash messages
*}
<!DOCTYPE html>
<html>
{block head}
<title>Project </title>
<link href = "{$basePath}/LOGOs.png" rel="icon">
<meta name="author" content="Frederik Fako">
<link href="{$basePath}/css/style.less" rel="stylesheet/less" type="text/css">
<link href='http://fonts.googleapis.com/css?family=Open+Sans' rel='stylesheet' type='text/css'>
<meta charset="UTF-8">
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<script src="{$basePath}/js/nette-aj/nette.ajax.js"></script>
<meta name=viewport content="width=device-width, initial-scale=0.8, user-scalable=yes">
<meta name="viewport" content="width=650">
{/block}
<body>
<div n:foreach="$flashes as $flash" n:class="flash, $flash->type">{$flash->message}</div>
<div id="wrapp">
<div id="content">
<div id="header">
<img src="{$basePath}/LOGO.png" id="logo">
</div>
<hr>
{include content}
</div>
</div>
</body>
<script>
$.nette.init();
</script>
{block scripts}
<script src="{$basePath}/js/less.js"></script>
{/block}
<div style="display:none;">
</html>
Tak jsem koukal na dokumentaci a upravil Latte:
<div id="routeInfo">
{snippet routeContainer}
{foreach $cesty as $item}
<div class="routewrapp hidden" id="Route-{$item->CestyID}">
{snippet route-$item->CestyID}
{form editForm-$item->CestyID}
<div>{$item->CestyNazev}</div>
<div>{label RouteActive:0}{input RouteActive:1} <br>
<a class="my-link" onclick="return confirm('Opravdu chcete smazat cestu?')" n:href="deletePath! $item->CestyID">Smazat cestu</a>
</div>
<div>
{label naves} {input naves}
</div>
<div>
<div>
<table rules="all">
<tr>
<td></td>
<td>Název dodavatele</td>
<td>Aktivní</td>
</tr>
{foreach $form[dodavatele]->items as $key => $label}
<tr id="{$key},{$item->CestyID}">
<td><a onclick="OdebratDodavatele({$key},{$item->CestyID},this);">Odebrat</a></td>
<td>{$label}</td>
<td><input n:name="dodavatele:$key"></td>
</tr>
{/foreach}
</table>
</div>
{input Zmenit}
</div>
{/form}
{/snippet}
</div>
{/foreach}
{/snippet}
</div>
Nyní však nevím jak se po odeslání dostat do
editFormSucceeded metody 
Každopádně konzole stále hází stejnou chybu Chyba
Zřejmě ti tam chybí nalinkované NetteForms. Pokud jsi Nette stahoval přes composer, měl bys tam ten JS soubor mít, případně můžeš externě nalinkovat https://nette.github.io/…Forms.min.js (doporučoval bych ale mít soubor u sebe).
A raději bych to přesunul hned za začátek <body>, ne až za konec. Tedy
<body>
<script src="{$basePath}/js/netteForms.js"></script>
<script src="{$basePath}/js/nette.ajax.js"></script>
<script>
$.nette.init();
</script>
Tak jsem je tam přidal a chyba je pryč mockrát díky!
Teď už jen vyřeším to proč se to stále refreshuje a proč se nedostanu do
editFormSucceeded
Nakonec jsem to tedy zkusil udělat takto:
public function createComponentEditForm(){
return new Multiplier(function ($itemId) {
$aktivni = $this->cesty->PathActive($itemId)->fetch();
$dodavatele = $this->dodavatel->byPathID($itemId)->fetchPairs('DodavateleID', 'DodavateleNazev');
$aktivniDodavatele = $this->dodavatel->byPathIDActive($itemId)->fetchPairs();
$form = new Form;
$form->setMethod('POST');
$form->getElementPrototype()->class = 'ajax';
$form->addText('naves','Návěs pro cestu:')
->setDefaultValue($aktivni->CestyNaves)
->setHtmlAttribute('placeholder','Návěs');
$form->addCheckbox('RouteActive', 'Aktvní cesta:');
$form->setDefaults(['RouteActive'=>$aktivni->CestyAktivni]);
$form->addCheckboxList('dodavatele', NULL,$dodavatele);
$form->setDefaults(array('dodavatele' => $aktivniDodavatele ));
$form->addHidden('CestaID', $itemId);
$form->addHidden('newDod');
$form->addSubmit('Zmenit','Uložit změny pro routu')
->onClick[] = [$this, 'send'];
$form->addProtection(); // Ochrana proti Cross-Site Request Forgery
return $form;
});
}
public function send(SubmitButton $button) {
$values = $button->getForm()->getValues();
bdump($this->isAjax());
if ($this->isAjax()) {
$button->getForm()->setValues(['naves' => NULL]);
$this->flashMessage($values->naves);
$this->redrawControl('flashes');
$this->redrawControl('routeContainer');
} else {
$this->redirect('this');
}
}
A stránka se stále refreshe ( v konzoli už však žádná chyba
nevyskakuje )
Protože
if ($this->isAjax()) {
...
}
Vrací False
Tak v tomhle upřímně nevím, protože nejsem zastánce automatizovaného posílání AJAX požadavků, tedy nevím přesně, kdy a jak to se třídou "ajax" funguje.
Případně můžeš zkusit umístit tuto část kódu někam na konec stránky (až za ty formuláře), tedy třeba těsně před konec </body>, jestli to bude fungovat:
$("form.ajax").on("submit", function() {
var form = $(this);
$.nette.ajax({
url: form.attr("action"),
method: "POST",
data: form.serialize()
});
return false;
});
Edit: když tak prosím odpovídej skrze tlačítko "Odpovědět", jinak
uživateli nepřijde notifikace na tvou reakci 
Tak nakonec chybělo:
<script src="{$basePath}/js/main.js"></script>
Main.js:
$(function () {
$.nette.init();
});
Nyní to vypadá nějak takto:
<body>
<script src="{$basePath}/js/netteForms.js"></script>
<script src="{$basePath}/js/nette-aj/nette.ajax.js"></script>
<script src="{$basePath}/js/main.js"></script>
Když jsem to měl normálně v tagu <script></script>
tak to nešlo.. Děkuji za všechny rady!
Zobrazeno 9 zpráv z 9.