Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Zmienna wyswietlajaca sie na poczatku strony
Forum PHP.pl > Forum > PHP
rogeros
Witajcie.
Na wstępie przyznaje się że nie korzystałem z wyszukiwarki bo nawet nie wiem czego mam szukać.
Nawet nie wiem jak dokladnie opisać moje pytanie smile.gif


Tworzę stronę internetową i w pliku index.php na samym poczatku skryptu znajdują się meta tagi.
W dalszej czesci kodu w pliku index.php includowane są inne pliki z podstronami.

I teraz tak. W includowanym pliku mam zmienna $title i chcialbym aby ta zmienna została wstawiona
w meta tagi <title>

Wiem ze to troche zagmatwałem ale może ktoś zrozumie istote problemu.
Za pomoc z góry dziekuje.

Pozdrawiam.
Nanaki_PL
Z tego co wiem PHP niestety niemoże zmieniac nagłówków tak późno ale można użyć JS
Zamiast zmiennej $title wrzuć to:

  1. <?php
  2. echo '<script language="JavaScript">document.title = " TYTUŁ STRONY ";</script>';
  3. ?>
domis86
najpierw ustawiasz wszystkie zmienne
a dopiero pozniej includujesz pliki z kodem HTML echując odpowiednie zmienne tam gdzie potrzeba - m.in zmienną $title tam gdzie jest tag <title></title>
misiek172
PHP może ustawiać nagłówki później poprzez polecenie

http://www.php.net/manual/pl/function.header.php
domis86
Cytat(misiek172 @ 9.07.2007, 08:24:50 ) *
PHP może ustawiać nagłówki później poprzez polecenie

http://www.php.net/manual/pl/function.header.php
nie o to chodzi.... blink.gif
abc667
zawsze też można użyć ob_*
rogeros
Cytat(abc667 @ 9.07.2007, 09:21:13 ) *
zawsze też można użyć ob_*


możesz rozwinąć swoją wypowiedź questionmark.gif
tommy4
chodzi o ob_start(); na początku i ob_end_flush(); na końcu generowanego skryptu.

ob_start() powoduje zatrzymanie wszystkich wychodzących stringów do czasu pojawienia się ob_end_flush();, które wyświetla to, co zdołało się nagromadzić w buforze. snitch.gif Czyli pomiędzy tymi funkcjami możesz użyć header bez problemu nawet jeśli zostało coś (teoretycznie) wypisane. Oczywiście to zadziała, jesli nic nie wypisujesz przed ob_start().
domis86
ale on nie chce zmieniac naglowka dokumentu tylko kod html (tag <title>)
delfinium
Zanim cokolwiek wyślesz do przeglądarki najlepiej na początku pliku głównego dajesz:

  1. <?php
  2. ?>


jak już wygenerujesz stronę dajesz:

  1. <?php
  2. $Content = ob_get_clean();
  3. ?>


Teraz w zmiennej $Content masz zawartość całej strony. Dajesz:

  1. <?php
  2. $Content = preg_replace( '/<title>(.*?)</title>/is', 'NOWY TYTUŁ STRONY' , $Content );
  3. echo $Content;
  4. ?>


i w ten sposób wysyłasz stronę ze zmienionym tagiem title. W miejscu 'NOWY ...' oczywiście wstawiasz swój tytuł ze zmiennej $title.
rogeros
ooo super o to wlasnie chodzilo.
mam jeszcze jedno pytanie.

czy to ma jakis wplyw na szybkosc wyswietlania strony
lub obciazenia serwera?
delfinium
IMHO ma. Ale bardzo małe jeśli w ogóle zauważalne. Wyrażenie regularne jest proste ale to dodatkowa instrukcja do przetworzenia. Najlepiej sprawdź ile zajmuje czas generowania strony przed a ile po zmianie. Wydaje mi się że różnica będzie w mikrosekundach albo mniej biggrin.gif
domis86
@delfinium: opanuj sie blink.gif czego ty go uczysz, to jest jakaś w ogole droga na około

@rogeros: zastosuj taki sposob:


zrob se pliki:

1.layout.php:
  1.  
  2. <title><? echo $page_title; ?></title>
  3. </head>
  4.  
  5.  
  6. <table style="width:100%;">
  7. <tr>
  8. <td style="width:20%;">
  9. <? include ('menu.php'); ?>
  10. </td>
  11. <td style="width:80%;">
  12. <? include ($page_content_for_layout); ?>
  13. </td>
  14. </tr>
  15. </table>
  16.  
  17. </body>
  18. </html>






2.menu.php:
  1. <table style="width:100%;">
  2. <tr>
  3. <td>
  4. <a href="index.php?page=main">Strona glowna</a>
  5. </td>
  6. </tr>
  7.  
  8. <tr>
  9. <td>
  10. <a href="index.php?page=gallery">Galeria</a>
  11. </td>
  12. </tr>
  13.  
  14. <tr>
  15. <td>
  16. <a href="index.php?page=contact">Kontakt</a>
  17. </td>
  18. </tr>
  19.  
  20. </table>



3. main.php
  1. <h2>To jest zawartosc strony glownej :)</h2>


4. gallery.php
  1. <h2>To jest zawartosc galerii tongue.gif</h2>


5. contact.php
  1. <h2>To jest zawartosc strony kontaktowej biggrin.gif Fajne nie? ;)</h2>



i najciekawszy:

6.index.php
  1. <?
  2.  
  3. $page = 'main';
  4. if (isset($_GET['page'])) $page = $_GET['page'];
  5.  
  6. switch ($page)
  7. {
  8. default:
  9. 'main':
  10. $page_title = 'Strona glowna';
  11. $page = 'main';
  12. break;
  13. 'gallery':
  14. $page_title = 'Galeria';
  15. break;
  16. 'contact':
  17. $page_title = 'Kontakt';
  18. break;
  19. }
  20.  
  21. $page_content_for_layout = $page . '.php';
  22.  
  23. include('layout.php');
  24.  
  25. ?>

No smile.gif Mogą być jakieś błędy bo pisałem tutaj z d*py, ale powinno działac aarambo.gif
Takie rozwiazanie mozna tez roziwnąć dodając akcje do kazdego templejta , ktore wykonają sie przed nim.
Zastanów sie nad tym kodem guitar.gif
delfinium
Cytat(domis86 @ 12.07.2007, 17:56:39 ) *
@delfinium: opanuj sie blink.gif czego ty go uczysz, to jest jakaś w ogole droga na około


@domis86: Co nazywasz drogą na około? Nie ma tej "jedynej słusznej drogi" prowadzącej do rozwiązania, ja przedstawiłem swój sposób, Ty swój. Proszę napisz mi w czym ten mój jest zły? Ja w Twoim sposobie widzę wadę - taka metoda wymaga, aby tytuł strony był wiadomy już w momencie gdy ma być wciągnięty konkretny plik, a co w przypadku gdy tytuł strony tak naprawdę ustalony zostaje dopiero w zaincludowanym pliku? Sam nawet podałeś przykład: Galeria. zgodnie z Twoim sposobem tytuł strony możesz nadać co najwyżej jako "Galeria" ale nie nadasz w ten sposób nazwy galerii, bo ona zostanie wyciągnięta z bazy czy jakiegokolwiek innego ustrojstwa dopiero w pliku galeria.php. A jak się okaże, że wybrana galeria jest już niedostępna to przydałoby się zmienić tytuł na coś w rodzaju błędu 404. A jak przyjdzie potrzeba zmiany tagów meta to co? Będziesz deklarował wszystkie zmienne w index.php?
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.