konto usunięte

Temat: Custom view helper

Próbuję napisać pierwszego własnego view helpera. Kod w zasadzie mam już gotowy, problem w tym, że nie wiem jak go wywołać.

Próbowałem w widoku

<?php print_r($this->x()); ?>

ale dostaję błąd.

Przekopałem sieć i okazuje się, że muszę dodać mojego helpera do jakiegoś kontrolera. Co w przypadku, gdy chcę mieć dostęp z każdego widoku do tego helpera?

http://inchoo.net/zend/zend-framework-custom-view-helper/ - te rozwiązanie nie działa

Zdaje się, że znalazłem odpowiedż tutaj: http://www.zfforums.com/zend-framework-components-13/m...
ale nie wiem co mam umieścić w miejscu X w kodzie

$view->addHelperPath('X', 'My_View_Helper_X');

Jeżeli podmienię X na 'MyHelper_X.php', to gdzie powinienem umieścić ten plik?
Łukasz C.

Łukasz C. Senior Technical
Architect

Temat: Custom view helper

ogolnie przy starcie aplikacji, najlepiej zanim jeszcze odpalisz front controller zrob:

Zend_Layout::startMvc()->getView()->addHelperPath('Katalog/Do/Helperow', 'Katalog_Do_Helperow');

nastepnie musisz miec katalog: Katalog/Do/Helperow ktory jest podpiety pod sciezki includowania (umiesc go w takim miejscu aby byl)
no i na koniec robisz sobie klaske w stylu:

class Katalog_Do_Helperow_DupnyHelper
{
public function dupnyHelper($xxx)
{
return 'dupa='.$xxx;
}
}

a w widoku:

<?= $this->dupnyHelper(123) ?>

konto usunięte

Temat: Custom view helper

Załóżmy, że mam taki plik:
/application/views/helpers/AsdHelper.php o treści

class AsdHelper {...}

to wtedy jako parametry addHelperPath() podaję kolejno
/views/helpers/AsdHelper.php i AsdHelper
?

Ten kod który podałeś mogę wrzucić do Bootstrapa do _initView()?
Łukasz C.

Łukasz C. Senior Technical
Architect

Temat: Custom view helper

hmm chyba nawet samo $view->addHelperPath('views/helpers') powinno zadzialac ale glowy nie dam wiec obadaj manual

konto usunięte

Temat: Custom view helper

Kamil Kuźmiński:
Załóżmy, że mam taki plik:
/application/views/helpers/AsdHelper.php o treści

class AsdHelper {...}

to wtedy jako parametry addHelperPath() podaję kolejno
/views/helpers/AsdHelper.php i AsdHelper
?

W pierwszym parametrze podajesz ścieżkę tak, aby autoloader mógł ją chwycić - możesz też podać ścieżkę bezwzględną lub zacznij od '/application/views/helpers/' (nie wiem, jak poustawiałeś sobie ścieżki ;-))

W drugim parametrze przekazujesz prefiks, jeśli Twoja klasa nazywa się AsdHelper, to żadnego prefiksu ni ma. Tutaj albo przekaż pusty string albo dorzuć jakiś prefiks do klasy i wywołaj:

$view->addHelperPath(APPLICATION_PATH . '/views/helpers/', 'My_');

Klasa helera:
class AsdHelper extends Zend_View_Helper_Abstract
{

}
Kamil Kuźmiński:
Ten kod który podałeś mogę wrzucić do Bootstrapa do _initView()?

mile widzane ;-)

BTW
ja, jak chyba zdecydowana większość Zendowców umieszczam własne klasy bibliotek wewnątrz jednego folderu wewnątrz katalogu library. Czyli np.:
library/Benfi, dalej mam library/Benfi/View/Helper i tam wrzucam stado helperków ;-)
Wtedy w _initView() w Bootstrapie daję np.:

protected function _initView()
{
$view = new Zend_View();
$view->addHelperPath(LIBRARY_PATH . '/Benfi/View/Helper/', 'Benfi_View_Helper_');

$viewRenderer = Zend_Controller_Action_HelperBroker::getStaticHelper('ViewRenderer');
$viewRenderer->setView($view);

return $view;
}

