Vlastni template helper v sablone kompoenty nefunguje

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

Ahoj,

jak docilit fungujiciho templatehelperu, ktery registruji v basepresenteru nasledujicim zpusobem?

protected function createTemplate($class = NULL) {
    $template = parent::createTemplate($class);
    $template->registerHelper('test', function ($val) {
        return 'test - ' . $val;
    });
    return $template;
}

Pokud toto pouziju v jakemkoliv presenteru, vse funguje jak ma.

<div class="place">{$val|test}</div>

Pokud ale zaregistruju v prezenteru komponentu a chci to pouzit v jeji template, krici na me, ze:
Filter ‚test‘ is not defined :(

Nevite nekdo, jak to podedit od toho prezenteru a predat sablone?

Dikyyy,

@flexroad

Lukeluha
Člen | 130
+
0
-

Buď si vytvoř nějakou BaseComponentu, ve které přetížíš metodu createTemplate, anebo v každé komponentě máš přístup k jejímu presenteru – takže můežš zavolat $this->presenter->createTemplate()

David Matějka
Moderator | 6445
+
+1
-

Jakou mas verzi nette?
od 2.2 je muzes registrovat v neonu:

services
    nette.latteFactory:
        setup:
            - addFilter(test, [FooClass, barMethod])

v 2.1 si muzes treba vytvorit traitu

flexroad
Člen | 117
+
0
-

David Matějka napsal(a):

Jakou mas verzi nette?
od 2.2 je muzes registrovat v neonu:

services
    nette.latteFactory:
        setup:
            - addFilter(test, [FooClass, barMethod])

v 2.1 si muzes treba vytvorit traitu

@DavidMatějka :
Pozivam 2.3

Toto je asi to co hledam, jen nevim, jak a kde vytvorit FooClass a jeji barMethod?
A jak ji potom registrovat aby na ni bylo „videt“?

Zkousel jsem do slozky „presenters“ vytvorit soubor „FooClass.php“ s nasledujicim:

<?php
namespace App;

class FooClass
{
    public static function barMethod()
    {
        return "aa";
    }
}

ale ladenka vraci:

Callback ‚FooClass::barMethod‘ is not callable

Je to potreba jeste nejak registrovat v neonu?

Diky,

@flexroad

David Matějka
Moderator | 6445
+
+1
-

Kdyz ji das do namespace, tak ten namespace musis uvest v tom neonu..

flexroad
Člen | 117
+
0
-

David Matějka napsal(a):

Kdyz ji das do namespace, tak ten namespace musis uvest v tom neonu..

Jsem ja to ale pako… :) Fungule skvele!!! DIKY MOC!

@flexroad

factor
Člen | 28
+
0
-

@David Matějka Omlouvám se že otvírám toto téma, ale jak v rámci takové statické metody poté použít translator, záznam z DB nebo ‚jakoukoliv jinou objektovou‘ záležitost?

Díky,
Ondra

David Matějka
Moderator | 6445
+
0
-

@factor ten callback nemusi byt staticka metoda, muzes tam dat klidne callback na metodu nejake sluzby

services:
	myService: App\Model\MyService
    nette.latteFactory:
        setup:
            - addFilter(test, [@myService, xxxx])
factor
Člen | 28
+
0
-

@David Matějka Bloody hell, jsem vocas …

Díky moc :)