Diskuze: Přenos dat mezi z nette do JS
Zobrazeno 5 zpráv z 5.
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,
možností je více. Předpokládám, že znáš životní cyklus Presenteru
ad.
Snippety:
# templates/Foo/*.latte
<a n:href="showBar!" class="ajax">CLICK ME!</a>
{snippet foo}
<span n:ifset="$bar">{$bar}</span>
{/snippet}
# FooPresenter.php
class FooPresenter extends UI\Presenter
{
// ... your code here
public function handleShowBar()
{
$this->template->bar = 'BAR';
$this->redrawControl('foo');
}
}
První možnosti jsou snippety. Zde nepotřebuješ vůbec nic řešit v JS,
pokud používáš nette.ajax.js. Odkaz
n:href="showBar!" znamená, že chceme zavolat aktuální Presenter
se signálem showBar - automaticky se zavolá metoda
handleShowBar. Jelikož je na odkazu třída .ajax,
tak se nám pošle automaticky AJAXový request, pokud by byl v prohlížeši JS
vynutý, tak se to vše provede redirectem, jelikož se v URL přenáší
paraametr _do, podle kterého Presenter rozezná na kterou metodu,
či komponentu signál cílí.
V handle* metodě předáme do šablony danou proměnnou a
překraslíme snippet foo. Překreslování snippetů je by default
podporované v nette.ajax.js, takže není potřeba nic
řešit.
Takže po kliknutí na odkaz "CLICK ME!" by se mělo po ním zobrazit "bar" 
Řekl bych, že většinou si vystačíš se snippety. Pokud by jsi však
volal AJAXové požadavky ručně z JS (pozor musíš to volat skrze
$.nette.ajax, namísto $.ajax), nebo by jsi používal
vlastní nette.ajax extensions (parádni řešení na často se opakující
věci, jsou takto řešeny zrovna třeba snippety, či AJAXové odesílání
formulářů) můžeš si poslat nějaká data v takzvaném
payloadu. Data do payloadu dostaneš v Presenteru jednoduše
takto:
$this->payload->bar = 'BAR';
Volat $this->sendResponse(... ručně nemusíš, Application
pozná AJAXový request a odešle JsonResponse po ukončení životního cyklu
sámo.
Objekt payload máš v success callbacku tvého
requestu, či tvé extension dostupný jako první parametr, takže v JS:
$.nette.ajax({
// parameters, url etc. ..
success: function (payload) {
console.log(payload.bar) // vypíše do konzole 'BAR'
}
});
V readme package nette.ajax.js jsou srozumitelně extensions,
takže přidávám na závěr ještě ODKAZ ZDE
EDIT: Ještě jen dodám, že signály a snippety lze používat i v
komponentách, ne jen v Presenterech, takže aby Presentery zbytečně
neboptnaly, tak je lepší tyto vizuální věci přesunout do komponent, ale to
už jsem trochu odbočil 
Ahoj, mohl bych se tě prosím zeptat, jak bych mohl vytáhnout data z payload hned při inicializaci nette.ajax? Zkoušel jsem něco jako:
$(function () {
$.nette.init();
$.nette.ext('init',{
init: function (payload) {
alert(payload.render);
}
});
});
ale nepodařilo se mi to
V odkazu, který jsem posílal máš vypsané argumenty, které se do
jednotlivých callbacků dostávají viz. https://github.com/…er/readme.md#…
Payload je dostupný POUZE v success callbacku, jelikož to je
jediný stav, kdy vše doběhlo na serveru v pořádku a vrátila se
odpověď.
V init, load, before a
start payload dostat nemůžeš, jelikož request na server
ještě nebyl poslán. V error ho opět dostat nemůžeš,
jelikož se někde vyskytla chyba, takže se žádná JSON response vrátit
nemůže. Callback complete už slouží pak zpravidla k UI
záležitostem, jako schovat na stránce spinner/loader atd.
Dále v tabulce callbacků v odkazu máš mimojiné u init
callbacku napsané Called just once during $.nette.init(); call. - init
callbacky jsou volány tedy pouze jednou po inicializaci samotného
nette.ajax.
Dále je nevhodné použít název init pro vlastní extension,
jelikož tento název nese již základní extension z balíku viz. https://github.com/…ette.ajax.js#L551
Takže nepoužívat tyto základní názvy (init, forms, snippets, abort ...)
pokud nechceš danou extension opravdu přepsat vlastní implementací.
Dále bych chtěl ještě upozornit na fakt, že callback ve stylu
$.nette.ext('my-awesome-extension',{
success: function (payload) {
alert(payload.render);
}
});
se zavolá při KAŽDÉM AJAXovém requestu a je jesné, že pokaždé nebude
v payloadu property render. Musíš si v tomto případě
ošetřit, co požadavek zavolalo - ze argumentu settings by mělo
jít od někud výtahnout, jaký prvek pořadavek "odpálil" etc. tady už bych
tě asi odkázal na offiko fórum Nette, kde je ve vlákně o nette.ajax.js cca
16 stránek dotazů a odpovědí + v jiných vláknech se toho taky dá najít
dost 
Zobrazeno 5 zpráv z 5.