Stała LIBRARY_PATH to bezwzględna ścieżka do library/Benfi
Oczywiście autoloader musi wiedzieć o Twoim folderze z bibliotekami ;-)

Możesz też rozwiązać też wg własnego uznania, za co bardzo cenię ZF ;-)Patrycjusz Omiotek edytował(a) ten post dnia 28.03.10 o godzinie 18:46
Michał Piotrowski

Michał Piotrowski Java Programmer

Temat: Custom view helper

I z wlasnego doswiadczenia powiem, ze uwazaj na nazwy klas w sensie wielkosci liter. Zdarzylo mi sie, ze po przeniesieniu aplikacji na serwer (windows -> linux) cos przestawalo dzialac :)

konto usunięte

Temat: Custom view helper

Struktura katalogów:

Obrazek

Kod bootstrapa wygląda następująco - http://pastie.org/900183
Helper - http://pastie.org/900186
I w layoucie daję

<?php foreach ($this->generateMenu() as $item): ?>


Wywala mi error

atal error: Uncaught exception 'Zend_Loader_PluginLoader_Exception' with message 'Plugin by name 'GenerateMenu' was not found in the registry; used paths: Qz_View_Helper_: ../library/Qz/View/Helper/ Zend_View_Helper_: Zend/View/Helper/; (...)


Już nie wiem co zrobić, żeby to zadziałało...
Łukasz C.

Łukasz C. Senior Technical
Architect

Temat: Custom view helper

$this->menu predzej bo twoja klasa z helperem nazywa sie Menu, a dokladniej: Qz_View_Helper_Menu

konto usunięte

Temat: Custom view helper

Warning: Invalid argument supplied for foreach() in C:\wamp\www\zend\blog\application\layouts\scripts\sidebar.phtml on line 4
Piotr Maksymilian Socha

Piotr Maksymilian Socha php architect, zce
php, zce zf, mysql,
etc...

Temat: Custom view helper

o jeez... nazwa metody i końcówka helpera muszą być takie same

class Qz_View_Helper_Menu extends Zend_View_Helper_Abstract
{

public function menu()
{
return array(...);
}

}


albo


class Qz_View_Helper_GenerateMenu extends Zend_View_Helper_Abstract
{

public function generateMenu()
{
return array(...);
}

}

konto usunięte

Temat: Custom view helper

Okej, ale nic mi to nie zmieniło.

var_dump($this->menu); // NULL
Piotr Maksymilian Socha

Piotr Maksymilian Socha php architect, zce
php, zce zf, mysql,
etc...

Temat: Custom view helper

a co będzie jak dasz


var_dump($this->menu());


??
:)

konto usunięte

Temat: Custom view helper

Piotr Maksymilian Socha:
a co będzie jak dasz


var_dump($this->menu());


??
:)

Fatal error: Uncaught exception 'Zend_Loader_PluginLoader_Exception' with message 'Plugin by name 'Menu' was not found in the registry; used paths: Qz_View_Helper_: /library/Qz/View/Helper/ Zend_View_Helper_: Zend/View/Helper/;

konto usunięte

Temat: Custom view helper


$view->addHelperPath('C:/wamp/www/zend/blog/library/Qz/View/Helper/', 'Qz_View_Helper_');

I gra :) \o/
Piotr Maksymilian Socha

Piotr Maksymilian Socha php architect, zce
php, zce zf, mysql,
etc...

Temat: Custom view helper

Właśnie miałem pisać,że coś ze ścieżkami musie być nie tak, ale widzę że już się samo "mykło"... Pozdry
Artur Świerc

Artur Świerc Programista PHP/Java

Temat: Custom view helper

Kamil, może się teraz czepiam ale:


...
const LIBRARY_PATH = '/library';
...


czemu sobie nie zdefiniujesz stałych już w indexie, np w ten sposób?


defined('BASE_PATH')
|| define('BASE_PATH', realpath(dirname(__FILE__)));

defined('APPLICATION_PATH')
|| define('APPLICATION_PATH', BASE_PATH . '/application');

konto usunięte

Temat: Custom view helper

Hmm, w sumie to nie zaglądałem jeszcze do index.php, dzięki za hint

konto usunięte

Temat: Custom view helper

Thanks for nice post

Magento consulting

Następna dyskusja:

zend_view_helper_url i http...




Wyślij zaproszenie do