Použitie Helperov v Presenteri

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

Zdravím,
je nejaká možnosť, aby šli používať Helpery aj v Presenteri?

Vďaka.

nAS
Člen | 277
+
0
-

Helpery jsou obyčejné fce, takže jde volat úplně normálně:

TemplateHelpers::date($date, '%d.%m.%Y');
Jakub Šulák
Člen | 222
+
0
-

Jen bych si dal pozor, jestli je nechceš používat v nějaké části aplikace, kterou teď máš v presenteru, ale měla by být až v šabloně, nebo naopak jestli je helper skutečně Helper. Ne nadarmo jde o třídu TEMPLATEhelper…

Pošli kdyžtak na ukázku, kde chceš v presenteru použít ten helper, dost mě to zajímá, zda to má využití…

timbulko
Člen | 85
+
0
-

No, napríklad som chcel pomocou helperu translate prekladať napríklad názvy stránok, kľúčové slová atď, ktoré sa generujú v Presenteri ($this->template->title = „nadpis“ apod.). Ale nakoniec som to vyriešil cez {_$title}, takže ten helper v Presenteri ani nebudem potrebovať :-) Ale dík za info.

Jakub Šulák
Člen | 222
+
0
-

Jinak ten helper translate je stejně jen odkaz na metodu Tranlator::translate()… Takže lze volat spíše takto.

ITguy
Člen | 3
+
0
-

Mám podobný dotaz, do BasePresenteru jsem si vepsal

<?php
$translator = new Translator(
	Environment::getVariable('lang'), WWW_DIR . '/../locale');
$this->template->setTranslator($translator);
?>

použil jsme návod, který byl zveřejněn na tomto fóru (Gettext + Poedit + Nette). Překlad slov zapsaných v phtml jede ok. Nevím jak to mám ale použít v presenteru např. AuthPresenter (vycházim z příkladu akrabatform). Když použiju např. Translator::translate tak to hodí chybu.
Předem Dík

Editoval ITguy (18. 4. 2009 19:08)

vlki
Člen | 218
+
0
-

Myslím, že Translator by mohl být zaregistrován jako služba. V bootstrapu něco jako:

$translator = new Translator(
        Environment::getVariable('lang'), WWW_DIR . '/../locale');
Environment::addService($translator, 'Nette\ITranslator');

Pak by BasePresenter měl v beforeRender získání objektu služby. Upraveno pro tvůj případ:

$this->template->setTranslator(Environment::getService('Nette\ITranslator'));

A pokud bys chtěl něco přeložit jinde než v šabloně, tak získáš objekt od služby a přeložíš…

$translator = Environment::getService('Nette\ITranslator');
$translator->translate('text k přeložení');

Netestoval jsem, ale myslím, že by mělo fungovat.

ITguy
Člen | 3
+
0
-

Nelibi se mu v tom bootstrapu radek kde je:

<?php
	Environment::addService($translator, 'Nette\ITranslator');
?>

Fatal error: Call to undefined method Environment::addservice()

V dokumentace jsem ani takovou metodu u třídy Environment nenašel

Editoval ITguy (18. 4. 2009 22:07)

romansklenar
Člen | 655
+
0
-

Je třeba víc koukat do API (vlki to psal nejspíš z hlavy).

Environment::getServiceLocator()->addService(...);
ITguy
Člen | 3
+
0
-

Ajo už jsem to tam našel. Díky moc, už to funguje skvěle. ;-)

Editoval ITguy (18. 4. 2009 22:48)