konto usunięte

Temat: Config, resources, moduły i layout

Hej!

Próbuję robić tak jak jest to opisane w manualu ZF oraz np. tu, ale nie daję rady. Chciałbym zmieniać layout zależnie od modułu "po Bożemu". Nie stanowi dla mnie problemu zrobienie tego w kontrolerze czy bootstrapie, ale staram się dobry kod zamienić w idealny :)

dlatego w application.ini mam:

; layout

resources.layout.layoutPath = APPLICATION_PATH "/layouts/html"
resources.layout.layout = "default"
resources.layout.mvcSuccesfulActionOnly = true

Admin.resources.layout.layout = "admin"
admin.resources.layout.layout = "admin"

na wszelki wypadek wrzuciłem to samo do admin/configs/module.ini (i w bootstrapie modułu jest faktycznie widoczne przy zrobienu Zend_Debug::dump($this->_options), ale nic z tego nie wynika). Już nie wiem, gdzie to zrobić, aby po wejsciu do /admin/index/index mieć inny layout.

PS. plik admin.phtml oczywiście siedzi tam gdzie trzeba, ładuje się niestety wciąż i wciąż default.phtml

Pomocy!!!!

PS2. sorki za xpost z forum.php.pl ;)
Łukasz C.

Łukasz C. Senior Technical
Architect

Temat: Config, resources, moduły i layout

nie bardzo rozumiem z czym masz problem :)
ja kwestie layoutu zaleznego od modulu rozwiazalem tak:

w bootstrapie tworze widok, wrzucam go do layoutu, pozniej w init abstrakcyjnego kontrolera:

$moduleName = $this->getRequest()->getModuleName();
$modulePath = $this->getFrontController()->getModuleDirectory($moduleName);
if (basename($modulePath) == 'controllers')
$modulePath = dirname($modulePath);
$modulePath .= '/views/scripts';
if ($this->view)
$this->view->addScriptPath($modulePath);

wynik tego taki, ze niezaleznie od modulu, wyswietlony bedzie plik layout.phtml, ale wczytany ze sciezki danego modulu. Jezeli chce ustawic jakis inny layout np w konkretnej akcji to:

$this->_helper->layout()->setLayout($scriptName);


a jak chce aby modul korzystal z layoutu innego modulu to w abstrakcjnym kontrolerze:

$this->_helper->layout()->setViewScriptPath('/sciezka/do/modulu/views/scripts');


//edit
imho domyslna struktura aplikacji w zendzie to porazka, wiec zrob tak zeby dzialalo i bedzie dobrze ;)Łukasz C. edytował(a) ten post dnia 31.07.11 o godzinie 16:48

konto usunięte

Temat: Config, resources, moduły i layout

problem mam tak naprawdę w tym, że przy "manualowej" (według mnie) konfiguracji aplikacji nie łapie mi ustawień z application.ini. Mianowicie, jeżeli wpisuję opcję dla modułowych resourców, które powinny działać (nazwa_modułu.resource.layout itd) - nie dziala. I nie wiem dlaczego :)
Piotr Jasiulewicz

Piotr Jasiulewicz PHP/Java
professional

Temat: Config, resources, moduły i layout

Sprobuj w kontrolerze w ktorym jestes (w danym module), zobaczysz chociaz czy takie opcje istnieja;)


Zend_Debug::dump($this->getInvokeArg('bootstrap')->getOptions());

konto usunięte

Temat: Config, resources, moduły i layout

Grzegorz Kaszuba:
problem mam tak naprawdę w tym, że przy "manualowej" (według mnie) konfiguracji aplikacji nie łapie mi ustawień z application.ini. Mianowicie, jeżeli wpisuję opcję dla modułowych resourców, które powinny działać (nazwa_modułu.resource.layout itd) - nie dziala. I nie wiem dlaczego :)

EDYCJA: !!!! Zle zrozumialem Twoj post !!! :)

[ciach]Sławek Łukasiewicz edytował(a) ten post dnia 31.07.11 o godzinie 21:42

konto usunięte

Temat: Config, resources, moduły i layout

Już chyba wiem o co chodzi. Odpalane sa konfigi i bootstrapy dla każdego z modułów i jeden nadpisuje ustawienia drugiemu... czy się mylę?

Rozwiazaniem byłoby odpalanie jedynie bootstrapu dla okreslonego modułu.

