Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Dynamiczny tytył strony <title>
Forum PHP.pl > Forum > Przedszkole
slawoo
Witam,

Zaczynam swoją przygodę z php i napotkałem się na pierwszy problem.
Mianowicie chciałem dynamicznie zmieniać sobie tytuł strony.
Przy nauce korzystam z szablonu ze stronki:
http://www.kess.snug.pl/?sid=10&pid=54

W czym problem...
Mam plik index.php o treści poniżej przdstawionej. Do tego pliki include (menu, head, stopka) oraz podstrony w html (1.html, 2.html, 3.html itd.)

  1. <?php
  2. // zmienna potrzebna do prawidlowego wczytania includowanych plikow
  3. $add_site = true;
  4.  
  5. // funkcja Title
  6. function Title($go) {
  7. $array_title = array(0=>'str_GŁW', omnie =>'podstrona 1 - o mnieX',
  8. 2=>'podstrona 2',3=>'podstrona 3',4=>'podstrona 4');
  9. // porownujemy zmienna $go z kluczem z tablicy
  10. foreach($array_title as $key => $val)
  11. if($go == $key) return $val;
  12. }
  13. ?>
  14.  
  15. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  16. <html>
  17. <meta http-equiv="Content-type" content="text/html; charset=iso-8859-2" />
  18. <meta http-equiv="Reply-to" content="kess@snug.pl" />
  19. <meta name="Author" content="Krzysztof Szypulski" />
  20. <head>
  21. <title><?php echo Title($_GET['go']); ?></title>
  22. <style type="text/css">
  23. <!--
  24.  
  25. body {
  26. font-family: Verdana, Arial;
  27. font-size: 12px;
  28. }
  29.  
  30. -->
  31. </style>
  32. </head>
  33. <body>
  34. <table border="1" cellpadding="0" cellspacing="0" width="100%">
  35. <tr>
  36. <td width="100%" colspan="3"><?php include "include/naglowek.php"; ?></td>
  37. </tr>
  38. <tr>
  39. <td width="15%" valign="top"><?php include "include/menu_lewe.php"; ?></td>
  40.  
  41.  
  42. <td width="70%" valign="top">
  43. <?php
  44. // zmienna $go przekazana metoda GET
  45. $go = $_GET['go'];
  46.  
  47. // sprawdzamy czy zmienna $go nie jest pusta
  48. if(!empty($go)) {
  49. // sprawdzamy czy plik o danej nazwie istnieje
  50. if(is_file("page/$go.html")) include "page/$go.html";
  51. // jezeli plik nie istnieje wyswietla się komunikat
  52. else echo "<br />Nie ma takiej strony :-(";
  53. }
  54. // jezeli zmienna $go jest pusta wyswietla się strona glowna
  55. else include "page/start.html";
  56.  
  57. ?>
  58. </td>
  59.  
  60.  
  61. <td width="15%" valign="top"><?php include "include/menu_prawe.php"; ?></td>
  62. </tr>
  63. <tr>
  64. <td width="100%" colspan="3"><?php include "include/stopka.php"; ?></td>
  65. </tr>
  66. </table>
  67. </body>
  68. </html>


Znajduje się tam funkcja title. Wszystko działa bez problemu o ile moje podstrony bedą miały nazwy w postaci liczb. Kiedy w w/w funkcji title zamiast podstrony "1" wpisałem "omnie" i utworzyłem podstrone "omnie.html" to tytuł przestaje się zmieniać. jak zrobić aby to działało.
Z góry dziękuję za podpowiedź.
jasin
Nie przygladałem się bliżej ale pierwsze co się rzuca to zamiast
  1. function Title($go) {
  2. $array_title = array(0=>'str_GŁW', omnie =>'podstrona 1 - o mnieX',
  3. 2=>'podstrona 2',3=>'podstrona 3',4=>'podstrona 4');
  4. // porownujemy zmienna $go z kluczem z tablicy
  5. foreach($array_title as $key => $val)
  6. if($go == $key) return $val;
  7. }

