nittro – dialog pro detailni stranku
- kleinpetr
- Člen | 480
Zdravim,
rad bych zacal na nynejsi projekt pouzivat nittro, ale mam takovy specificky pozadavek, tak bych se rad zeptal, zda uz to nekdo resil, nebo zda by me mohl nekdo nakopnout tim spravnym smerem.
Jde o to, ze je nejaky list produktu a otevreni produktu musi jit do modalu/dialogu. Tudiz prepsani url pri otevreni dialogu, je v pohode, otevreni dialogu je v pohode, akorat jsem koukal, ze uz to ma resene vlastni dialogy, je nejaka moznost pouzit vlastni dialog ?
Dalsi veci je, ze na listu produktu bude mit uzivatel nejake filtry, ktere budou soucasti url, ale po kliknuti na detail a otevreni bych rad zobrazil cistou url toho detailu, a v nem jsou jeste ruzne taby, ktere budou taktez prepisovat url. Nicmene pokud by uzivatel klikl vedle nebo na krizek/cancel, tak by se mel dialog zavrit a opet se nastavit predchozi url, slozena z filtru atd.
Prolem je, ze momentalne kdyz mam treba v dialogu form nebo zavolam nejaky
handle, tak se mi pote hned dialog zavre, je to tim, ze v metode
renderDetail()
volam $this->redrawContro('content')
Kvul tomu aby se mi do dialogu nacetl pouze content, jenze kdyz pak zavolam
nejaky handleMethod a v nem udelam
$this->redrawControl('someSnippet');
tak se mi pak odesle
i content, ktery je v renderMethod. A tudiz se dialog zavre a otevre se jiny
content.. Coz je spatne.
Neda se tedy nejak v handleMetode rict, co nema prekreslovat ? Nebo alespon aby se ten dialog nezaviral ?
Budu rad za vsechny tipy. Diky
Editoval kleinpetr (21. 2. 2018 18:49)
- kleinpetr
- Člen | 480
@jahudka
Jeste bych se chtel zeptat, snazil jsem se detailneji projit _stack a celkove
ten DI.
a chtel jsem se zeptat, proc, kdyz dam do layout
window._stack.push([function (di, DOM) {
tjq('.lazy[data-src]').Lazy();
}, {
DOM: 'Utils.DOM'
}])
to nefunguje, ale kdyz to dam do konkretni stranky, tak to potom funguje. Jak se vubec ten zapis podari precist, kdyz ajax vrati pouze snippety a js nikoliv.
Jde mi o to, ze podobnych basic functions mam vice, a nechce se mi je vkladat na kzdou page zvlast.
A na to navazuje ma druha otazka, ze kdyz na jedne page budu mit tento kod, tak tam ten lazyloading fungovat bude, ale kdyz si pak nactu jinou, tak ne. Proc bych tedy mel pouzit setup() a tearDown() urciteho snippetu, kdyz se tohle chova tak, ze to funguje jen pro jednu urcitou stranku ?
Diky za pomoc.
Editoval kleinpetr (21. 2. 2018 21:03)
- jahudka
- Člen | 71
@kleinpetr ad ta první otázka: promiň, jsem trochu zmatenej, používáš teda Nittro dialogy nebo nějaký jiný? Nittro dialogy před pár dny prodělaly pár změn, díky kterejm by to co potřebuješ asi šlo řešit i bez psaní custom JS (nebo jen velmi minimální). Pokud používáš něco jinýho, tak si to budeš muset napsat sám; v DI je služba která se jmenuje „history“ a má metody pro přidání / nahrazení aktuálního stavu historie (a tím i URL):
// pro nahrazení aktuálního stavu použij replace() místo push()
di.getService('history').push(url[, title[, data]]);
Ad ta druhá otázka: když ten kód dáš do layoutu, tak se spustí jen jednou při prvním načtení stránky a tudíž nebude fungovat pro obsah načtenej ve snippetech AJAXem, ale je jasný že je nesmysl dávat ho do každýho snippetu – můžeš do layoutu (nebo pokud je to takhle globální věc, klidně i do nějaký custom služby) dát něco takovýhleho:
_stack.push(function(di) {
di.getService('snippetManager').on('after-update', function() {
tjq('.lazy[data-src]').Lazy();
});
});
jen teda neznám přímo tuhle knihovnu a nevím, jestli má pořešený, aby
se pro každej element inicializovala jen jednou (ale nejspíš jo) – kdyby
náhodou ne, ta událost after-update
obsahuje i informaci o tom,
který snippety se změnily a jak, takže by to šlo napsat
i konkrétnějc – ale zkus to nejdřív takhle, skoro určitě to bude
fungovat správně :-)
Editoval jahudka (22. 2. 2018 17:02)