ConfirmationDialog

#1 před 3 lety

DocX
Člen
Registrovaný: 1. 5. 2009
Příspěvky: 170

ConfirmationDialog

ConfirmationDialog

ConfirmationDialog je komponenta umožňující pohodlné ošetření akcí, vyžadujících zvýšenou pozornost a potvrzení uživatele. Díky revoluční schoponosti dynamických událostí ji lze snadno použít i v jiných komponentách jako je DataGrid. Jako samozřejmost je kompletní podpora AJAXu.

Stránka o komponentě na AddOns

Live demo

Download

Dotazy, připomínky, chyby,… vítány :)

Editoval DocX (2. 12. 2009 9:04)


Je jen málo věcí, které opravdu fungují… Jednou z nich je Nette.

PS: DocX mi ukradl MS. Bohužel, stále nejsem milionář :(

 

#2 před 3 lety

redhead
Nette guru
Registrovaný: 2. 5. 2009
Příspěvky: 1232

Re: ConfirmationDialog

Mohl bych poprosit o nějakou ukázku (demo)? Vypadá to zajímavě!

Online

 

#3 před 3 lety

Ondřej Brejla
Nette guru
Registrovaný: 20. 4. 2008
Příspěvky: 722

Re: ConfirmationDialog

Proč to nešoupneš do extras? I s ukázkou…

Online

 

#4 před 3 lety

DocX
Člen
Registrovaný: 1. 5. 2009
Příspěvky: 170

Re: ConfirmationDialog

Warden napsal(a):

Proč to nešoupneš do extras? I s ukázkou…

Protože „Na webu momentálně probíhá údržba.“… Až to pojede, dám to tam.

Ukázkový kód je v zipu. Na live demu se pracuje. Ale není težké si to vyzkoušet u sebe ;)


Je jen málo věcí, které opravdu fungují… Jednou z nich je Nette.

PS: DocX mi ukradl MS. Bohužel, stále nejsem milionář :(

 

#5 před 3 lety

Ondřej Brejla
Nette guru
Registrovaný: 20. 4. 2008
Příspěvky: 722

Re: ConfirmationDialog

Tak to pak jo.

Zkoušení u sebe je velice user ne-friendly ;-)

Online

 

#6 před 3 lety

Honza Kuchař
Moderator
Registrovaný: 12. 8. 2007
Příspěvky: 1588

Re: ConfirmationDialog

Rád bych to otestoval, ale je to pro PHP 5.3. Na PHP 5.3 bych rád přešel, ale nepodařilo se mi nějak rozumě pod ním rozběhat xDebug. Neumí to třeba v metodách vypisovat proměnné. Což v 5.2 fungovalo perfektně. Co používáte na debugování?

 

#7 před 3 lety

DocX
Člen
Registrovaný: 1. 5. 2009
Příspěvky: 170

Re: ConfirmationDialog

honzakuchar napsal(a):

Rád bych to otestoval, ale je to pro PHP 5.3. Na PHP 5.3 bych rád přešel, ale nepodařilo se mi nějak rozumě pod ním rozběhat xDebug. Neumí to třeba v metodách vypisovat proměnné. Což v 5.2 fungovalo perfektně. Co používáte na debugování?

Mělo by to být PHP 5.2 kompatibilní, stačí odebrat namespace a use na začátku.

PS: Doplňeno DEMO

Editoval DocX (27. 9. 2009 14:00)


Je jen málo věcí, které opravdu fungují… Jednou z nich je Nette.

