ConfirmationDialog
- Glottis
- Člen | 129
hola,
taky bych potreboval tuknout. jsem v nette zacatecnik. zkousim confirm dialog s datagridem. ale zlobi mi to v ajaxu. pri kliknuti treba delete se ajaxove ukaze confirm ale uz kliknuti yes nebo no ajaxove neprobehne a nemuzu prijit na to proc. nema nekdo rychly napad?
dik
- DocX
- Člen | 154
Glottis napsal(a):
hola,
taky bych potreboval tuknout. jsem v nette zacatecnik. zkousim confirm dialog s datagridem. ale zlobi mi to v ajaxu. pri kliknuti treba delete se ajaxove ukaze confirm ale uz kliknuti yes nebo no ajaxove neprobehne a nemuzu prijit na to proc. nema nekdo rychly napad?
dik
Máš zprovozněný ajaxový formuláře? Napiš kdyžtak jak to máš, z toho se chyba pozná mnohem líp..
- mlha
- Člen | 58
Glottis napsal(a):
hola,
taky bych potreboval tuknout. jsem v nette zacatecnik. zkousim confirm dialog s datagridem. ale zlobi mi to v ajaxu. pri kliknuti treba delete se ajaxove ukaze confirm ale uz kliknuti yes nebo no ajaxove neprobehne a nemuzu prijit na to proc. nema nekdo rychly napad?
dik
Mam úplně stejný problém.
Načítám si následující JS:
- jquery-1.4.2.min.js
- jquery-ui-1.8.1.custom.min.js
- jquery.ui.core.js
- jquery.ui.datepicker.min.js
- jquery.ui.datepicker-cs.js
- jquery.livequery.js
- jquery.nette.js
- jquery.ajaxform.js
- datagrid.js
Editoval mlha (28. 5. 2010 15:34)
- mlha
- Člen | 58
despiq napsal(a):
co vam vypisuje firebug?
Ve Firebugu je videt, ze pred vyvolánim comfirmu se dela AJAXovy request na „confirmForm“, konkretni response:
<script>
{"state":[],"snippets":{"snippet-confirmForm-":"<div class=\"flash validation\">\n\t<p>Opravdu m\u00e1 b\u00fdt proces s ID=86 zru\u0161en?<\/p>\n<form action=\"\/x_portal\/flow\/?do=confirmForm-confirmationDialogForm-submit\" method=\"post\" id=\"frm-confirmForm-confirmationDialogForm\" class=\"ajax\">\n\n<table>\n<tr>\n\t<th> <\/th>\n\n\t<td><input type=\"submit\" class=\"yesbut button\" name=\"yes\" id=\"frmconfirmationDialogForm-yes\" value=\"Yes\" \/> <input type=\"submit\" class=\"nobut button\" name=\"no\" id=\"frmconfirmationDialogForm-no\" value=\"No\" \/><\/td>\n<\/tr>\n<\/table>\n\n<div><input type=\"hidden\" name=\"token\" id=\"frmconfirmationDialogForm-token\" value=\"2ljlg9y3fw00o0k8swcgskkg8\" \/><\/div>\n<\/form>\n\n<\/div>\n"}}
</script>
Zamotne potvrzeni confirmFormu (Y/N) uz je klasicky neAJAX request.
Editoval mlha (31. 5. 2010 12:23)
- Bohosu
- Člen | 24
Ahoj všem,
prosím vás můžete mi poradit s použitím tohoto přídavku? :-)
Třídu jsem překopíroval do projektu, udělal vše podle návodu, ale při spuštění se vyskytne chyba v laděnce:
**Fatal Error
Class ‚Nette\Application\Control‘ not found**
Chci se taky dál ujistit, jestli tu třídu doplňku mám nakopírovat do libs/něco nebo třeba do adresáře, kde mám např. své modely apod. Ale teoreticky to umístění by nemělo mít vliv,ne? :-)
Děkuju :-)
Editoval Bohosu (31. 5. 2010 18:35)
- DocX
- Člen | 154
Bohosu napsal(a):
Třídu jsem překopíroval do projektu, udělal vše podle návodu, ale při spuštění se vyskytne chyba v laděnce:
V návodu to zmíním :)
Class ‚Nette\Application\Control‘ not found**
Odstraň na začátku souboru pár řádku začínajících
use ...
. Bylo to psané pro PHP 5.3, ale fungovat by to mělo
i na 5.2
Chci se taky dál ujistit, jestli tu třídu doplňku mám nakopírovat do libs/něco nebo třeba do adresáře, kde mám např. své modely apod. Ale teoreticky to umístění by nemělo mít vliv,ne? :-)
Je jedno kam to dáš, důležité je, aby se to načetlo. Pokud používáš
RobotLoader, můžeš to mít kdekoli, kam on kouká. Jinak je ale takovým
zvykem tyto rozšíření dávat buď do libs
sdíleném více
aplikacemi nebo, pokud je to single projekt, do nějaké vhodně pojmenované
složky v app
, např. Components
…
Editoval DocX (31. 5. 2010 18:49)
- DocX
- Člen | 154
mlha napsal(a):
despiq napsal(a):
co vam vypisuje firebug?
Ve Firebugu je videt, ze pred vyvolánim comfirmu se dela AJAXovy request na „confirmForm“, konkretni response:
<script> {"state":[],"snippets":{"snippet-confirmForm-":"<div class=\"flash validation\">\n\t<p>Opravdu m\u00e1 b\u00fdt proces s ID=86 zru\u0161en?<\/p>\n<form action=\"\/x_portal\/flow\/?do=confirmForm-confirmationDialogForm-submit\" method=\"post\" id=\"frm-confirmForm-confirmationDialogForm\" class=\"ajax\">\n\n<table>\n<tr>\n\t<th> <\/th>\n\n\t<td><input type=\"submit\" class=\"yesbut button\" name=\"yes\" id=\"frmconfirmationDialogForm-yes\" value=\"Yes\" \/> <input type=\"submit\" class=\"nobut button\" name=\"no\" id=\"frmconfirmationDialogForm-no\" value=\"No\" \/><\/td>\n<\/tr>\n<\/table>\n\n<div><input type=\"hidden\" name=\"token\" id=\"frmconfirmationDialogForm-token\" value=\"2ljlg9y3fw00o0k8swcgskkg8\" \/><\/div>\n<\/form>\n\n<\/div>\n"}} </script>
Zamotne potvrzeni confirmFormu (Y/N) uz je klasicky neAJAX request.
Je možné že nemáš zprovozněné tzv. „live“ ajaxování formulářů. viz https://componette.org/search/?…
- DocX
- Člen | 154
Bohosu napsal(a):
DocX: Děkuju za rychlou odpověď, ale bohužel musím doplnit že používám na localhostu verzi 5.3, takže použití / nepoužití řádků „use“ nepomáhá :(
No nejde jen o PHP, ale také o variantu Nette. Pokud máš Nette ve
variantě s namespacema, tak nevím proč to nejde. Přece
ConfirmationDialog
načítáš určitě z nějakého presenteru,
takže v tom místě určitě musí být načtena třída Control
z Nette..
- Bohosu
- Člen | 24
Zkusil jsem to celé od začátku:
- stáhnul jsem si Nette 0.9.4 pro PHP 5.3
- stáhnul jsem ConfirmDialog, rozbalil jsem ho do app/components
- do HomepagePresenteru jsem dal:
public function createComponentConfirmForm()
{
$form = new ConfirmationDialog();
$form->addConfirmer('delete',array($this, 'deleteItem'),'Opravdu smazat?')
->addConfirmer('enable',array($this, 'enableItem'),'Opravdu povolit?');
return $form;
}
public function deleteItem($id)
{
}
public function enableItem($id)
{
}
- A do šablony jsem přidal
@{control confirmForm}
<a href="{link confirmForm:confirmDelete! id => 10}">Smazat 10. položku</a>
- Promazal jsem temp
- Spustil jsem prohlížeč s nadějí...... a...... Fatal Error
Přikládám screen pro lepší vysvětlení. Běžím na locale s verzí php 5.3, verzi Nette mám taky správnou (0.9.4 pro PHP 5.3), Chybu v kódu snad nemám? Zkusím to ještě nasadit na ostrý server jestli nemám chybu na domácím, jinak už netuším :-) Nesetkal se někdo se stejným problémem? :-) Díky
Editoval Bohosu (31. 5. 2010 20:32)
- DocX
- Člen | 154
Bohosu napsal(a):
Přikládám screen pro lepší vysvětlení. Běžím na locale s verzí php 5.3, verzi Nette mám taky správnou (0.9.4 pro PHP 5.3), Chybu v kódu snad nemám? Zkusím to ještě nasadit na ostrý server jestli nemám chybu na domácím, jinak už netuším :-) Nesetkal se někdo se stejným problémem? :-) Díky
AHA! To je ovšem jiná chyba než jsi psal posledně :) Tady je chyba v tom že můj kód tiše a skrytě předpokládá přítomnost gettextu, což zřejmě na localu nemáš.. I když je gettext na většině serverů běžná věc, tak je zbytečné aby to tam bylo – odstraňuji (jedná se o funkce „podtržítko“).
- kutilm
- Člen | 21
DocX napsal(a):
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 ;)
Ahoj,
máš někde aktuální verzi repositáře?
Poslal bych ti patch, ale aspoň takhle (pro verzi z confirmDialogu 31.5., Nette 0.9.4 prefixovaná, PHP 5.3):
řádek 57 – na konci je o jednu závorku navíc.
řádek 300 – smazat (viz.: https://forum.nette.org/…dere-a-latte)
Dík za pěknou komponentu,
Michal
- Honza Kuchař
- Člen | 1662
Poslal bych ti patch
Klikni na tlačítko fork a pak udělej změny dle libosti a pak sem napiš.
- DocX
- Člen | 154
kutilm napsal(a):
DocX napsal(a):
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 ;)
Ahoj,
máš někde aktuální verzi repositáře?Poslal bych ti patch, ale aspoň takhle (pro verzi z confirmDialogu 31.5., Nette 0.9.4 prefixovaná, PHP 5.3):
řádek 57 – na konci je o jednu závorku navíc.
řádek 300 – smazat (viz.: https://forum.nette.org/…dere-a-latte)
Dík za pěknou komponentu,
Michal
Vidíš, na to jsem úplně zapomněl :) Pokusím se tam natáhnout nedávné
změny.
Jinak jsem rád za zájem, díky.
- Ondřej Mirtes
- Člen | 1536
Nevím, jestli se to tu už řešilo, ale chtěl bych používat ConfirmationDialog AJAXově v rámci DataGridu a chtěl bych ho napozicovat přibližně do místa, kde člověk kliknul na ikonku v ActionColumnu.
Dělal to už někdo?
- DocX
- Člen | 154
Ondřej Mirtes napsal(a):
Nevím, jestli se to tu už řešilo, ale chtěl bych používat ConfirmationDialog AJAXově v rámci DataGridu a chtěl bych ho napozicovat přibližně do místa, kde člověk kliknul na ikonku v ActionColumnu.
Dělal to už někdo?
Na AJAX v DataGridu je to připravené a hlavně kvůli tomu to vlastně i vzniklo. Koukni se na wiki.
Co se týče pozicování, přesně nevim, ale řekl bych že to nějak musí v jQuery jednoduše jít. Asi něco jako akce při kliku na ikonku, ve které se uloží [x,y] a potom nějaký hook na přijetí toho dialogu, který ho tam správně přesune..
- mlha
- Člen | 58
S confirmationDialogem mám dva problémy.
- když moc rychle kliknu na tlačítko, neprovede se ani jedna akce, dialog se jen uzavře. Chová se stejně v IE i FF. Když počkám s klikem cca. 1–2s, tak je vše OK.
- odeslání formuláře není AJAXově ať dělám co dělám. Jiné AJAXové formuláře mi fungují. Problém zmiňuji výše v tomto vlákně
Editoval mlha (9. 8. 2010 21:12)
- leumas
- Člen | 13
- odeslání formuláře není AJAXově ať dělám co dělám. Jiné AJAXové formuláře mi fungují. Problém zmiňuji výše v tomto vlákně
Mal som podobny problem, v stiahnutej demo verzii mi nechcelo odosielanie formulara fungovat ajaxovo. Vyriesil som to nahradenim povodneho kodu:
<script>
jQuery($(function () {
$("form.ajax :submit").livequery(function () {
this.oldonclick = this.onclick;
this.onclick = null;
$(this).click(function() {
if ($.isFunction(this.oldonclick) && !this.oldonclick())
return false;
$(this).ajaxSubmit();
return false;
});
}, function () {});
}));
</script>
kodom
<script>
jQuery($(function () {
$("body").delegate("form.ajax :submit", "click", function (event) {
event.preventDefault();
$(this).oldonclick = $(this).onclick;
$(this).onclick = null;
if ($.isFunction($(this).oldonclick) && !$(this).oldonclick())
return false;
$(this).ajaxSubmit();
return false;
});
}));
</script>
Bonusom navyse je zbavenie sa zavislosti na livequery. To je uz vdaka delegate a live v novych verziach jquery nepotrebne.
- mlha
- Člen | 58
Livequery je ale vyzadovano i samotnym nette.
Jeste pripominka: radek „$(this).>null;“ mi hazi syntax chybu.
Nedoslo k nejakemu zkomoleni?
Ja do ted pouzival trochu jiny kod, takze to nahrazeni asi nebude tak jednoduche:
<script>
$(function () {
$("form.ajax").livequery("submit",function (e) {
e.preventDefault();
$(this).ajaxSubmit(e);
});
$("form.ajax :submit").livequery("click",function (e) {
e.preventDefault();
$(this).ajaxSubmit(e);
});
});
</script>
Editoval mlha (17. 8. 2010 12:20)
- DocX
- Člen | 154
Ten kód co popisuje leumas a ten co mlha je téměř stejný. První je „jen“ vylepšený o prevenci dvojitého odeslání při pomalejším spojení.
Skripty v obou předchozích příspěvcích se mi zdají ale funkční. Ostatně ten první je použit i v mém demu (akorát ještě s livequery).
Jinak „$(this).>null;“ nejspíš překlep je, ale nevím kde jsi ho vzal :)
- mlha
- Člen | 58
Tak nakonec mi v IE7 funguje JEN nasledujici:
<script>
$(function () {
$("form.ajax").live("submit",function (e) {
e.preventDefault();
$(this).ajaxSubmit(e);
});
$("form.ajax :submit").live("click",function (e) {
e.preventDefault();
$(this).ajaxSubmit(e);
});
});
</script>
tj. .live misto .livequery
Editoval mlha (31. 8. 2010 13:38)
- xpitris
- Člen | 9
Pokousel se nekdo tento plugin provozovat na Nette 2.0 a PHP 5.3?
Ja se snazim rozchodit ConfirmationDialog s DataGridem a mym puldennim vysledkem je, ze vubec nedojde k vykonani nadefinovaneho signalu i kdyz se vsechno tvari jak ma. Ani dialogove okno se mi nezobrazi. Nikde zadny AJAX.
Definice komponenty:
public function createComponentConfirmDialog($name) {
$form = new \ConfirmationDialog();
$form->getFormElementPrototype()->addClass('ajax');
$form->addConfirmer(
'delete',
array($this, 'deleteItem'),
'Opravdu smazat?'
);
return $form;
}
Definice v datagridu:
$grid->addAction('Smazat', 'confirmDialog:confirmDelete!', clone $icon->class('icon icon-del'), $useAjax = TRUE);
Zkousel jsem rozbehat demo aplikaci v Nette 2.0 a cele to fungovalo bez
AJAXu a stylu.
Kdyz jsem zmenil na Nette 0.96, tak bylo vse OK.
- xpitris
- Člen | 9
O tom vim. Proto pouzivam verzi 2.0 dev.
V datagridu mi AJAX normalne funguje.
Trochu jsem si pohral se zavinacema a zda se ze jsem se dostal o kousek dal
(AJAXove volani funguje) nicmene porad mi to nevola muj signal, dokonce se ani
nezavola ConfirmationDialog.createTemplate().
Response na click podle Firebugu vypada takhle:
{"state":{"grid-page":null,"grid-order":null,"grid-filters":null,"grid-itemsPerPage":null}}
- DocX
- Člen | 154
xpitris napsal(a):
…
Promiň, ale nejsem schopen to vyzkoumat :) Vývoj Nette už docela dlouho nesleduji a netuším co je v 2.0 nového/rozbitého/upraveného. A nemám čas si s tím hrát (jinak bych to samozřejmě věděl ;)
Snad se ti to podaří zprovoznit, snad by to nemělo být nemožné. Když se ti to povede, určitě se poděl. Dík
- marau
- Člen | 50
Pokud by to někoho zajímalo tak takto se dá převést všechny confirmation linky s třídou confirmDialog na jQUery UI dialogy
<script type="text/javascript">
//all links classes with confirm dialog will be translated to jquery ui confirm dialog
$("a.confirmDialog").live("click", function (event) {
event.preventDefault();
button = $(this);
$.getJSON(this.href, function(payload) {
for (var i in payload.snippets) {
var content = $(payload.snippets[i]);
if (content.hasClass('confirm_dialog')) {
//this snippet is confirmation dialog
var buttons = [];
content.find('input[type=submit]').each(function(i, button) {
button = $(button);
buttons.push({text: button.attr('value'),
click: function() {
if (button.attr('name') == 'yes') {
content.find('form').submit();
}
content.dialog("close");
}});
button.css('display', 'none');
});
//show dialog
content.dialog({draggable: false, modal: true, buttons: buttons});
break;
}
}
});
return false;
});
</script>
- Fires
- Člen | 97
Omlouvam se vsem, asi to sem nepatri ale uz sem bezradnej. Furt nemuzu spravne pochopit tu licenci GPL – kazdy tvrdi neco jine.
Chtel bych tuto komponentu „pouze pouzit“ v komercnim projektu. Znamena to ze pak musim dat k dispozici i svoje zdrojove kody celeho projektu ? Nebo staci kdyz uvedu na strance licenci v paticce a odkazy sem ?
- bojovyletoun
- Člen | 667
já to GPL chápu tak, že pokud tu aplikaci distribuješ někomu (třeba prodáš někomu), tak on má právo vidět zdrojové kódy( stačí i odkaz na stažení zdrojáku, což asi se v tomto případě nehodí, tahle možnost se asi hodí na aplikace umístěné na sourceforge, kde jsou ta programy dostupné pro všechny). Taky platí, že aplikaci můžeš šířit jen pod GPL.
- Patrik Votoček
- Člen | 2221
Studiem toho jak funguje jaká licence jsem strávil už hodně času takže ti můžu s klidným svědomím říct že GNU GPL. Pro tebe znamená že i tvůj software využívající jakýkoli kód pod GNU GPL musí i tvůj výsledný produkt být pod GNU GPL. Což pro tebe znamená že jej musíš poskytnou zdrojové kódy. To ale neznamená že za produkt nemůžeš chtít peníze. Můžeš. Jen může přijít kdokoli další a produkt znova a zadarmo použít.
nedávno o tom vyšel zajímavý článek na Zdrojáku
- pEeLL
- Člen | 23
fires: pokud stahnes gpl modul provedes vnem upravy a ty nikomu dalsimu nenahrajes a vysledny kod budes pouzivat pouze ty (treba v aplikaci kterou budes pronajimat) tak rozhodne nikomu zdrojaky davat nemusis.
cele gpl mas jen o tom ze pokud takto upraveny modul nekomu prodas/ nahrajes / darujes tak mu ho musis dat jak pise vrtak pod stejnou licenci a to znamena ze on ho klidne muze dat zadara na net pro vsechny.
- DocX
- Člen | 154
Fires napsal(a):
aha , takze kdyz si to jen zakomponuju do sveho projektu a zdrojaky si ponecham ciste jen pro sebe .. tak to neni problem , pouze pokud bych jednou ty zdrojaky nekomu poskytnul tak musi byt opet v GPL .. chapu spravne ?
V podstatě jo. Myslím, že by se to stejně vztahovalo pořád jen na ten daný modul – tedy ConfirmationDialog.
- MartyIX
- Člen | 217
DocX: https://github.com/…nfirm-dialog – udelal jsem fork, ktery funguje na Nette 2 beta (demo je taky funkcni, ale ted nemam kde ho hostovat)
- DocX
- Člen | 154
MartyIX napsal(a):
DocX: https://github.com/…nfirm-dialog – udelal jsem fork, ktery funguje na Nette 2 beta (demo je taky funkcni, ale ted nemam kde ho hostovat)
Díky! Ale nejde o mě, ale o ostatní, kteří by to chtěli se současnou verzí použít. Klidně to zanes na stránku doplňku ;)
- forkman
- Člen | 72
Zdravím, confirmationDialog je super věc, v kombinaci s datagridem mi funguje krásně, ale teď bych potřeboval potvrdit dialogem odeslání klasického formu, kde si přes checkboxy vyberu fotky, které chci smazat. Jde to nějak? Dělat to přes datagrid není moc elegantní. Předem díky.
- DocX
- Člen | 154
forkman napsal(a):
Zdravím, confirmationDialog je super věc, v kombinaci s datagridem mi funguje krásně, ale teď bych potřeboval potvrdit dialogem odeslání klasického formu, kde si přes checkboxy vyberu fotky, které chci smazat. Jde to nějak? Dělat to přes datagrid není moc elegantní. Předem díky.
Určitě. V akci, kterou zpracováváš odeslání formuláře, vyvolej zobrazení ConfirmationDialogu s uložením co bylo zaškrtnuto a v akci jeho potvrzení smaž fotky. Kdyžtak napiš, s čím konkrétně si nevíš rady :)
- DocX
- Člen | 154
forkman napsal(a):
Nevím si právě rady jak vyvolat ten confirmationDialog :-) Mám to na hromadné úpravy fotek přes checkboxy. Ve zpracování formu dostanu pole a potřeboval bych tam nějak potvrdit tu akci.
Koukni na https://componette.org/search/?… je to obdobné, jen ty to použiješ ve své akci formuláře. Na stránku musíš přidat snippet a v kontroleru udělat továrničku na dialog jako jsi to udělal u datagridu.
Konkrétně jde o metodu showDialog
na ConfirmationDialogu.
Kdyby jsi s tím měl stále problémy, pošli o co se jak pokoušíš (kód) a uvidíme ;)