Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [ZendFramework] Zend_Layout
wlamywacz
post
Post #1





Grupa: Zarejestrowani
Postów: 535
Pomógł: 27
Dołączył: 3.05.2005

Ostrzeżenie: (20%)
X----


Witam smile.gif

Tworze swój pierwszy projekt w tym frameworku. W swoim szablonie w zależności od potrzeb generuje dwa rodzaje menu, jak rozwiązać problem renederowania wybranego menu w zależności od wybranego w kontrolerze?

http://framework.zend.com/manual/en/zend.l...quickstart.html
  1. <body>
  2.    <!-- renders /nav/menu -->
  3.    <div id="nav"><?= $this->layout()->nav ?></div>
  4.  
  5.    <!-- renders /foo/index + /comment/fetch -->
  6.    <div id="content"><?= $this->layout()->content ?></div>
  7. </body>


Jak np. tu layout()->nav
Go to the top of the page
+Quote Post
mrok
post
Post #2





Grupa: Zarejestrowani
Postów: 258
Pomógł: 17
Dołączył: 22.05.2007

Ostrzeżenie: (0%)
-----


Jeśli potrzebujesz to na szybko to w kontrolerze mozesz wczytac coś pod zmieną
$this->layout->nav = 'cokolwiek' i taki tekst pojawi sie na ekranie.
Jesli masz statycznego htmla to mozesz zapisac go jako plik i wczytac pod te zmienna.

Tylko im dłużej o tym myśle to troche chybione generować kod html (widok) w kontrolerze.
Jak znadję chwile to sprawdzę czy nie da się podstawić tam jakiegoś szablonu do wyrenderowania, chyba ze ktoś lepszy ubiegnie mnie z odpowiedzią (oby;)

Pozdrawiam
Mrok


--------------------
Go to the top of the page
+Quote Post
qba_rox
post
Post #3





Grupa: Zarejestrowani
Postów: 29
Pomógł: 1
Dołączył: 12.01.2009
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


w kontrolerze twojej glownej akcji:

  1. <?php
  2. $this->_helper->actionStack('top', 'menu', 'general');
  3. ?>


kod powyzej, dodaje do petli dispatchera akcje top z controllera menu w module general, ale ten kod powyzej nam nie starcza, bo mimo ze menu zostanie wygenerowane, to wynik zostanie dopisany do glownego segmentu obiektu response (content), dlatego pod koniec akcji top nalezy to zmienic, uzyjemy jednej z najlatwiejszych mozliwosci:
  1. <?php
  2. $this->render('nazwa templata, ktora moze byc nullem i wtedy bedzie wyrenderowany defaultowy dla akcji', 'nazwe segmentu, w twoim wypadki menu')
  3. ?>


oczywiscie mozna to wyszstko tak fajnie usystematyzowac uzywajac pluginow i innych magicznych sztuczek ale to inny temat. pozdrawiam

w kontrolerze twojej glownej akcji:

$this->_helper->actionStack('top', 'menu', 'general');

kod powyzej, dodaje do petli dispatchera akcje top z controllera menu w module general, ale ten kod powyzej nam nie starcza, bo mimo ze menu zostanie wygenerowane, to wynik zostanie dopisany do glownego segmentu obiektu response (content), dlatego pod koniec akcji top nalezy to zmienic, uzyjemy jednego z najlatwiejszych mozliwosci:
  1. <?php
  2. $this->render('nazwa templata, ktora moze byc nullem i wtedy bedzie wyrenderowany defaultowy dla akcji', 'nazwa segmentu, w twoim wypadki menu')
  3. ?>


oczywiscie mozna to wyszstko tak fajnie usustematyzowac uzywajac pluginow i innych magicznych sztuczek ale to inny temat. pozdrawiam

Ten post edytował qba_rox 21.01.2009, 01:37:46


--------------------
Kodzimy!!!
Go to the top of the page
+Quote Post
wlamywacz
post
Post #4





Grupa: Zarejestrowani
Postów: 535
Pomógł: 27
Dołączył: 3.05.2005

Ostrzeżenie: (20%)
X----


Zrobiłem to w troszkę inny sposób:
  1. <?php
  2. $response = $this->getResponse();
  3. $response->insert('menu', $this->view->render('menu.phtml'));
  4. ?>
Go to the top of the page
+Quote Post
adgad
post
Post #5





Grupa: Zarejestrowani
Postów: 74
Pomógł: 0
Dołączył: 14.04.2010

Ostrzeżenie: (0%)
-----


Witam, mam problem, męczę się z Zend_layout i to ładne parę dni, znalazłem taki tutorial:
http://www.goodcomputingtips.com/site/tag/zend-framework/
no i niby wszystko jest ok, niby działa jak ma działać, ale zmodyfikowałem layout.phtml:
  1. <?php echo $this->doctype(); ?>
  2. <html>
  3. <head>
  4. <?php echo $this->headTitle(); ?>
  5. <?php echo $this->headMeta(); ?>
  6. <?php echo $this->headLink(); ?>
  7. <?php echo $this->headLink()->appendStylesheet($this->baseUrl() . '/styles/default.css'); ?>
  8. <?php echo $this->headScript(); ?>
  9. </head>
  10. <body>
  11. <div id="header">
  12. <h1>ZF Basics</h1>
  13. <p><?php echo $this->layout()->navigacja; ?></p>
  14. </div>
  15. <div id="content">
  16. <?php echo $this->layout()->content; ?>
  17.  
  18. </div>
  19. </body>
  20. </html>

