flame-org / Modules

Nette modules on the Steroids
http://flame-org.github.io/Modules/
GNU Lesser General Public License v3.0
13 stars 7 forks source link

Jak přidat helpery pro templates? #8

Closed jirinapravnik closed 10 years ago

jirinapravnik commented 10 years ago

Doufám, že se může využívat Issues i pro dotazy...

Jak se přidávají helpery pro templates?

Mám tohle v extension

public function getHelpersConfiguration()
{
    return array(
        'thumbnail' => 'JiriNapravnik\Latte\Helpers\Common::thumbnail',
        'dateCzech' => 'JiriNapravnik\Latte\Helpers\Common::dateCzech',
    );
}

v sestaveném kontejneru mám správně vygenerováno pod service, která vrací template:

$service->registerHelper('thumbnail', 'JiriNapravnik\Latte\Helpers\Common::thumbnail'); $service->registerHelper('dateCzech', 'JiriNapravnik\Latte\Helpers\Common::dateCzech');

ale v šabloně dostávám, že nezná Nette\Templating\FileTemplate::thumbnail

druhá věc jde nějak v extension registrovat helper loader?

jsifalda commented 10 years ago

Tato "fičurka" je trochu v rozporu s Nette filozofií. Protože potřebujeme společnou template službu pro latte šablony. Což má dělat v containeru metoda createNette__template() (a její obdoby). Bohužel Nette tuto službu z containeru k ničemu nepoužívá, proto se tvoje helpery sice zaregistrují, ale nepoužijí v šabloně. V Modules je na to připraven hack v podobě traitu Flame\Modules\Application\TemplateFactory, který stačí použít v BasePresenteru. Pak by vše mělo šlapat. :)

Helper Loader není v Modules podporován, ale zkus se podívat na Flame\Modules\Template\IHelperProvider to by ti mohlo pomoci :))

jirinapravnik commented 10 years ago

S Tratirou to šlape v pohodě, super.

IHelperProvider používám, tam to jen musím nacpat všechno do toho jednoho pole (jak píšu výše), nebo mi má pomoci v něčem jiném?

jsifalda commented 10 years ago

Pokud si vytvoříš službu která bude implementovat IHelperProvider (v konfiguračním poli budeš mít jen jednu šlužbu třeba), budeš mít ve službě dopstupný $template, pomocí nehož si můžeš nakonfiguvoat helpery (a další), jak je libo. Získáš tím možnost si do služby např injectnout další services atd... nahrazuje to helper loader.

jirinapravnik commented 10 years ago

Aha, to už mi ale pro mojí potřebu (kdy těch helperů není tolik) přijde spíše overkill, takže zatím stačí tahle klasika. Každopádně opět díky za rady

jsifalda commented 10 years ago

Já díky!:)

jirinapravnik commented 10 years ago

tak jsem ještě zjistil menší problém s tou traitou. Nette 2.1 Factory accessing via nette->createTemplate() is deprecated, use createServiceNette__Template()

ja to tedy vyresil tim, ze jsem si to prepsal zavolanim te service, ale jako PR to neposílám, protože nevím, jestli je to úplně ideální řešení:-)

jsifalda commented 10 years ago

Omlouvám se, že reaguji až tak pozdě, ale nějak mi unikla notifikace... Ano, support pro Nette 2.1 se musí ještě dodělat. Bohužel momentálně na to nemám kapacity. Pravděpodobně se to bude řešit použítím té service, ale bude to chtít nějak více otestovat.

jirinapravnik commented 10 years ago

V pohodě, není tvoje povinnost dělat full support:) Jako ta oprava je opravdu pár znaků. Mě to zatím funguje, ale to není dostatečný test no:)