vlastní helper

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

Ahoj potreboval bych si napsat vlastní helper ale vubec nevim jak na to. nasel jsem na foru takovou ukazku:

<?php

abstract class BlogsHelpers
{
    public static function blogUrl($value)
    {
        return strtoupper($value);
    }
}


?>

ale totalne nevim kam to mam ulozit a jak to pak volat…

Jod
Člen | 701
+
0
-
<?php
	$this->template->registerHelper('blogUrl', array(BlogHelpers, 'blogUrl'));
?>
{$url|blogUrl}

Nette/Template/TemplateHelpers

Editoval Jod (12. 2. 2009 19:55)

simon
Člen | 98
+
0
-

nevim proc ale zpusob registrace tak jak jsi psal mi nefungoval:

<?php

require 'helpers/Blogs.php';
        $this->template->registerHelper('blogurl', array(BlogHelpers, 'blogUrl'));

?>

dava to chybu

Warning</b>:  call_user_func_array() [<a href='function.call-user-func-array'>function.call-user-func-array</a>]: First argument is expected to be a valid callback, 'BlogHelpers::blogUrl' was given in <b>/home/simon/Workspace/php/nette/project/nettesubversion/Nette/Templates/Template.php</b> on line <b>300</b><br />

nakonec jsem to udelal takto:

<?php

require 'helpers/Blogs.php';
$this->template->registerHelper('blogurl', 'BlogsHelpers::blogUrl');

?>
sairon
Člen | 32
+
0
-

Asi proto, že je správně tohle:

<?php
        $this->template->registerHelper('blogUrl', array('BlogHelpers', 'blogUrl'));
?>

Jinak to bere BlogHelpers jako konstantu – buď tam musíš dát proměnnou s objektem nebo string. Ale ke statické metodě se dá dostat i tak, jak jsi uvedl.

kravčo
Člen | 721
+
0
-

Nefungovalo to preto, že je tam preklep, nie kvôli nedefinovanej konštante.

Jod napsal(a):

<?php
	$this->template->registerHelper('blogUrl', array(BlogHelpers, 'blogUrl'));
?>

Správne tam malo byť BlogsHelpers. Nič to nemení na tom, že ten reťazec mal byť uzavretý v úvodzovkách. Btw. phpčko pri nedefinovanej konštante vyhodí notice, nie warning…

sairon napsal(a):

Asi proto, že je správně tohle:

<?php
        $this->template->registerHelper('blogUrl', array('BlogHelpers', 'blogUrl'));
?>

Ten istý preklep… už bez chybičky…

simon napsal(a):

<?php

require 'helpers/Blogs.php';
$this->template->registerHelper('blogurl', 'BlogsHelpers::blogUrl');

?>

Tento spôsob je alternatívny, podľa manuálu funguje od PHP 5.2.3, a keďže Nette prišlo nedávno s podporou pre PHP už od verzie 5.2.0, v prípade nedostatočnej verzie tento callback prepíše na štandardne podporovaný variant, ktorý opisovali Jod a sairon.