PS: DocX mi ukradl MS. Bohužel, stále nejsem milionář :(

 

#8 před 3 lety

Patrik Votoček
Nette Evangelist
Registrovaný: 8. 3. 2008
Příspěvky: 2122

Re: ConfirmationDialog

na webu je do Úterý stop stav… (nelze nic měnit, přidávat atd…)


Sorry my bad english.
Vrtak-CZ | Nella Project | Osobní Blog | Twitter | LinkedIn | GitHub
„Nastala chyba která neměla nastat“ aneb „Když se chce všechno jde.“

 

#9 před 3 lety

Honza Kuchař
Moderator
Registrovaný: 12. 8. 2007
Příspěvky: 1588

Re: ConfirmationDialog

DocX napsal(a):

Mělo by to být PHP 5.2 kompatibilní, stačí odebrat namespace a use na začátku.

Jo, to je mi jasné. Ale když jsi to psal pro PHP 5.3, tak asi jsi už pod PHP 5.3 něco debugoval. Co na to používáš? Protože xDebug je zatím téměř nepoužitelný. :( A nepadá ti PHP + Apache pokud používáš laděnku?

PS: Doplňeno DEMO

Super komponenta! Jenom by to ještě chtělo doplnit to točící kolečko, že se něco děje a dočasně zamknout submit buttony. (protože, pak bych to mohl odeslat vícekrát)

 

#10 před 3 lety

DocX
Člen
Registrovaný: 1. 5. 2009
Příspěvky: 170

Re: ConfirmationDialog

honzakuchar napsal(a):

Super komponenta!

Díky :)

Jenom by to ještě chtělo doplnit to točící kolečko, že se něco děje

„Spinner“ tam byl, jen nebyl zviditelněn v CSS, ale i tak to není až tak věc komponenty.

a dočasně zamknout submit buttony. (protože, pak bych to mohl odeslat vícekrát)

Dočasně zamknout buttony, no to je věc JS :) Ale když se tak stane, tak první odeslání smaže token a druhý selže.

Docela bych ale tenhle požadavek směroval na http://addons.nette.org/cs/ajax-form, protože tohle se zřejmě netýká jen formuláře na ConfirmationDialogu.


