Jak v Nete 2.0 zprovoznit confirm dialog pro odkaz href

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
motorcb
Člen | 551
+
0
-

Zdravím.
Používám Nette 2.0 a snažím se rozchodit confirm na odkaz.

<a n:href="delete! 'Základ'" n:confirm="Opravdu chcete záznam smazat?">Smazat</a>

Ovšem pak nevím jak confirm volat…

Podle: https://forum.nette.org/…ra-n-confirm bych do Base presneteru mel pridat:

<?php

abstract class BasePresenter extends Nette\Application\UI\Presenter
{
  protected function startup()
  {
    LatteMacros::$defaultMacros['@confirm'] = 'data-confirm="<?php echo %:formatString% ?>"';
  }
}

a JS:

<script>
$(document).ready(function () {
    $.fn.extend({
        triggerAndReturn: function (name, data) {
            var event = new $.Event(name);
            this.trigger(event, data);
            return event.result !== false;
        }
    });

   $('a[data-confirm], button[data-confirm], input[data-confirm]').live('click', function (e) {
        var el = $(this);
        if (el.triggerAndReturn('confirm')) {
            if (!confirm(el.attr('data-confirm'))) {
                return false;
            }
        }
    });
});
</script>

Ovšem, je mi vracena chybová hláška:

Class ‚LatteMacros‘ not found

Jak na to?

Jan Mikeš
Člen | 771
+
0
-

A kde mas soubor s tridou LatteMacros umisten?

motorcb
Člen | 551
+
0
-

Lexi napsal(a):
Nikde stáhl jsem čistý sandbox

Jan Mikeš
Člen | 771
+
0
-

Koukni na toto: https://latte.nette.org/en/develop#… melo by to vyresit tvuj problem

motorcb
Člen | 551
+
0
-

Lexi napsal(a):

Nedaří se :(

Do Homepage presenteru jsem dal:

public function templatePrepareFilters($template)
{
        $latte = new Nette\Latte\Engine;
        $macroSet = new Nette\Latte\Macros\MacroSet($latte->parser);

        $macroSet->addMacro(
                'confirm',  // makro
                'echo \'onclick="alert(\' . $template->dataStream(%node.word) . \');"\' ' // kod
        );
        $macroSet->addMacro('for', 'for (%node.args):', 'endfor');
}

a při spuštění to hlasi chybu:
Argument 1 passed to Nette\Latte\Macros\MacroSet::__construct() must be an instance of Nette\Latte\Compiler, instance of Nette\Latte\Parser given, called in …/www/subdom/sandbox/app/presenters/HomepagePresenter.php on line 23 and defined

Jan Mikeš
Člen | 771
+
0
-
$macroSet = new Nette\Latte\Macros\MacroSet($latte->parser);

misto $latte->parser zkus $latte->compiler ted jsem si vsiml ze to je i v komentari pod clankem napsano :)

edit: a vicemene je to celkem zretelne i z te chyby co je zle

Editoval Lexi (23. 7. 2012 19:25)

motorcb
Člen | 551
+
0
-

Lexi:
Diky, uz pokrok :) Vypisuje to rozhozenou stranku :) Ale nevypise to odkaz :(

K cemu je to: $macroSet->addMacro(‚for‘, ‚for (%node.args):‘, ‚endfor‘);

Jan Mikeš
Člen | 771
+
0
-

Melo by to pridavat dalsi makro, tento radek muzes s klidem v dusi vyhodit.

Tady je api https://api.nette.org/…acroSet.html koukni se na metodu addMacro() a na jeji parametry, jestli mas vse spravne tak jak chces.

Tve makro by pravdepodobne melo vypadat spravne takto:

$macroSet->addMacro(
                'confirm',  // makro
		NULL,
		NULL,
                'echo \'onclick="alert(\' . $template->dataStream(%node.word) . \');"\' ' // kod
        );

Editoval Lexi (24. 7. 2012 8:58)