Piotr Krajewski

Piotr Krajewski web application
programmer

Temat: view action helper i moduły

Witam serdecznie,

mam ogromny problem, otóż posiadam sobie kilka modułów m.in. site i user.
W module site mam umieszczony layout a w nim takie oto wywołanie:


<?php echo $this->action('subscribe', 'Subscriptions', 'site'); ?>


kiedy wchodzę na stronę w danym module to wszystko działa (pokazuje się akcja subscribe kontrolera Subscriptions w module site). Jeśli zaś wchodzę na TEN SAM layout z modułu user wtedy zamiast poprawnie wyrenderowanej strony mam białą stronę bez żadnego komunikatu.

Moje pytanie jest czemu view action helper działą tylko dla modułu który aktualnie jest odpalony i jak to naprawić?

PS. mój moduł site jest modułem głównym (resources.frontController.defaultModule = "site")
PS2. proszę o powstrzymanie się od komentarzy, że nie powinno się tego używać :]

Temat: view action helper i moduły

wyłóż to bardziej łopatologicznie
bo nie wiem czy chcesz wyrenderować akcję w widoku czy inny widok
layout to też widok
Piotr Krajewski

Piotr Krajewski web application
programmer

Temat: view action helper i moduły

mam strukturę modułową:
dla głównego modułu - application/modules/site/
dla modułu po zalogowaniu użytkownika - application/modules/user/
i kilka innych modułów.

W każdym z modułów są dodatkowe ścieżki:
/views/layouts/ - pliki layoutu
/views/scripts/ - pliki widoków akcji

moduł "site" posiada w katalogu layouts/ plik layout.phtml, w którym jest wywołanie akcji (wraz z jej widokiem):


<?php echo $this->action('subscribe', 'Subscriptions', 'site'); ?>


i teraz tak, jeśli jestem na stronie, która jest obsługiwana przez kontroler modułu "site" to powyższe wywołanie zwraca mi dobrze wyrenderowany widok akcji w pliku layout.phtml

jeśli zaś zaloguje się i automatycznie znajde się w akcji obsługiwanej przez kontroler modułu "user" i jednocześnie będę używał layoutu z modułu "site":


//User_AccountController:

Zend_Layout::getMvcInstance()->setLayout("layout");
Zend_Layout::getMvcInstance()->setLayoutPath("application/modules/site/views/layouts/");



to wywala mi pustą kartkę na ekran bez żadnego błędu (tak jak bym popełnił błąd w definiowaniu akcji/kontrolera/modułu etc. np. <?php echo $this->action('subscribe', 'saldijasiojdioW#E$TY', 'site'); ?>).

Moje pytanie czemu w module "user" wywołując layout z modułu "site", w którym znajduje się wywołanie akcji także z modułu "site" nie działa ?

Temat: view action helper i moduły

sprawdziłem z ciekawości - działa bez zarzutu pomiędzy modułami
może masz źle ustawione wyświetlanie errorów/wyjatków że nic nie pokazuje

phpSettings.display_startup_errors = 1
phpSettings.display_errors = 1
phpSettings.track_errors = 1
phpSettings.error_reporting = E_ALL | E_STRICT
resources.frontController.params.displayExceptions = 1
Krzysztof Korzeniewski edytował(a) ten post dnia 14.09.11 o godzinie 22:57
Piotr Krajewski

Piotr Krajewski web application
programmer

Temat: view action helper i moduły

faktycznie błedy mi się nie wyświetlały ale z innego powodu też dziwnego. Mniejsza o większość, wracając do tematu - wykonując to:

<?php echo $this->action('subscribe', 'Subscriptions', 'site'); ?>

pomija całkowicie moduł. Czyli będąc w module user szuka tego kontrolera w module user zamiast site.

Masz może na to radę?

Temat: view action helper i moduły

nie wiem, może źle zainicjowana "modułowość":

resources.frontController.moduleControllerDirectoryName = "controllers"
resources.frontController.moduleDirectory = APPLICATION_PATH "/modules"
resources.frontController.prefixDefaultModule = true
resources.frontController.defaultModule = "site"
resources.frontController.defaultControllerName = "index"
resources.frontController.defaultAction = "index"
Piotr Krajewski

Piotr Krajewski web application
programmer

Temat: view action helper i moduły

niestety problemu nie mogę rozwiazać za nic dlatego ponizej daje paczke do przykladowej mojej struktury projektu.
http://dl.dropbox.com/u/3615421/trunk.zip

i teraz tak - wchodzac pod adres localhost wszystko dziala dobrze zas wchodzac pod adres localhost/user/account jest biala strona. To wszystko po przez wpis <?php $this->action('index', 'Newsletter', 'site'); ?> w layout.phtml w katalogu application/modules/site/views/lauouts/layout.phtml

moje pytanie jest nastepujące dlaczego action helper nie dziala tak jak powinien ? moze mam cos zle skonfigurowanego w application.ini ?

jeśli ktoś byl by na tyle dobry i mi pomógl - stawiam piwo przy najblizszej okazji :)
Piotr Krajewski

Piotr Krajewski web application
programmer

Temat: view action helper i moduły

stawiam wodke za pomoc ;-)
Paweł Kozicki

Paweł Kozicki Główny programista

Temat: view action helper i moduły

popatrz stary:



Notice: Undefined variable: defaultModule in C:\Program Files\Zend\Apache2\htdocs\trunk\library\Core\Controller\Plugin\ModuleLoader.php on line 58

Fatal error: Cannot redeclare class Site_IndexController in C:\Program Files\Zend\Apache2\htdocs\trunk\application\modules\site\controllers\NewsletterController.php on line 0


zwróć na to uwagę: Cannot redeclare class Site_IndexController
Paweł Kozicki

Paweł Kozicki Główny programista

Temat: view action helper i moduły


class Site_NewsletterController extends Zend_Controller_Action{
public function indexAction(){
}
}


tak daj w: NewsletterController.php

Temat: view action helper i moduły

brudny hack ale działa
plik:linia
jeśli nie ma to dodaj jeśli jest to popraw:

/application/modules/site/controllers/NewsletterController.php:3
s/Site_IndexController/Site_NewsletterController

/application/Bootstrap.php:24
$view->addBasePath(APPLICATION_PATH.'/modules/site/views');

/application/modules/site/views/layouts/layout.phtml:13
<?php echo $this->action('index', 'newsletter', 'site'); ?>

jeśli jedziesz na phpcon to tam mogę odebrać moją wódeczkę :P

Następna dyskusja:

Custom view helper




Wyślij zaproszenie do