nittro – dialog pro detailni stranku

kleinpetr
Člen | 480
+
0
-

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
+
0
-

@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
+
0
-

@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)