Temat: Config, resources, moduły i layout

żeby zainicjować bootstrapy z modułów trzeba:

resources.modules = null

jeśli tego nie masz to raczej się nie ładują
Dawid Woźniak

Dawid Woźniak Programista PHP,
technik informatyk

Temat: Config, resources, moduły i layout

Też miałem problem ze zmianą layoutu po przejściu do modułu admina.
Po przeczytaniu tego posta, a konkretnie zdania:

Bo jak usunę mu layout główny to w kodzie błędu w ogóle nie bierze pod uwagę powyższej lokalizacji. Szuka za to w "/modules/admin/views/scripts/", ale to i tak na końcu, czyli jak nie znajdzie w głównym.

Skoro nie znajduje w głównym to szuka w modułach..

Więc mając dalej ustawienia dla layoutów w ini
resources.layout.layoutPath = APPLICATION_PATH "/layouts"
i nie dodając żadnych cukierkowych pluginów do auto ładowania layoutów
wystarczy nie mieć głównego layoutu, a tylko modułowe. W skrócie: zamiast wrzucać layouty do zdefiniowanego w ini dla nich folderu, zostaw go pusty i wrzuć odpowiedni lay do odpowiedniego modułu do folderu
[moduł]/views/scripts/layout.phtml
pod nazwą tylko i wyłącznie layout.phtml, ponieważ innego domyślnie Zend nie załaduje.Dawid Woźniak edytował(a) ten post dnia 29.08.11 o godzinie 01:51
Dawid S.

Dawid S. Senior Software
Engineer

Temat: Config, resources, moduły i layout

Dawid Woźniak:
Też miałem problem ze zmianą layoutu po przejściu do modułu admina.
Po przeczytaniu tego posta, a konkretnie zdania:

Bo jak usunę mu layout główny to w kodzie błędu w ogóle nie bierze pod uwagę powyższej lokalizacji. Szuka za to w "/modules/admin/views/scripts/", ale to i tak na końcu, czyli jak nie znajdzie w głównym.

Skoro nie znajduje w głównym to szuka w modułach..

Więc mając dalej ustawienia dla layoutów w ini
resources.layout.layoutPath = APPLICATION_PATH "/layouts"
i nie dodając żadnych cukierkowych pluginów do auto ładowania layoutów
wystarczy nie mieć głównego layoutu, a tylko modułowe. W skrócie: zamiast wrzucać layouty do zdefiniowanego w ini dla nich folderu, zostaw go pusty i wrzuć odpowiedni lay do odpowiedniego modułu do folderu
[moduł]/views/scripts/layout.phtml
pod nazwą tylko i wyłącznie layout.phtml, ponieważ innego domyślnie Zend nie załaduje.

Trzymanie layoutów w katalogu /views/scripts/ nie za bardzo mi pasuje. W przypadku kiedy mamy kilka plików (np. do panelu logowania bądź wyświetlania błędów), może robić się bałagan. Lepszym miejscem jest wg mnie /views/layouts/. Do ustalenia takiej lokalizacji używam pluginu layoutu odpalanego w application.ini:

resources.layout.pluginClass = "My_Controller_Plugin_ModuleBasedLayout"

Plugin:

class My_Controller_Plugin_ModuleBasedLayout extends Zend_Layout_Controller_Plugin_Layout
{
public function preDispatch(Zend_Controller_Request_Abstract $request)
{
$this->getLayout()
->setLayoutPath(APPLICATION_PATH . '/modules/' . $request->getModuleName() .'/views/layouts');
}
}
Dawid S. edytował(a) ten post dnia 26.10.11 o godzinie 11:40
Dawid Woźniak

Dawid Woźniak Programista PHP,
technik informatyk

Temat: Config, resources, moduły i layout

Dawid S.:
Trzymanie layoutów w katalogu /views/scripts/ nie za bardzo mi pasuje. W przypadku kiedy mamy kilka plików (np. do panelu logowania bądź wyświetlania błędów), może robić się bałagan. Lepszym miejscem jest wg mnie /views/layouts/. Do ustalenia takiej lokalizacji używam pluginu layoutu odpalanego w application.ini:

Ja podałem rozwiązanie bezpluginowe, jeśli używasz plugina to spoko, ale nie wszyscy chcą :)

Następna dyskusja:

Moduły w ZF




Wyślij zaproszenie do