powinno być
  1. function Title($go) {
  2. $array_title = array(0=>'str_GŁW', 'omnie' =>'podstrona 1 - o mnieX',
  3. 2=>'podstrona 2',3=>'podstrona 3',4=>'podstrona 4');
  4. // porownujemy zmienna $go z kluczem z tablicy
  5. foreach($array_title as $key => $val)
  6. if($go == $key) return $val;
  7. }
slawoo
niestety te apostrofy nie rozwiązują problemu sad.gif
neverever
Na co ta pętla?

  1. function Title($go) {
  2.  
  3. $array_title = array(0=>'str_GŁW', 1 =>'podstrona 1 - o mnieX', 2=>'podstrona 2', 3=>'podstrona 3', 4=>'podstrona 4');
  4.  
  5. if(in_array($array_title, $go)) return $array_title[$go]; else return false;
  6.  
  7. }
slawoo
nie mam pojęcie na co ta pętla. Pisałem, że dopiero się uczę więc nie wszystko rozumiem.
Opieram się na tym kursie:
http://www.kess.snug.pl/?sid=10&pid=54

NiIestety ta funkcja którą wyżej podałeś nie działa. W polu title nie wyświetla żadnego tytułu.
crumb
Spróbuj po prostu tego:
  1.  
  2. function Title($go) {
  3. $array_title = array(0=>'str_GŁW', 'omnie' =>'podstrona 1 - o mnieX',
  4. 2=>'podstrona 2',3=>'podstrona 3',4=>'podstrona 4');
  5.  
  6. if(!empty($_GET['go']))
  7. return $array_title[$go];
  8. else return $array_title['0'];
  9. }


edit: Sprawdź teraz. I poczytaj trochę jeśli już zaczynasz się w to bawić. Przeanalizuj ten kod krok po kroku, sprawdź co robi każda z użytych funkcji. Okaż choć trochę zaangażowania. Nie zawsze znajdzie się ktoś kto podsunie gotowe rozwiązanie.
slawoo
no i prawie dobrze smile.gif Dzięki serdeczne
Już zwraca tytuł podstrony omnie.html

Jednak nie zwraca tytułu str_GŁW, czyli 0 (zero)
Ten wcześniejszy zapis z kolei zwracał.

Jakiś pomysł na to?
lukaszgolder
zamiast tablicy skorzystaj ze switcha
  1. function Title($go) {
  2. switch($go) {
  3. case 'omnie':
  4. return 'Podstrona 1 - o mnie';
  5. break;
  6.  
  7. // tutaj reszta podstron
  8.  
  9. default:
  10. return 'strona główna';
  11. }
  12. }
Pilsener
Nie korzystaj z tego sposobu bo jest od jakiś 10 lat przestarzały. Dziś strony traktuje się jako całość, Twój skrypt ma wygenerować tablicę, która będzie zawierać dokument HTML podzielony na elementy:
  1. $strona['title'] = 'tytul';
  2. $strona['keywords'] = 'slowa kluczowe';
  3. $strona['description'] = 'opis';
  4. $strona['charset'] = 'UTF-8'; //tak samo resztę meta
  5. $strona['szablon'] = 'templaty/glowny.tmpl';
  6. $strona['tresc'] = 'tutaj tresc strony';
- najlepiej strony razem z meta trzymać w bazie, charset pobierać np. z pliku cfg a oczywiście treść strony dalej można dzielić wg potrzeb na menu, stopkę, jakieś moduły czy panele etc.

Dopiero jak masz gotową stronę to łączysz ją z szablonem html, w tablicy strony masz info, jakiego użyć szablonu (gdy bp. brak to używasz domyślnego). Tu masz opisany prosty system szablonów:
http://www.programuj.com/artykuly/www/template.php

Zalety są oczywiste: nie musisz zaczynać od nagłówka, elementy strony możesz tworzyć w dowolnej kolejności, gdy np. wystąpi błąd to zamiast szablonu domyślnego możesz wrzucić szablon błędu, poszczególne szablony możesz łatwo edytować bez grzebania się w plikach php.

Moim zdaniem rozwijanie tego nie ma sensu, bo prędzej czy później i tak porzucisz ten sposób na rzecz trzymania danych w bazie, kodu HTML w szablonach a w PHP tylko algorytmu łączącego dane z HTML.
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.