Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [ZendFramework] Nowa podstrona, kontroler, widok
Forum PHP.pl > Forum > PHP > Frameworki
in5ane
Cześć. Mam pytanie. Czy tworząc nową podstronę, w widoku muszę mięć tak: header/header.phtml (przykładowo inne podstrony działają tak: account/login.php, account/register.php)? A moje pytanie brzmi, czy da radę ustawić, żeby tylko tego headera nie wciskać dodatkowo do folderu?

W headerController.php mam tak:
  1. <?php
  2. class HeaderController extends Zend_Controller_Action {
  3.  
  4.    function init() {
  5.        $this->view->baseUrl = $this->_request->getBaseUrl();
  6.    }
  7.  
  8.    function headerAction() {
  9.        $config = new config();
  10.        $select = $config->select()->where('name = "title"');
  11.        $this->view->row_config = $config->fetchRow($select);
  12.    }
  13.    
  14. }
  15. ?>


No i w widoku tylko:
  1. <?php echo $this->view->row_config; ?>



Oczywiście to musi działać tylko na header, no bo inne podstrony muszą mieć te foldery.
gcdreak
Cytat(in5ane @ 17.07.2009, 20:37:39 ) *
A moje pytanie brzmi, czy da radę ustawić, żeby tylko tego headera nie wciskać dodatkowo do folderu?


To może spróbuj go wywołać bez wrzucania go do folderu.
in5ane
Gdyby to zadziałało, to bym tutaj nie pisał tematu ;/

Witam po 2 tygodniowej przerwie wakacyjnej. Wróciłem z nad morza i wracam do programowania. Ponawiam swoje pytanie jak to zrobić.
Sabistik
Ustawić własną ścieżkę do pliku widoku? http://framework.zend.com/manual/en/zend.c...viewintegration
in5ane
Troszkę w ogóle przerobiłem sobie to, ale i tak nie działa.

Zrobiłem tak:
LayoutController.php
  1. <?php
  2. class LayoutController extends Zend_Controller_Action {
  3.  
  4.    function init() {
  5.        $this->view->baseUrl = $this->_request->getBaseUrl();
  6.    }
  7.  
  8.    function layoutAction() {
  9.        $config = new config();
  10.        $select = $config->select()->where('name = "title"');
  11.        $this->view->row_config_title = $config->fetchRow($select);
  12.  
  13.        $this->render('layout', null, true);
  14.    }
  15.    
  16. }
  17. ?>


layout.phtml
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  2.   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  3. <html lang='pl' xml:lang='pl' xmlns='http://www.w3.org/1999/xhtml'>
  4. <head>
  5.    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  6.    <title>System of Announcements :: <?php echo $this->escape($this->title); ?></title>
  7.    <link rel="stylesheet" type="text/css" href="<?php echo $this->baseUrl;?>/public/styles/site.css" />
  8. </head>
  9. <body>
  10.  
  11.    <div id="content">
  12.        <div id="content_1">
  13.            <em>wersja beta 0.2</em>
  14.        </div>
  15.        <div id="content_2">
  16.            <?php echo $this->row_config_title->description; ?>
  17.        </div>
  18.        <div id="content_3">
  19.            Menu
  20.        </div>
  21.        <div id="content_4" style="text-align: center;">
  22.            tutaj jakies tam menu, bla bla bla bla....
  23.        </div>
  24.        <?php echo $this->layout()->content; ?>
  25.        <p id="footer">stopka.....</p>
  26.    </div>
  27.  
  28. </body>
  29. </html>


A taki dostaję error:
Kod
Notice: Trying to get property of non-object in C:\wamp\www\application\views\scripts\layout.phtml on line 20


Proszę o pomoc ;-)
Ikky
zawsze możesz np zrobić header.phtml w indexie i wtedy masz link

strona.com/index/header

albo mozesz zrobić nowy folder header w nim index.phtml

i w headerController nazwać akcje index i wtedy masz

