Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [ZF] Template'y z uzyciem zend_layout i zend_view, Poczatkujacy
matchor
post
Post #1





Grupa: Zarejestrowani
Postów: 46
Pomógł: 0
Dołączył: 1.05.2005

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


Witam. Raczkuje z ZF i bardzo prosze was o pomoc bo juz glupieje. Uzywam najnowszej wersji ZF.

Chce zrobic sobie szablon 3 kolumnowy + header + stopka. Uzylem do tego zend_layout i stworzylem sobie szkielet strony. Teraz w zaleznosci od akcji chce wyswietlac w poszczegolnych elementach layoutu inna zawartosc

i tak np na stronie index w indexControlers chce sobie ustawic by w 'module srodkowym' layoutu miec tresc powitania/'prawej kolumnie' guzik do zalogowania / w 'lewej kolumnie' nie wiem cos innego

na stronie login.html ( loginControlers) chce miec juz cos innego czyli zamiast w lewej kolumnie logowania chce miec np liste ostatnio zalogowanych uzytkownikow
w srodkowej czesci natomiast formularz logowania
w prawej jeszcze cos innego

czyli w zaleznosci od strony do poszczegolnych elementow layoutu chce wrzucac calkowicie inna nie powiazana ze soba tresc cos a'la if (index) include_template_a / else include_template_b

w jaki sposob to oprogramowac ? ja juz sie poddaje i nie za bardzo wiem.

probowalem tak:

w layoucie w odpowiednim katalogu application/views/scripts/index/index.phtml oraz w application/views/scripts/index/login.phtml mam taki sam kod layoutu (tu juz mi cos nie pasuje bo n roznych stron w serwisie i mam tworzyc n takich samych layoutow??) w odpowiednich miejscach htmla printuje

<?php echo $this->layout()->lewaK; ?>
<?php echo $this->layout()->srodekK; ?>
<?php echo $this->layout()->prawaK; ?>


nastepnie w indexControlers

$this->_helper->layout()-> lewaK= = $this->render('guzikZaloguj');
$this->_helper->layout()-> srodekK= $this->render('powitanie');
$this->_helper->layout()-> prawaK= $this->render('cos');


a w loginControlers

$this->_helper->layout()-> lewaK= = $this->render('ostatniZalogowani');
$this->_helper->layout()-> srodekK= $this->render('formularzLogowania');
$this->_helper->layout()-> prawaK= $this->render('cos2');



guzikZaloguj.phtml powitanie.phtml etc... mam w katalogu /application/layouts/scripts




czy dobrze kombinuje ? co robie zle ? - bo niestety nie osiagam zamierzonego efektu. W dodatku nie dostaje zadnych warningow errorow noticow - nic co by sugerowalo ze cos robie zle :|

przypisanie do $this->_helper->layout()-> lewaK = "asdada" dziala i wyswietla na stronie tekst - natomiast chcialbym zeby wyswietlalo zawartosc 'template'a'

z gory dzieki za poswiecony czas i pomoc

Ten post edytował matchor 17.10.2009, 23:02:23
Go to the top of the page
+Quote Post
seth-kk
post
Post #2





Grupa: Zarejestrowani
Postów: 444
Pomógł: 79
Dołączył: 26.05.2009

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


to twoje application/views/scripts/index/index.phtml to widok a nie layout

ten efekt mozna osiagnac na wiele sposobow
chyba najprostszy to switch/if + action view helper
czyli cos w stylu
  1. <div id="left>
  2. <?php
  3. switch($controller_action)
  4. {
  5. case 'index_index':
  6. echo $this->action(...);
  7. break;
  8. //....
  9. }
  10. ?>
  11. </div>
  12. <div id="center">
  13. <?= $this->layout()->content; ?>
  14. </div>
  15. <div id="right">
  16.  
  17. <?php
  18. switch($controller_action)
  19. {
  20. case 'index_index':
  21. echo $this->action(...);
  22. break;
  23. //....
  24. }
  25. ?>
  26. </div>

ale rownie dobrze moznaby action helper zastapic partialami lub sterowanie przesunac do controllerow lub helperow jesli zawartosc bocznych elementow nie powina trafiac do glownego contentu
Go to the top of the page
+Quote Post
Sajrox
post
Post #3





Grupa: Zarejestrowani
Postów: 254
Pomógł: 7
Dołączył: 9.10.2007
Skąd: Poznań

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


Ja mam to tak:

Mój layout.phtml
  1. <?= $this->partial('header.phtml'); ?>
  2. <?= $this->partial('top.phtml', array('imagesPath' => $this->imagesPath)); ?>
  3. <?= $this->partial('left.phtml'); ?>
  4.  
  5. <div class="body_container">
  6. <div class="body">
  7.  
  8. <?= $this->layout()->content ?>
  9.  
  10. </div>
  11. </div>
  12.  
  13. <?= $this->partial('right.phtml') ?>
  14. <?= $this->partial('footer.phtml') ?>
  15.  


