#26 13. 10. 2009 22:47
- DocX
- Člen

- Místo: Most
- Registrovaný: 1. 5. 2009
- Příspěvky: 164
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ář :(
Offline
#27 17. 10. 2009 20:01
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
Offline
#28 17. 10. 2009 21:31
- redhead
- Nette guru
- Registrovaný: 2. 5. 2009
- Příspěvky: 769
Re: ConfirmationDialog
Nechybí ti tam ‚r‘ ??? ConfiRmDelete!
Editoval redhead (17. 10. 2009 21:32)
Offline
#29 17. 10. 2009 22:09
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
Offline
#30 31. 10. 2009 10:45
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)
Offline
#31 31. 10. 2009 12:19
- Jan Tvrdík
- Nette guru

- Místo: Prostějov
- Registrovaný: 13. 4. 2008
- Příspěvky: 635
- Web
Re: ConfirmationDialog
V PHP 5.3 by to mělo označovat (pokud se nemýlím) globální funkci.
Online
#32 31. 10. 2009 22:15
- DocX
- Člen

- Místo: Most
- Registrovaný: 1. 5. 2009
- Příspěvky: 164
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ář :(
Offline
#33 23. 11. 2009 12:29
- deric
- Člen
- Registrovaný: 7. 6. 2006
- Příspěvky: 108
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?
Offline
#34 23. 11. 2009 13:14
- DocX
- Člen

- Místo: Most
- Registrovaný: 1. 5. 2009
- Příspěvky: 164
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
$dialoga$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ář :(
Offline
#35 23. 11. 2009 23:51
- deric
- Člen
- Registrovaný: 7. 6. 2006
- Příspěvky: 108
Re: ConfirmationDialog
DocX napsal(a): …
ok, chápu. díky moc
Offline
#36 17. 12. 2009 0:15
- bazo
- Člen
- Registrovaný: 28. 9. 2009
- Příspěvky: 187
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
Offline
#37 17. 12. 2009 8:57
- DocX
- Člen

- Místo: Most
- Registrovaný: 1. 5. 2009
- Příspěvky: 164
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ář :(
Offline
#38 17. 12. 2009 9:55
- bazo
- Člen
- Registrovaný: 28. 9. 2009
- Příspěvky: 187
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);
?>
Offline
#39 17. 12. 2009 13:25
- DocX
- Člen

- Místo: Most
- Registrovaný: 1. 5. 2009
- Příspěvky: 164
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ář :(
Offline
#40 17. 12. 2009 13:48
- bazo
- Člen
- Registrovaný: 28. 9. 2009
- Příspěvky: 187
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.
Offline
#41 7. 1. 2010 22:32
- lumen
- Člen
- Registrovaný: 27. 9. 2009
- Příspěvky: 19
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..
Offline
#42 7. 1. 2010 23:13
- DocX
- Člen

- Místo: Most
- Registrovaný: 1. 5. 2009
- Příspěvky: 164
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ář :(
Offline
#43 9. 1. 2010 15:37
- lumen
- Člen
- Registrovaný: 27. 9. 2009
- Příspěvky: 19
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
Offline
#44 9. 1. 2010 19:26
- DocX
- Člen

- Místo: Most
- Registrovaný: 1. 5. 2009
- Příspěvky: 164
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ář :(
Offline
#45 9. 1. 2010 21:04
- lumen
- Člen
- Registrovaný: 27. 9. 2009
- Příspěvky: 19
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…
Offline
#46 9. 1. 2010 22:25
- bazo
- Člen
- Registrovaný: 28. 9. 2009
- Příspěvky: 187
Re: ConfirmationDialog
v questionMultiDelete si to uloz do session a v confirmMultiDelete si to zas vytiahni
Offline
#47 9. 1. 2010 23:05
- lumen
- Člen
- Registrovaný: 27. 9. 2009
- Příspěvky: 19
Re: ConfirmationDialog
diky… to zabralo:)
Offline
#48 10. 1. 2010 0:32
- DocX
- Člen

- Místo: Most
- Registrovaný: 1. 5. 2009
- Příspěvky: 164
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ář :(
Offline
#49 10. 1. 2010 11:49
- lumen
- Člen
- Registrovaný: 27. 9. 2009
- Příspěvky: 19
Re: ConfirmationDialog
DocX napsal(a):
<?php $this['confirmForm']->showConfirm('multdelete', array($rows)); ?>
Aha… tak toto je ještě lepší:)
Offline
#50 8. 2. 2010 15:16
- Kaspis
- Nový člen
- Registrovaný: 9. 11. 2009
- Příspěvky: 5
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.
Offline
- Úvodní stránka
- » Doplňky, pluginy a komponenty
- » ConfirmationDialog