Jo, to je mi jasné. Ale když jsi to psal pro PHP 5.3, tak asi jsi už pod PHP 5.3 něco debugoval. Co na to používáš? Protože xDebug je zatím téměř nepoužitelný. :(

XDebug nefunguje, to vim. Vyřešil jsem to tak, že se bez něj obejdu.

A nepadá ti PHP + Apache pokud používáš laděnku?

Na tohle jsem nenarazil (LAMP). A to laděnku, profiler a fireLog docela hojně využívám (častěji teda ty poslední 2 :)

Editoval DocX (27. 9. 2009 20:41)


Je jen málo věcí, které opravdu fungují… Jednou z nich je Nette.

PS: DocX mi ukradl MS. Bohužel, stále nejsem milionář :(

 

#11 před 3 lety

Honza Marek
Moderator
Registrovaný: 31. 3. 2007
Příspěvky: 1632

Re: ConfirmationDialog

DocX napsal(a):

Docela bych ale tenhle požadavek směroval na http://addons.nette.org/cs/ajax-form, protože tohle se zřejmě netýká jen formuláře na ConfirmationDialogu.

No tak já to pořešené mám, ale řikal jsem si, že to do toho pluginu přímo nepatří, tak jsem to tam nedával.

Online

 

#12 před 3 lety

DocX
Člen
Registrovaný: 1. 5. 2009
Příspěvky: 170

Re: ConfirmationDialog

UPDATE

  • Upraveno demo
  • Demo aplikace bylo přibaleno do archívu s komponentou
  • Handlery potvrzovačů nyní přebírají jako poslední parametr ConfirmationDialog na kterém byl spuštěn
  • Otázka může být nyní i objekt Html

Editoval DocX (28. 9. 2009 14:30)


Je jen málo věcí, které opravdu fungují… Jednou z nich je Nette.

PS: DocX mi ukradl MS. Bohužel, stále nejsem milionář :(

 

#13 před 3 lety

DocX
Člen
Registrovaný: 1. 5. 2009
Příspěvky: 170

Re: ConfirmationDialog

Heh, včera se tu objevil požadavek na odstranění funkce lcfirst, která není v PHP 5.2. Takže jsem to upravil.

Nevím ale proč to ten někdo smazal (nehledě na to, že své úpravy je podle GPL „povinnen“ zveřejnit :)

Editoval DocX (4. 10. 2009 14:14)


Je jen málo věcí, které opravdu fungují… Jednou z nich je Nette.

PS: DocX mi ukradl MS. Bohužel, stále nejsem milionář :(

 

#14 před 3 lety

grogy
Člen
Registrovaný: 14. 7. 2009
Příspěvky: 98

Re: ConfirmationDialog

To jsem byl já, neupravoval jsem to, jen jsem na to narazil při pokusu na 5.2.9.

Hned se podívám jak jsi to udělal, jinak – zkoušel jsi to zprovoznit na původní verzi PHP, a s jakou verzí nette jsi to dělal (stable 0.9.1?), jelikož známí má problémy s provozněním – ale to bude asi jeho chyba.

Smazal jsem to omylem, když mi se zobrazili dva stejné příspěvky za sebou, smažu jeden a ten druhý šel taky ((

Editoval grogy (4. 10. 2009 14:09)

 

#15 před 3 lety

DocX
Člen
Registrovaný: 1. 5. 2009
Příspěvky: 170

Re: ConfirmationDialog

grogy napsal(a):
zkoušel jsi to zprovoznit na původní verzi PHP, a s jakou verzí nette jsi to dělal (stable 0.9.1?), jelikož známí má problémy s provozněním – ale to bude asi jeho chyba.

To live demo na gdmt.cz používá Nette 0.9.1. V aplikaci, kterou nyní vyvíjíme, to máme nad Nette 0.9.0. Ovšem na 0.8ce jsem to nezkoušel a teoreticky by to ani fungovat nemělo ;)


Je jen málo věcí, které opravdu fungují… Jednou z nich je Nette.

PS: DocX mi ukradl MS. Bohužel, stále nejsem milionář :(

 

#16 před 3 lety

DocX
Člen
Registrovaný: 1. 5. 2009
Příspěvky: 170

Re: ConfirmationDialog

Založen GitHub

Založil jsem repozitář Confimation Dialogu na GitHubu.

Kdo chce, má nyní jednodušší cestu, jak sdílet své úpravy, či jak získat novou verzi ;)


Je jen málo věcí, které opravdu fungují… Jednou z nich je Nette.

PS: DocX mi ukradl MS. Bohužel, stále nejsem milionář :(

 

#17 před 3 lety

grogy
Člen
Registrovaný: 14. 7. 2009
Příspěvky: 98

Re: ConfirmationDialog

Dobré :)

Měl bych takový nápad. Napřed vysvětlím proč. Když komponentu použiješ v dataGridu, který jede na Ajaxu tak si stav zobrazíš pomocí flashMessage, což je ale nešikovné – nepřehledné. Příklad, uživatel bude mazat výrobky. Smázne, zobrazí se mu message, smázne další a zobrazí se nová zpráva ovšem je úplně stejná, takže uživatel nevidí rozdíl. (šlo by udělat název výrobku do message, ale to nechme stranou).

Jde mi spíš o to, jestli by šlo v úplně stejném tvaru jako to je teď mohlo vyjet okno s oznámením, které odklikneš jen „OK“. Co myslíš?

 

#18 před 3 lety

DocX
Člen
Registrovaný: 1. 5. 2009
Příspěvky: 170

Re: ConfirmationDialog

grogy napsal(a):

Jde mi spíš o to, jestli by šlo v úplně stejném tvaru jako to je teď mohlo vyjet okno s oznámením, které odklikneš jen „OK“. Co myslíš?

Zní to pěkně :) Ovšem nevím, jestli to má nějakou návaznost na ConfirmationDialog. Tento oznamovací dialog by z něj totiž nepoužil prakticky nic až na vnořený AppForm.

Jediné, co by možná bylo užitečné, kdyby se to oznámění nějak zadrátovalo do toho ConfirmationDialogu. Ale nevím, jestli by to tam nebylo tak trochu navíc.

Kdyby to zase měl být nějaký samotný NotificationDialog, bylo by to v podstatě jen zapouzdření AppFormu.

Navíc, jak by se to chovalo bez AJAXu? Nutnost odeslání POSTu, redirectu na GET a znovunačtení stránky jen kvůli odkliknutí oznámení?

Nicméně, napadá mě, že „flashky“ ti nikdo nepřikazuje stylovat jako pruh nahoře nad stránkou. Stejně tak, jako ti nikdo nepřikazuje stylovat ConfrimationDialog jako fixed do prostřed stránky.
Chci tím říct, že flash message si můžeš nastylovat také jako „okýnko“ a JSkem do něj dát tlačítko, který ho „zničí“ :) A můžeš to udělat i bez JS ;)

Jinak já na všem vždycky hledám negativa. Neříkám, že to nezní dobře ;)


Je jen málo věcí, které opravdu fungují… Jednou z nich je Nette.

PS: DocX mi ukradl MS. Bohužel, stále nejsem milionář :(

 

#19 před 3 lety

grogy
Člen
Registrovaný: 14. 7. 2009
Příspěvky: 98

Re: ConfirmationDialog

Po tomto odůvodnění souhlasím také. Když jsem to psal, tak jsem nemyslel na vnitřní návaznosti, nýbrž jen na výsledek – ale to mazací tlačítko není vůbec špatný nápad ;)
Díky

 

#20 před 3 lety

DocX
Člen
Registrovaný: 1. 5. 2009
Příspěvky: 170

Re: ConfirmationDialog

grogy napsal(a):

Po tomto odůvodnění souhlasím také. Když jsem to psal, tak jsem nemyslel na vnitřní návaznosti, nýbrž jen na výsledek – ale to mazací tlačítko není vůbec špatný nápad ;)
Díky