strona.com/header
in5ane
Próbowałem tak, no ale to nie zdało egzaminu. Pewnie przez to, że plik header jest inkludowany do każdego innego pliku (który to już, korzysta z jakiegoś kontrolera).
Ikky
hmm a jakbys po prostu stworzył header.php w public ?
in5ane
Nie no, to nie da rady. Po prostu to określenie ścieżki do pliku widoku w kontrolerze coś mi nie śmiga.


--
po co się rozbijać? Złączyłem.

~erix
in5ane
Cześć, jak mógłbym utworzyć zmienna, która byłaby dostępna na każdej podstronie, a właściwie tylko w pliku layout.phtml? Chodzi o to, aby pobierało z bazy danych nazwę strony i ją wyświetlało (nazwę strony można sobie zmieniać w panelu administracyjnym). To samo chcę zrobić z e-mailem, słowami kluczowymi itp., które są w meta tagach.

Oto mój plik layout.phtml:
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  2.  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  3. <html lang='pl' xml:lang='pl' xmlns='http://www.w3.org/1999/xhtml'>
  4. <head>
  5.   <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  6.   <title>System of Announcements :: <?php echo $this->escape($this->title); ?></title>
  7.   <link rel="stylesheet" type="text/css" href="<?php echo $this->baseUrl;?>/public/styles/site.css" />
  8. </head>
  9. <body>
  10.  
  11.   <div id="content">
  12.       <div id="content_1">
  13.           <em>wersja beta 0.2</em>
  14.       </div>
  15.       <div id="content_2">
  16.           <!-- TUTAJ TEN TYTUŁ -->
  17.       </div>
  18.       <div id="content_3">
  19.           Menu
  20.       </div>
  21.       <div id="content_4" style="text-align: center;">
  22.           tutaj jakies tam menu, bla bla bla bla....
  23.       </div>
  24.       <?php echo $this->layout()->content; ?>
  25.       <p id="footer">stopka.....</p>
  26.   </div>
  27.  
  28. </body>
  29. </html>


Z góry dzięki za pomoc.

@edit: a może macie jakieś własne pomysły, jak mogę takie dane trzymać w bazie i je później wyświetlać w layoucie?

Sorka, że truję, ale zatrzymałem się na tym i nie wiem co mam dalej pisać.
omeck
Czy Twoje kontrolery korzystają z jednego wspólnego (nie bezpośrednio Zend_Controller_Action, a jakiegoś własnego który rozszerza tą klasę)? Jeśli tak, to w metodzie init() kontrolera możesz pobrać interesujące dane z bazy oraz przekazać helperów do HeadTile (http://framework.zend.com/manual/en/zend.v...itial.headtitle) oraz HeadMeta (http://framework.zend.com/manual/en/zend.v...nitial.headmeta). To jest po najmniejszej linii oporu - przy każdej akcji dowolnego kontrolera będzie to pobierane z bazy - trochę bez sensu pobierać prawie statyczne dane za każdym razem, ale na szczęście istnieje Zend_Cache (http://framework.zend.com/manual/en/zend.cache.html) guitar.gif
in5ane
Moje kontrolery korzystają ze standardowego Zend_Controller_Action. W jaki sposób mogę stworzyć własny, wspólny kontroler oraz w jaki sposób się do niego odnosić? Oraz gdzie powinien się znajdować mój stworzony kontroler, czyżby w library?
omeck
Cytat(in5ane @ 11.08.2009, 21:47:39 ) *
Moje kontrolery korzystają ze standardowego Zend_Controller_Action. W jaki sposób mogę stworzyć własny, wspólny kontroler oraz w jaki sposób się do niego odnosić? Oraz gdzie powinien się znajdować mój stworzony kontroler, czyżby w library?

Sam sobie odpowiedziałeś ;-) Tak, przyjmuje się własne klasy/biblioteki które mogą być wykorzystane w całej aplikacji umieszcza się z library (z zachowaniem nazewnictwa klasy w zf). Tam umieszczasz jeden kontroler, który dziedziczy po Zend_Controller_Action, a reszta kontrolerów niech dziedziczy po Twoim kontrolerze (prędzej, czy później okazuje się to bardzo wygodnym rozwiązaniem ;-)).
in5ane
No dzięki, udało mi się.

Pozdrawiam ;-)
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.