vlastný helper

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

Dobrý deň,

pozeral som tu na fóre riešenie tohto problému, mne to nejako nejde a vypisuje mi iné chybové hlášky.

Mám niečo zhruba takéto:

<?php
	function getTemplate($subor) {

		$t = new NTemplate;
		$t->registerFilter('NCurlyBracketsFilter::invoke');
		$t->setFile(t3lib_extMgm::extPath($this->extKey).'html/'.$subor.'.phtml');
		$t->setTranslator($this);

//		$t->registerHelper('date', 'NTemplateHelpers::date');
		$t->registerHelper('date', array('tx_kioshowto_util', 'dateint2str'));
		$t->registerHelperLoader('NTemplateHelpers::loader');
//var_dump($t->getHelpers());

		return $t;
	}
?>

a helper:

<?php
class tx_kioshowto_util {

	static $dateFormat = 'd. m. Y';

	public static function dateint2str($aaa) {
		return date(self::$dateFormat, $aaa);
	}
}
?>

Vypisuje mi to warning Call to undefined method NTemplate::date(). in /srv/www/htdocs/…/lib/Nette/Templates/Template.php on line 263

Nejde ani ten zapoznámkovaný originál helper.

Z nette používam zatiaľ iba šablónovaciu časť, zapracovanú do TYPO3 modulu.

Mám nette 0.9 prefixed verziu, php 5.2.5

Ďakujem za odpovede.

Editoval stan (13. 7. 2009 18:34)

Ondřej Mirtes
Člen | 1536
+
0
-

Registrace helperu v té tvé podobě by měla vypadat nějak takto:

$t->registerHelper('date', 'tx_kioshowto_util::dateint2str');
stan
Člen | 5
+
0
-

Aj tak som to už mal, vypisuje ten istý warning.

kravčo
Člen | 721
+
0
-

stan napsal(a):

$t->registerHelper('date', array('tx_kioshowto_util', 'dateint2str'));

LastHunter napsal(a):

$t->registerHelper('date', 'tx_kioshowto_util::dateint2str');

Oba varianty sú ekvivalentné (cca od PHP 5.2.3), Nette akceptuje oba a upravuje skrátený variant 'class::method' na array('class', 'method') kvôli podpore PHP 5.2.0+.


Tá chyba je výnimka, ktorú vyhadzuje NTemplate::__call(), ale tým, že je vyhodená vo volaní __toString(), musí byť zmenená na warning. V debugovaní by mohlo pomôcť, ak zmeníš vykresľovanie templejty tak, že priamo zavoláš __toString():

echo $templateecho $template->__toString(TRUE)
(string) $template$template->__toString(TRUE)

Po tom by sa roboty mala chytiť ladenka…

stan
Člen | 5
+
0
-

Už to ide. Samozrejme bola chyba u mňa :-)
Na jednom mieste som mal šablónu vytvorenú samostatne, nie cez getTemplate factory a tam som nemal zaregistrovaný helper.

Vďaka za pomoc.

Editoval stan (13. 7. 2009 19:48)

PetrP
Člen | 587
+
0
-

Děsim se tě jméne konvence tx_kioshowto_util t3lib_extMgm, určitě bude existovat i fcku::wtf() ;]]