Já taky děkuju :) Nápad je to dobrý. Přesně stejný problém vlastně „provozuji“ také, ale nepřikládal jsem mu nějakou pozornost. Možná mě napadne něco geniálního až to budu implementovat, ale spíš ne :D Ale kdyby přece, tak se určitě podělím.

Jinak jsem rád, že se někdo ozívá s novými nápady :)


Je jen málo věcí, které opravdu fungují… Jednou z nich je Nette.

PS: DocX mi ukradl MS. Bohužel, stále nejsem milionář :(

 

#21 před 3 lety

Honza Kuchař
Moderator
Registrovaný: 12. 8. 2007
Příspěvky: 1588

Re: ConfirmationDialog

Na hezčí flash zprávičky používám jQuery plugin jGrowl. Ten udělá z flash message něco v tomto stylu: http://stanlemon.net/…/jgrowl.html

 

#22 před 3 lety

gmvasek
Nette guru
Registrovaný: 19. 3. 2009
Příspěvky: 1015

Re: ConfirmationDialog

honzakuchar: moc pěkné :)

Online

 

#23 před 3 lety

grogy
Člen
Registrovaný: 14. 7. 2009
Příspěvky: 98

Re: ConfirmationDialog

Ha.. tak tohle vypadá fakt moc pěkně.. asi to implementuji a tím vyřeším problém zmiňovaný výše. Dík. ;)

 

#24 před 3 lety

timbulko
Člen
Registrovaný: 11. 4. 2009
Příspěvky: 97

Re: ConfirmationDialog

Dá sa dialóg použiť aj na operácie v DataGride (teda pre viac riadkov naraz) ?

 

#25 před 3 lety

DocX
Člen
Registrovaný: 1. 5. 2009
Příspěvky: 170

Re: ConfirmationDialog

timbulko napsal(a):

Dá sa dialóg použiť aj na operácie v DataGride (teda pre viac riadkov naraz) ?

No to jsem nezkoušel. On to DataGrid dělá přes vlastní signál handler, který pak volá callback metodu.

Vlastně to asi nemusí vadit. Do vlastního callbacku vložíme kód, který zobrazuje dialog a uloží mu parametry (jako například v infinite dialogu z examplu), a výsledná akce by se provedla až na handleru potvrzení dialogu.

Editoval DocX (13. 10. 2009 22:49)


Je jen málo věcí, které opravdu fungují… Jednou z nich je Nette.

PS: DocX mi ukradl MS. Bohužel, stále nejsem milionář :(

 

#26 před 3 lety

DocX
Člen
Registrovaný: 1. 5. 2009
Příspěvky: 170

Re: ConfirmationDialog

Jo jen tak BTW. Proč mi nikdo neřekl, že DataGrid umí předat do destination akce pole s dalšími statickými parametry? Tím by se dalo dialogu říct jaký dialog zobrazit a nemuselo by se dělat s těmi „dynamickými“ signály :) No ale aspoň je vidět jak je Nette všestranný :)


Je jen málo věcí, které opravdu fungují… Jednou z nich je Nette.