i teraz mam pytanie gdzie mam wczytać plik navigacja.phtml? gdzie on powinien się znajdować? czy powinien być w layouts/scripts/ czy w views/scripts/index/ czy jeszcze w innej lokalizacji? czy muszę tworzyć nowy kontroler? Bardzo proszę o pomoc.
Go to the top of the page
+Quote Post
KrzysiekWildfire
post
Post #6





Grupa: Zarejestrowani
Postów: 93
Pomógł: 11
Dołączył: 27.10.2010
Skąd: Kutno/Poznań

Ostrzeżenie: (0%)
-----


Możesz wykorzystać Zend_Navigation - możesz wczytać nawigację w Bootstrapie czy też Pluginie, w pluginie przypisujesz:
  1. class Twoj_Skrypt_Controller_Plugin_Acl extends Zend_Controller_Plugin_Abstract {
  2. public function preDispatch(Zend_Controller_Request_Abstract $request) {
  3. $navigationConfig = new Zend_Config_Xml(APPLICATION_PATH.'/configs/page_navigation.xml','nav');
  4. $navigation = new Zend_Navigation($navigationConfig->toArray());
  5. Zend_Registry::set('Zend_Navigation',$navigation);
  6. }
  7. }

Jak nie wiesz, gdzie umieścić plugin, to zapytaj Google, a jak dalej nie będziesz wiedział, to pisz tutaj.
I teraz w layoucie:
  1. $this->navigation()->menu();

I powinieneś zobaczyć menu smile.gif. Oczywiście musisz jeszcze stworzyć swoją navigację, jak nie będziesz wiedział jak, to pisz.
Go to the top of the page
+Quote Post
adgad
post
Post #7





Grupa: Zarejestrowani
Postów: 74
Pomógł: 0
Dołączył: 14.04.2010

Ostrzeżenie: (0%)
-----


Kłopot w tym że już google pytałem, patrzyłem na masę tutoriali, wszystkie są oczywiście w j. angielskim, po wpisaniu w google zend_layout doszedłem do 8 strony wyników smile.gif i za każdym razem wygląda to nieco inaczej, w manualu nie jest to do końca wytłumaczone, prz najmniej ja tego nie rozumiem, a tutoriale tak jak pisałem - każdy nieco inny, nieco inne sposoby na rozwiązanie problemu - wiadomo, ale działają mi te tylko co jest pozmieniane najwięcej, przez co później się pogubię, więc wolę sam od początku to zrobić, szczerze mówiąc już od tego się pogubiłem, no ale nie mogę się poddawać.
Odnośnie problemu to nie chodzi mi konkretnie o nawigację, tylko ogólnie że będę chciał w layout stworzyć coś jak:
  1. <?= $this->layout()->cokolwiek ?>

bo dla content wczytuje zawartość z pliku index.phtml, a odnosi się do tego akcja indexAction w indexController a do kolejnych takich odwołań co się odwołuje?
Dlatego proszę o pomoc w zrozumieniu tego, bo nie wiem, za każdym razem jak będę chciał dodać np:
  1. <?= $this->layout()->loginForm ?>

to muszę wszystko tworzyć jako plugin?
Bo chciałbym pojąć ten zend_layout.
Go to the top of the page
+Quote Post
CzarnyGsm
post
Post #8





Grupa: Zarejestrowani
Postów: 84
Pomógł: 2
Dołączył: 16.04.2007

Ostrzeżenie: (0%)
-----


Jeżeli chciałbyś dodać do swojego layout'u przykładowo:
Kod
<?php echo $this->layout()->login ?>

Musisz najpierw utworzyć kontroler i akcję o odpowiedniej nazwie tj. kontroler np. o nazwie załóżmy "uzytkownicy" a w nim powinna znajdować się akcja o nazwie loginAction.
Po tych czynnościach masz pliczek w application/views/scripts/uzytkownicy/login.phtml. Aby wyświetliła Ci się dyrektywa echo $this->layout()->login musisz jeszcze w swoim layout'cie dodać $this->layout()->login = $this->action('login', 'uzytkownicy');. Powinno bez zarzutów pojawić Ci się zawartość login.phtml.

-edit-
Zakładam, że używasz komend Zend'a bo w innym wypadku po utworzeniu kontrolera i akcji nie będziesz miał automatycznie utworzonego pliku phtml.
Jestem początkujące, więc mogę się mylić za co z góry przepraszam, ale ja tak ten Zend_Layout obczajam.

Ten post edytował CzarnyGsm 15.09.2011, 13:21:16
Go to the top of the page
+Quote Post
adgad
post
Post #9





Grupa: Zarejestrowani
Postów: 74
Pomógł: 0
Dołączył: 14.04.2010

Ostrzeżenie: (0%)
-----


Ok, dzięki wielkie. Sprawdzę to co napisałeś w najbliższych dniach i napiszę czy pomogło, używam oczywiście komend zenda.

Działa wszystko, zaraz poprosze moderatora o plusik za pomógł jeśli się da smile.gif, dzięki jeszcze raz, bo nawet nie wiesz ile ja szukałem rozwiązania które jest tak proste.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 22.08.2025 - 11:35