Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> zmiana pól obiektu
angerthor
post
Post #1





Grupa: Zarejestrowani
Postów: 73
Pomógł: 0
Dołączył: 13.02.2006
Skąd: Warszawa

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


Witam,

Oto mój problem : mam klasę strona.inc

  1. <?php
  2. class Strona
  3. {
  4. protected $tytul
  5.  
  6.  
  7. function __construct ($tytul ="moja www")
  8. {
  9. $this -> tytul = $tytul
  10. }
  11.  
  12. function wyswietl ()
  13. {
  14.  
  15. echo '<html><head><title>'.$this -> tytul.'</head><body>';
  16. wyswietl_body();
  17. echo '</body></html>';
  18. }
  19.  
  20. function wyswietl_body()
  21. {
  22. // tutaj jakis skrypt ktory includuje odpowiednie strony
  23. }
  24.  
  25.  
  26. }
  27. ?>


pozniej plik index.php
  1. <?php
  2. require(strona.inc);
  3. $strona = new Strona();
  4. $strona ->wyswietl();
  5. ?>


funkcja wyswietl body na podstawie urla includuje opowiedni plik, co onzacza, ze zawsze operujemy na pliku index.php

i teraz moj problem, mamy np. podstrona.php, ktora jest includowana do czesci body i chcemy w niej zmienic pole tytul
  1. <?php
  2. $this - > tytul = "nowy tytul";
  3. ?>


rzeczywiscie po wpisaniu echo $this ->tytul, tytuł rzeczywiście jest zmieniony, ale w gornym pasku przegladarki pozostaje poprzedni.

Czy mozna cos na to poradzic z poziomu strony "podstrona.php", czy jedyne wyjscie to odpowiedni kod w pliku index.php, ktory bedzie dawal konstruktorowi opcjonalny parametr tytul ?

Mam nadzieje, ze to w miare jasno wytlumaczylem (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)

Z gory dzieki
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 9)
bim2
post
Post #2





Grupa: Zarejestrowani
Postów: 1 873
Pomógł: 152
Dołączył: 9.04.2006
Skąd: Berlin

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


protected $tytul
zamień na
public $tytul
Go to the top of the page
+Quote Post
Foxx
post
Post #3





Grupa: Zarejestrowani
Postów: 896
Pomógł: 76
Dołączył: 15.11.2003
Skąd: Sosnowiec/Kraków

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


bim2 - nie w tym rzecz. Przecież ta klasa może korzystać z własnego pola protected.
Analizowałem Twój kod, angerthor i dochodzę do wniosku, że z ogólną koncepcją jest
coś nie tak: wyświetlasz stronę nadając jej tytuł w konstruktorze, potem wyświetlasz title za
pomocą metody wyswietl() a potem tresc w body. Ale jeżeli w tej tresci body zmienisz title to
żeby go wyświetlić w pasku przeglądarki, musiałbyś ponownie wyświetlić fragment kodu z <title>.
Ale jeżeli przeładujesz stronę - cały proces powtórzy się od nowa i znowu będziesz miał domyślnie
przydzielony title w konstruktorze + zmienną ustawioną na nowy tytuł ale niewyświetloną.
Go to the top of the page
+Quote Post
angerthor
post
Post #4





Grupa: Zarejestrowani
Postów: 73
Pomógł: 0
Dołączył: 13.02.2006
Skąd: Warszawa

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


No właśnie tak samo myślę. Zastanawiałem się tylko czy to można jakoś obejść (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) , ale jak się nie da to trudno.
Go to the top of the page
+Quote Post
nexik
post
Post #5





Grupa: Zarejestrowani
Postów: 14
Pomógł: 1
Dołączył: 23.12.2008
Skąd: Radzionków

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


renderowanie kodu powinno byc na koncu - robienie takiego spaghetti jest zlym pomyslem, oczywiscie jak sie upierasz przy tym rozwiazaniu mozna

napisac funkcje wyswietlbody ktora podmienia title i zwraca string (kod html) przypisac go do zmiennej $body
a potem dopiero wyswietlic wszystko w templatce
Go to the top of the page
+Quote Post
angerthor
post
Post #6





Grupa: Zarejestrowani
Postów: 73
Pomógł: 0
Dołączył: 13.02.2006
Skąd: Warszawa

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


oky, to proszę napiszcie, czy moja koncepcja jest optymalna:

Opierajac sie na formie strony z pierwszego postu doszedlem do wniosku, ze aby zmieniac temat zamieszcze odpowiedni kod w pliku index.php, tam gdzie jest wywolywany konstruktor.

Mój problem: mam stronę z różnymi podstronami, m.in. z artykułami. Na wszystkich podstronach chce mieć title="moja www", na stronie z artykułami chcę mieć title="tytuł" pobrany z bazy danych. Rozbijając urla mogę się dowiedzieć, czy ten url prowadzi do artykułu, czy do jakiejś innej podstrony, i modyfikując plik index.php mam :

  1. <?php
  2. require(strona.inc);
  3.  
  4. $adres = robij_url(); // rozbija url, zwracajac tablice
  5.  
  6. $pozycja = "";
  7. if ($adres[2] == "artykul")
  8. {
  9.        // tutaj lacze sie z baza Mysql i pobieram z niej tytuł odpowiedniego artu
  10.  
  11.    $tytul = $art['tytul'];
  12.  
  13.    $strona = new Strona($tytul);
  14.  
  15. }
  16. else {
  17. $strona = new Strona();
  18. }
  19.  
  20. $strona ->wyswietl();
  21. ?>


czy taka koncepcja jest w miarę wydajna ? Pytam bo dopiero nie dawno przestawiłem się ze strukuralnego php, na obiektowy i do konca nie jestem pewien czy moj kod jest wydajny ;P
Go to the top of the page
+Quote Post
Crozin
post
Post #7





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


  1. <?
  2.  
  3. $strona = new Strona();
  4.  
  5. if(/* jest artykulem */){
  6.  $strona->setTitle('Tytul');
  7. }
  8.  
  9. $strona->display();
  10. ?>
Go to the top of the page
+Quote Post
angerthor
post
Post #8





Grupa: Zarejestrowani
Postów: 73
Pomógł: 0
Dołączył: 13.02.2006
Skąd: Warszawa

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


fakt, wielki dzięki,

a jeszcze takie pytanie ogólne: czy lepiej jest tworzyć wszystkie settery (np. setTitle, setDesciption, setSth itd.), czy stworzyc jedna funkcje __set ?


  1. <?php
  2. function __set ($nazwa, $wartosc)
  3.    {
  4.        $this -> $nazwa = $wartosc;
  5.    }
  6. ?>



i pozniej juz tylko
  1. <?php
  2. $this -> tytul = "cos tam";
  3. ?>
Go to the top of the page
+Quote Post
Crozin
post
Post #9





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


Jeżeli __set() ma tak wyglądać to lepiej go nie robić.
Go to the top of the page
+Quote Post
ayeo
post
Post #10





Grupa: Przyjaciele php.pl
Postów: 1 202
Pomógł: 117
Dołączył: 13.04.2007
Skąd: 127.0.0.1

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


Przenoszę na PHP.

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 - 23:14