PS: DocX mi ukradl MS. Bohužel, stále nejsem milionář :(

 

#27 před 3 lety

sodae
Nette Evangelist
Registrovaný: 8. 1. 2009
Příspěvky: 280

Re: ConfirmationDialog

Narazil jsem na problém
v presenteru mam (viz pod.) podstatě podle ukázky a v šabloně
místo odkazu se vytvoří „error: Unknown signal ‚ConfirmationDialog:confimDelete!‘.“ a komponenta existuje takže kde je problém ? dík

public function createComponentConfirmForm($name)
{
        $form = new ConfirmationDialog($this, $name);

        $form->addConfirmer(
                'delete', // název signálu bude 'confirmDelete!'
                array($this, 'deleteItem'), // callback na funkci při kliku na YES
                'Opravdu smazat?' // otázka (může být i callback vracející string)
        );
}
{control confirmForm}

<a href="{link confirmForm:confimDelete! id => $picture->getId()}">Smazat</a>

Nette Jabber Room – nette@conf.netlab.cz , všichni jste vítání

Twitter: http://twitter.com/MartinSadovy

 

#28 před 3 lety

redhead
Nette guru
Registrovaný: 2. 5. 2009
Příspěvky: 1232

Re: ConfirmationDialog

Nechybí ti tam ‚r‘ ??? ConfiRmDelete!

Editoval redhead (17. 10. 2009 21:32)

Online

 

#29 před 3 lety

sodae
Nette Evangelist
Registrovaný: 8. 1. 2009
Příspěvky: 280

Re: ConfirmationDialog

aha ja to kopíroval přímo odsud z ukázky , díky


Nette Jabber Room – nette@conf.netlab.cz , všichni jste vítání

Twitter: http://twitter.com/MartinSadovy

 

#30 před 3 lety

gmvasek
Nette guru
Registrovaný: 19. 3. 2009
Příspěvky: 1015

Re: ConfirmationDialog

Kdo používá PHP < 5.3 tak si někam do aplikace doplňte tuto funkci:

if(!function_exists('lcfirst'))
{
        function lcfirst($str)
        {
                $str{0} = strtolower($str{0});
                return $str;
        }
}

Ještě se chci zeptat, co dělá \ před funkcí, v PHP < 5.3 mi to zas dělá neplechu:
Warning: Unexpected character in input: ‚\‘ (ASCII=92) state=1 in C:\xampp\htdocs\rswcz\app\extras\ConfirmationDialog\ConfirmationDialog.php on line 147

if (!is_callable($question) && !\is_string($question))
        throw new InvalidArgumentException('$question must be callback or string.');

Editoval gmvasek (31. 10. 2009 10:47)

Online

 

#31 před 3 lety

Jan Tvrdík
Nette guru
Registrovaný: 13. 4. 2008
Příspěvky: 1262

Re: ConfirmationDialog

V PHP 5.3 by to mělo označovat (pokud se nemýlím) globální funkci.

 

#32 před 3 lety

DocX
Člen
Registrovaný: 1. 5. 2009
Příspěvky: 170

Re: ConfirmationDialog

Jan Tvrdík napsal(a):

V PHP 5.3 by to mělo označovat (pokud se nemýlím) globální funkci.

Předně tak. Tak to se omlouvám, projížděl jsem to a snažil se tyhle (zbytečné) nekompatibility odstranit. Myslím, že i to lcfirst, jsem jednou předělával tak, aby to bylo bez zásahu použitelné v 5.2.

Kouknu se ještě na to, co to vlastně na serveru nabízíme :)


Je jen málo věcí, které opravdu fungují… Jednou z nich je Nette.