Ale mozna to zrobić też tak:
  1. <?php
  2. if (isset($this->partialUp) AND is_array($this->partialUp))
  3. {
  4. foreach ($this->partialUp as $lay)
  5. {
  6. if (isset($lay['name']) AND $lay['name'] != '')
  7. {
  8. if (isset($lay['params']))
  9. $params = $lay['params'];
  10. else
  11. $params = array();
  12.  
  13. $this->partial($lay['name'], $params);
  14. }
  15. }
  16. }
  17. ?>
  18.  
  19. <div class="body_container">
  20. <div class="body">
  21.  
  22. <?= $this->layout()->content ?>
  23.  
  24. </div>
  25. </div>
  26.  
  27.  
  28. <?php
  29. if (isset($this->partialDown) AND is_array($this->partialDown))
  30. {
  31. foreach ($this->partialDown as $lay)
  32. {
  33. if (isset($lay['name']) AND $lay['name'] != '')
  34. {
  35. if (isset($lay['params']))
  36. $params = $lay['params'];
  37. else
  38. $params = array();
  39.  
  40. $this->partial($lay['name'], $params);
  41. }
  42. }
  43. }
  44. ?>


Do zmiennych $this->partialUp oraz $this->partialDown dodajesz strony które chcesz dołączyć. Pisałem z ręki więć nie dam głowy że to działa (IMG:style_emoticons/default/winksmiley.jpg)

Ten post edytował Sajrox 18.10.2009, 19:51:59
Go to the top of the page
+Quote Post
matchor
post
Post #4





Grupa: Zarejestrowani
Postów: 46
Pomógł: 0
Dołączył: 1.05.2005

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


no dobra ale co w takim razie podaje do np <?= $this->partial('right.phtml') ?> gdzie ustawiam co tam ma byc i jak wygladac ?
Go to the top of the page
+Quote Post
seth-kk
post
Post #5





Grupa: Zarejestrowani
Postów: 444
Pomógł: 79
Dołączył: 26.05.2009

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


Cytat(matchor @ 19.10.2009, 11:52:44 ) *
no dobra ale co w takim razie podaje do np <?= $this->partial('right.phtml') ?> gdzie ustawiam co tam ma byc i jak wygladac ?

jesli tak to zrobisz to w tym partialu
Go to the top of the page
+Quote Post
Sajrox
post
Post #6





Grupa: Zarejestrowani
Postów: 254
Pomógł: 7
Dołączył: 9.10.2007
Skąd: Poznań

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


tam gdzie masz swój plik layout.phtml tworzysz right.phtml i już
Go to the top of the page
+Quote Post
matchor
post
Post #7





Grupa: Zarejestrowani
Postów: 46
Pomógł: 0
Dołączył: 1.05.2005

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


i co i w right.phtml mam miec

switch(akcja)
case akcja1:
case akcja2
case akcja.. n





i wszystkie mozliwe widoki jakie moze przyjac prawa kolumna layoutu ?


bardziej myslalem o rozwiazaniu ze w kontrolerze ustalam jaki phtml ma sie znalezc w right i raz bym robil right = right.phtml a raz right=sidebar.phtml a innym razem right=xyz.phtml

Ten post edytował matchor 19.10.2009, 18:54:52
Go to the top of the page
+Quote Post
Sajrox
post
Post #8





Grupa: Zarejestrowani
Postów: 254
Pomógł: 7
Dołączył: 9.10.2007
Skąd: Poznań

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


Ja robie to tak. W layout.phtm przy pomocy:

  1.  
  2. <?= $this->partial('...'); ?>
  3.  


ładuję stały kod html który siuę nie zmienia




Jednak do dynamicznego generowania zawartości bocznych menu używam:

  1.  
  2. <?= $this->action('...'); ?>
  3.  





Generalnie najpierw w kontrolerze globalnym tworzę tablicę np:

  1.  
  2. $modułyBoczne[] = array(
  3.  
  4. 'controller' => 'firmy',
  5.  
  6. 'action'   => 'najnowsze'
  7.  
  8. );
  9.  
  10. $modułyBoczne[] = array(
  11.  
  12. 'controller' => 'artykuly',
  13.  
  14. 'action'   => 'najnowsze'
  15.  
  16. );
  17.  
  18. $this->getRequest()->setParam('modułyBoczne', $modułyBoczne);
  19.  
  20.  
  21.  





i w Layout.phtml

  1.  
  2. foreach ($this->getRequest()->getParam('modułyBoczne') as $v)
  3.  
  4.      $this->action($v['action'], $v['controller']);
  5.  





Próbuje przedstawić sam sens działania, jednak powinieneś to sam już bardziej rozbudować, ale jeśli załapałeś o co chozi to bez problemu sobie z tym poradzisz (IMG:style_emoticons/default/winksmiley.jpg)

Pamiętaj aby w tych akcjach które wyświetlasz przez $this->action() wyłączyć layput:

  1.  
  2. $this->view->layout()->disableLayout();
  3.  




Go to the top of the page
+Quote Post
matchor
post
Post #9





Grupa: Zarejestrowani
Postów: 46
Pomógł: 0
Dołączył: 1.05.2005

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


WIELKIE DZIĘKI (IMG:style_emoticons/default/exclamation.gif) To rozwiązanie mi się podoba.

Ja wczoraj metodą prób i błędów zrobiłem sobie to na tej zasadzie:

w layoutcie mam

<?php echo $this->leftColumn;?>

natomiast w controlerze robie

$this->view->leftColumn = $this->view->render('pasekLewyLogowanie.phtml');

nawet sie sprawdza

niemniej twoje rozwiazanie bardziej do mnie przemawia (IMG:style_emoticons/default/smile.gif)

Jeszcze raz dzieki (WSZYSTKIM (IMG:style_emoticons/default/winksmiley.jpg) )

Ten post edytował matchor 20.10.2009, 08:29:07
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 22.08.2025 - 21:55