Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [ZendFramework] Nowa podstrona, kontroler, widok
in5ane
post
Post #1





Grupa: Zarejestrowani
Postów: 1 335
Pomógł: 34
Dołączył: 9.11.2005
Skąd: Wrocław

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


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.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 13)
gcdreak
post
Post #2





Grupa: Zarejestrowani
Postów: 365
Pomógł: 8
Dołączył: 16.12.2008

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


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.
Go to the top of the page
+Quote Post
in5ane
post
Post #3





Grupa: Zarejestrowani
Postów: 1 335
Pomógł: 34
Dołączył: 9.11.2005
Skąd: Wrocław

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


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ć.
Go to the top of the page
+Quote Post
Sabistik
post
Post #4


Administrator wortalu


Grupa: Przyjaciele php.pl
Postów: 960
Pomógł: 39
Dołączył: 21.10.2003
Skąd: Kraków

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


Ustawić własną ścieżkę do pliku widoku? http://framework.zend.com/manual/en/zend.c...viewintegration
Go to the top of the page
+Quote Post
in5ane
post
Post #5





Grupa: Zarejestrowani
Postów: 1 335
Pomógł: 34
Dołączył: 9.11.2005
Skąd: Wrocław

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


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 ;-)

Ten post edytował in5ane 1.08.2009, 14:05:44
Go to the top of the page
+Quote Post
Ikky
post
Post #6





Grupa: Zarejestrowani
Postów: 120
Pomógł: 1
Dołączył: 5.07.2009

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


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
Go to the top of the page
+Quote Post
in5ane
post
Post #7





Grupa: Zarejestrowani
Postów: 1 335
Pomógł: 34
Dołączył: 9.11.2005
Skąd: Wrocław

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


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).
Go to the top of the page
+Quote Post
Ikky
post
Post #8





Grupa: Zarejestrowani
Postów: 120
Pomógł: 1
Dołączył: 5.07.2009

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


hmm a jakbys po prostu stworzył header.php w public ?
Go to the top of the page
+Quote Post
in5ane
post
Post #9





Grupa: Zarejestrowani
Postów: 1 335
Pomógł: 34
Dołączył: 9.11.2005
Skąd: Wrocław

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


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


Ten post edytował erix 3.08.2009, 11:01:09
Go to the top of the page
+Quote Post
in5ane
post
Post #10





Grupa: Zarejestrowani
Postów: 1 335
Pomógł: 34
Dołączył: 9.11.2005
Skąd: Wrocław

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


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ć.

Ten post edytował in5ane 6.08.2009, 10:25:47
Go to the top of the page
+Quote Post
omeck
post
Post #11





Grupa: Zarejestrowani
Postów: 79
Pomógł: 7
Dołączył: 2.07.2005
Skąd: Lublin

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


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) (IMG:style_emoticons/default/guitar.gif)
Go to the top of the page
+Quote Post
in5ane
post
Post #12





Grupa: Zarejestrowani
Postów: 1 335
Pomógł: 34
Dołączył: 9.11.2005
Skąd: Wrocław

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


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?
Go to the top of the page
+Quote Post
omeck
post
Post #13





Grupa: Zarejestrowani
Postów: 79
Pomógł: 7
Dołączył: 2.07.2005
Skąd: Lublin

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


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 ;-)).
Go to the top of the page
+Quote Post
in5ane
post
Post #14





Grupa: Zarejestrowani
Postów: 1 335
Pomógł: 34
Dołączył: 9.11.2005
Skąd: Wrocław

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


No dzięki, udało mi się.

Pozdrawiam ;-)
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: 24.08.2025 - 21:09