PS: DocX mi ukradl MS. Bohužel, stále nejsem milionář :(

 

#33 před 2 lety

deric
Člen
Registrovaný: 7. 6. 2006
Příspěvky: 111

Re: ConfirmationDialog

Je možné nahradit inline php5.3 fci, tak abych mohl v php5.2 předat parametr z DataGridu?

$form->addConfirmer(
        'enable',
        array($this, 'confirmedEnable'),
        function ($dialog, $params) {
                return sprintf('Do you realy want to enable user \'%s\'?', $params['id']);
        });

btw. odkud se berou parametry $dialog a $params?

 

#34 před 2 lety

DocX
Člen
Registrovaný: 1. 5. 2009
Příspěvky: 170

Re: ConfirmationDialog

deric napsal(a):

Je možné nahradit inline php5.3 fci, tak abych mohl v php5.2 předat parametr z DataGridu?

Jistě, že jde. Jeto klasický PHP callback. Takže můžeš udělat funkci v presenteru a pak tam napsat například

<?php
   ... array($this, 'FormatDeleteDialog') ...
?>

btw. odkud se berou parametry $dialog a $params?

$params se berou ze signálu, který spustí dialog. $dialog je odkaz na instanci dialogu nad kterym se ta funkce spustila ( pro možnost např. změnit text v tlačítku apod. ).


Je jen málo věcí, které opravdu fungují… Jednou z nich je Nette.

PS: DocX mi ukradl MS. Bohužel, stále nejsem milionář :(

 

#35 před 2 lety

deric
Člen
Registrovaný: 7. 6. 2006
Příspěvky: 111

Re: ConfirmationDialog

DocX napsal(a):

ok, chápu. díky moc

 

#36 před 2 lety

bazo
Nette guru
Registrovaný: 28. 9. 2009
Příspěvky: 303

Re: ConfirmationDialog

ahoj,

mam problem, ze aj po kliknuti na no v dialogu sa prevedie funkcia priradena pre yes – teda u mna konkretne zmazanie zaznamu

<?php
function createComponentConfirmForm()
    {
        $form = new ConfirmationDialog();
        $form->addConfirmer(
                        'delete', // název signálu bude 'confirmDelete!'
                        array($this, 'deletePage'), // callback na funkci při kliku na YES
                        array($this, 'questionDelete') // otázka (může být i callback vracející string)
                        );
        return $form;
        }

        public function questionDelete($dialog, $params)
        {
                return 'Really delete Page '.$params['title'].'?';
        }

        public function deletePage($params, $dialog)
        {
                $title = $params;
                $webalized_title = String::webalize($title);
                try{
                        $this->model('pages')->delete($title);
                        $this->model('menuItems')->deleteRelated($webalized_title);
                        $this->flash('Page '.$title.' deleted!');
                        $this->invalidateControl('grid');
                }
                catch(DibiDriverException $e)
                {
                        $this->flash($e->getMessage());
                }
        }
?>

vlastne je to vsetko podla prikladu. neviete kde je pes zakopany? diky

 

#37 před 2 lety

DocX
Člen
Registrovaný: 1. 5. 2009
Příspěvky: 170

Re: ConfirmationDialog

Ahoj,

z toho co jsi poslal mě nenapadá, kde by mohl být kámen úrazu :) Můžeš postnout ještě jak to maš v template a jak se ten dialog vyvolá (linkem, datagridem,…).


Je jen málo věcí, které opravdu fungují… Jednou z nich je Nette.

PS: DocX mi ukradl MS. Bohužel, stále nejsem milionář :(

 

#38 před 2 lety

bazo
Nette guru
Registrovaný: 28. 9. 2009
Příspěvky: 303

Re: ConfirmationDialog

v sablone je

{block #content}
        {control tabs}
        {control confirmForm}
{/block}

v taboch sa vytvori dataagrid a tam sa vyvolava tento dialog ajxom

<?php
$grid->addAction('Delete', 'confirmForm:confirmDelete!', null, $useAjax = TRUE);
?>

 

#39 před 2 lety

DocX
Člen
Registrovaný: 1. 5. 2009
Příspěvky: 170

Re: ConfirmationDialog

.Tyjo, fakt mě nenapadá, kde by mohl být problém :(

Z ConfirmationDialogu se ten callback volá na jediném místě a to při události způsobené kliknutím na OK.

Jakou verzi Nette u toho máš? Já jsem s nejnovější ještě nepracoval a tudíž jsem ani neměl možnost ověřit jestli v ní funguje CD. Ale také mě nenapadá, jakou změnou v Nette by se tohle mohlo rozbít :(


Je jen málo věcí, které opravdu fungují… Jednou z nich je Nette.

PS: DocX mi ukradl MS. Bohužel, stále nejsem milionář :(

 

#40 před 2 lety

bazo
Nette guru
Registrovaný: 28. 9. 2009
Příspěvky: 303

Re: ConfirmationDialog

bolo to sposobene mojim javascriptom, takze sorry, ze som otravoval. ale vsetky ostatne formy isli, tak mi to neslo do hlavy.

pri zajaxovavani formov musia byt uvedene dva handlery

<?php
    $("form").livequery("submit",function (event) {
        $(this).ajaxSubmit();
        event.preventDefault();
    });

    $("form :submit").livequery("click",function (event) {
        $(this).ajaxSubmit();
        event.preventDefault();
    });
?>

ten druhy mi chybal co sposobilo tu chybu, aj ked netusim aky je v tom rozdiel.

 

#41 před 2 lety

lumen
Člen
Registrovaný: 27. 9. 2009
Příspěvky: 26

Re: ConfirmationDialog

DocX napsal(a):

No to jsem nezkoušel. On to DataGrid dělá přes vlastní signál handler, který pak volá callback metodu.

Vlastně to asi nemusí vadit. Do vlastního callbacku vložíme kód, který zobrazuje dialog a uloží mu parametry (jako například v infinite dialogu z examplu), a výsledná akce by se provedla až na handleru potvrzení dialogu.

Ahoj, zrovna jsem se dostal do fáze, kdy toto potřebuju implementovat – tedy použít ConfirmationDialog u „operací“ datagridu. Nění mi úplně jasné jaký kód vložím do callbacku, aby vyvolal ten daný dialog?? A jak to udělám, aby to po odkliknutí YES provedlo danou akci?

Jinak ConfirmationDialog už mám rozchozený u „akcí“ datagridu, tak nejsem uplně mimo:)

Díky..

 

#42 před 2 lety

DocX
Člen
Registrovaný: 1. 5. 2009
Příspěvky: 170

Re: ConfirmationDialog

Nění mi úplně jasné jaký kód vložím do callbacku, aby vyvolal ten daný dialog??
A jak to udělám, aby to po odkliknutí YES provedlo danou akci?

V továrničcce dialogu vytvoříš otázku a v kódu akce vyvoláš dialog pomocí

<?php
        $this['confirmForm']->showConfirm('nazevOtazky', array('id' => $id,...));
?>

Akorát si nejsem jist jak to vlastně proběhne. Budu přemýšlet nahlas:

Operace datagridu jedou přes form. Takže se odešle POST požadavek, tím se spustí handler operace, v ni se otevře dialog, tím se invaliduje a bude se chtít vykreslit. Takže se nesmí presměrovávat, ale nechat stránku vykreslit v POSTu.. Což asi ničemu nevadí. Kliknutím na tlačítko „ANO“ na dialogu se odešle zase form, který už obslouží callback napojený na dialog. Takže myslím OK.

Takže jak jsem řekl v továrničce dialogu vytvoříš otázku, v obsluze operace datagridu zavoláš zobrazeni dialogu a nesmis přesměrovávat a v obsluze „yesClicked“ udělaš svoji požadovanou věc ;)


Je jen málo věcí, které opravdu fungují… Jednou z nich je Nette.

PS: DocX mi ukradl MS. Bohužel, stále nejsem milionář :(

 

#43 před 2 lety

lumen
Člen
Registrovaný: 27. 9. 2009
Příspěvky: 26

Re: ConfirmationDialog

DocX napsal(a):

Takže jak jsem řekl v továrničce dialogu vytvoříš otázku, v obsluze operace datagridu zavoláš zobrazeni dialogu a nesmis přesměrovávat a v obsluze „yesClicked“ udělaš svoji požadovanou věc ;)

Supr, takže je to tak jak píšeš. Jen mám jeden problém. Po kliku na tlačítko v datagridu se mi zobrazí ConfDialog a v něm otázka – přes parametr $params si sem předám pole ID a to pak vypíši uživateli v otázce (to mi všechno funguje). Po stisku YES se spustí funkce „confirmedDelete“, která se má o smazání vybraných položek v datagridu postarat (to mi taky funguje). Jenže je problém že tato funkce má parametr $id a tato proměnná obsahuje pouze jednu hodnotu (není to pole). Jak tedy do této funkce dostat pole s ID hodnotami? Díky

 

#44 před 2 lety

DocX
Člen
Registrovaný: 1. 5. 2009
Příspěvky: 170

Re: ConfirmationDialog

parametry, které se po potvrzení předají obsluhující funkci, se ukládají do session v okamžiku zavoláni showConfirm. Myslím, že by neměl být problém tam hodit pole nebo jakýkoliv jiný objekt schopný serializace.


Je jen málo věcí, které opravdu fungují… Jednou z nich je Nette.

PS: DocX mi ukradl MS. Bohužel, stále nejsem milionář :(

 

#45 před 2 lety

lumen
Člen
Registrovaný: 27. 9. 2009
Příspěvky: 26

Re: ConfirmationDialog

DocX napsal(a):

parametry, které se po potvrzení předají obsluhující funkci, se ukládají do session v okamžiku zavoláni showConfirm. Myslím, že by neměl být problém tam hodit pole nebo jakýkoliv jiný objekt schopný serializace.

No, nejsem si jistý jestli to chápu… Prostě do funkce, která vytváří otázku se mi podaří dostat pole ID, ale do funkce pro zpracování kliku na YES už ne – je tam POUZE jedno ID. Asi bude lepší ukázat kód:

<?php
        public function renderDefault()
        {
                $this['rolesGrid'];
                $this->template->showAjaxLinks = !$this['confirmForm']->isVisible();
                $this->invalidateControl('links');
        }

        // tovarna datagridu
        protected function createComponentRolesGrid()
        {
                $grid = new DataGrid;
                $grid->keyName = 'ID'; // for actions or operations
                $grid->addColumn('name', 'Role');
                ...
                $operations = array('delete' => 'smazat'); // define operations
                $callback = array($this, 'gridOperationHandler');
                $grid->allowOperations($operations, $callback, 'ID');
                ...
                return $grid;
        }

        // zpracování kliku na tlačítko datagridové operace
        public function gridOperationHandler(SubmitButton $button)
        {
                $grid = $this->getComponent('rolesGrid');
                $form = $grid->getForm();

                // was submitted?
                if ($form->isSubmitted() && $form->isValid()) {
                        $values = $form->getValues();
                        if ($button->getName() === 'operationSubmit') {
                                $operation = $values['operations'];
                        } else {
                                throw new InvalidArgumentException("Unknown submit button '" . $button->getName() . "'.");
                        }

                        $rows = array();
                        foreach ($values['checker'] as $k => $v) {
                                if ($v) {
                                        $row = $this->model['users_roles']->find($k)->fetch();
                                        $rows[] = $row['name'];
                                }
                        }

                        if (count($rows) > 0) {
                                $this['confirmForm']->showConfirm('multdelete', $rows);

                        } else {
                                $grid->flashMessage('Nejsou vybrány žádné položky', 'warning');
                                $grid->invalidateControl();
                        }
                }
        }

        // tovarna ConfirmationDialogu
        public function createComponentConfirmForm()
        {
                $form = new ConfirmationDialog();
                $form->getFormElementPrototype()->addClass('ajax');

                $form->addConfirmer(
                        'multdelete',
                        array($this, 'confirmMultiDelete'),
                        array($this, 'questionMultiDelete'));

                return $form;
        }

        // funkce vytvářející otázku pro ConfirmationDialog
        public function questionMultiDelete($dialog, $params)
        {
                return "Opravdu chcete smazat ".implode(', ', $params)."?";
        }

        // funkce zpracování kliku na YES v ConfirmationDialogu
        public function confirmMultiDelete($id)
        {
                == ZDE JE PROBLEM ===
                // proměnná $id není polem a obsahuje pouze jedno ID číslo
        }
?>

Předem díky za ochotu, už fakt nevím co s tím…

 

#46 před 2 lety

bazo
Nette guru
Registrovaný: 28. 9. 2009
Příspěvky: 303

Re: ConfirmationDialog

v questionMultiDelete si to uloz do session a v confirmMultiDelete si to zas vytiahni

 

#47 před 2 lety

lumen
Člen
Registrovaný: 27. 9. 2009
Příspěvky: 26

Re: ConfirmationDialog

diky… to zabralo:)

 

#48 před 2 lety

DocX
Člen
Registrovaný: 1. 5. 2009
Příspěvky: 170

Re: ConfirmationDialog

<?php
        $this['confirmForm']->showConfirm('multdelete', $rows);
?>

->

<?php
        $this['confirmForm']->showConfirm('multdelete', array($rows));
?>

Je to pole parametrů, které se předají funkci. Takže když tam dáš pole a funkci máš jen s 1 parametrem, tak se do něj předá samozřejmě jen první prvek…


Je jen málo věcí, které opravdu fungují… Jednou z nich je Nette.

PS: DocX mi ukradl MS. Bohužel, stále nejsem milionář :(

 

#49 před 2 lety

lumen
Člen
Registrovaný: 27. 9. 2009
Příspěvky: 26

Re: ConfirmationDialog

DocX napsal(a):

<?php
      $this['confirmForm']->showConfirm('multdelete', array($rows));
?>

Aha… tak toto je ještě lepší:)

 

#50 před 2 lety

Kaspis
Člen
Registrovaný: 9. 11. 2009
Příspěvky: 12

Re: ConfirmationDialog

Zdravím,

přešel jsem z v. 0.9.2 na v. 0.9.3. Ve starší verzi mi v pořádku confirmForm fungovali, měl jsem zde jen potvrzování při mazání záznamů (v dataGridu). Nějak se teď motám v těch továrničkách na komponenty, nevim… Laděnka teď s novou verzí nette hlásí chybu: „Component with name ‚confirmForm‘ does not exist.“

kód v šabloně:

{block #frameContent}
<h2>{$title}</h2>
{snippet}
{control confirmForm}
{widget polozkyVMenu}
{/snippet}

kód presenteru:

function createComponentConfirmForm()
{
        $form = new ConfirmationDialog();
        $form
        ->addConfirmer('delete',
        array($this->presenter, 'actionDelete'),
        'Opravdu chcete položku smazat?'
        );
        return $form;
}

Může mi někdo poradit, nasměrovat, předem moc díky.

 
Stránky: 1 2 Next

RSS feed RSS tématu

Zápatí