Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [HTML][PHP]Zmiana tytułu stron
Forum PHP.pl > Forum > Przedszkole
radziowie
Mam taki problem. Otóż mam parę podstron. Chciałbym aby dla każdej był inny tytuł. Mam tak:
- strone główną (index.php)
- nowości (newsy.php)
- instrukcje (instrukcje.php)
- ...
I tak chciałbym, aby gdy np. wejdę na instrukcje (czyli stronę .../instrukcje.php) To w tytule będę miał <title>Instrukcje</title>.
Szukałem trochę i znalazłem
  1. http://www.kess.snug.pl/?sid=10&pid=23

Jednak jak widzimy tytuł pobierany jest ze strony index.php?go=... Co zrobić aby można było zastosować skrypt do moich potrzeb? Po prostu chciałbym aby na podstawie nazwy strony przypisywał tytuł.
lDoran
  1. function setTitle($title) {
  2. echo '<titile>' . $title . '</title>';
  3. }


  1. <?php
  2. setTitle('tytul strony');
  3. ?>
  4. </head>
  5.  
  6. </body>
  7. </html>


To skąd będziesz pobierać tytuł zależy od Ciebie(np. sprawdzając nazwę pliku .php)
bismak
Jeśli masz strony na include to możesz włożyć instrukcje switch tam gdzie będzie tytuł.
radziowie
Chcę stworzyć stronę tytuly.php. Czyli:
  1. <?php


Chcę stworzyć stronę tytuly.php. Czyli:
  1. <?php
  2. $tytul_strony = array (
  3. srodek => 'glowna',
  4. instrukcje => 'instrukcje111'
  5. );
  6. ?>

Czyli tak jak napisałem chciałbym, aby na podstawie załadowanej strony czytał nazwe. Przypuśćmy, że jesteśmy na instrukcje.php to nazwa=instrukcje, czyli sprawdza w tablicy i podaje podany mu tytuł czyli instrukcje 111
lDoran
Nie rozumiem czego oczekujesz, gotowego skryptu, czy pomocy w jego wykonaniu. Jeżeli pomocy to daj kod, który napisałeś, natomiast przy gotowym skrypcie pomyliłeś działy.
radziowie
to tak tworze tablice i podaje ją do tytuly.php jak już opisałem wcześniej.
Teraz przechodzę do strony meta.php (jednej z części głównej, znajduje się na każdej stronie). I teraz piszę:
  1. <?php
  2. $go=$GET['go'];
  3. if ($go=='' || $go='index')
  4. {
  5. $go='Strona główna';
  6. }
  7. else
  8. {
  9. include('./folder/tytuly.php');
  10. }
  11. /// potem <html><meta ....
  12. <title><? echo $tytul[$go] ?>
  13. ...


Na razie tyyle, bo to może zadziałać dla strony głównej a nie wiem do końca jak się odwołać odpowiednio do tablicy w tytuly.php.
ADeM
Odwołuj się tak jak teraz, tylko zmień strukturę tablicy:
  1. $tytul = array(
  2. 'strona' => 'tytul strony',
  3. 'strona druga' => 'drugi tytul'
  4. );
radziowie
To jak jestem na stronie strona druga.php to jak to on będzie pobierał tą wartość?
bo chyba nie muszę dal każdego robić
  1. if ($go='druga strona')
  2. {
  3. $go='Strona druga';
  4. }
  5. ...

Czy jednak tak muszę?
lDoran
Funkcja sprawdzająca tytuł:
  1. function getTitle($sIndex) {
  2. $aTitles = array('tytul1', 'tytul2', ...);
  3. $iRecords = count($aTitles);
  4. for($i = 0; $i < $iRecords; $i++) {
  5. if($aTitles[$i] == $sIndex;) {
  6. return $aTitles[$i];
  7. } else {
  8. return 'Domyślny tytuł';
  9. }
  10. }
  11. }


  1. $title = getTitle($_GET['title']);
  2.  
  3. echo '<title>' . $title . '</title>';
ADeM
Po pierwsze: masz błąd. "if ($go=='' || $go='index')" zamień na "if ($go=='' || $go=='index')"
Tak samo używaj gdzie indziej. Operator porównania to "==", a nie "=".

W tablicy zamiast strona/strona druga wpisz po prostu wartości $go.

EDIT:
~IDoran: bez sensu ta funkcja. Zwraca to samo co przyjmuje, chyba, że nie znajdzie tego w tablicy.
radziowie
1. Co do adem się zgadzam co do "==" i "=". Moja wina.
2. [quote]W tablicy zamiast strona/strona druga wpisz po prostu wartości $go.[/guote}
Nie rozumiem, gdzie to chcesz wstawić.
3. Idoran czy możesz wytłumaczyć jak działa ta funkcja? Jak ona może być zastosowana w moim przypadku?
ADeM
Zrób tablicę, której indeksy będą wszystkimi wartościami zmiennej $go jakie mogą wystąpić, a wartościami niech będą tytuły.
radziowie
NIe rozumiem tego:
[guote]Zrób tablicę, której indeksy będą wszystkimi wartościami zmiennej $go[/guote}
to jak mają wygladać
$go['glowna] => 'strona glowna',,
$go['strona druga'] => ' blabla' ...
?
ADeM
Ech -.-'
Dokładnie tak jak napisałem wcześniej:
  1. $tytuły = array(
  2. 'WARTOSC ZMIENNEJ $GO DLA STRONY PIERWSZEJ' => 'tytul pierwszej strony',
  3. 'WARTOSC ZMIENNEJ $GO DLA DRUGIEJ STRONY' => 'tytul drugiej strony',
  4. );
  5.  
  6. echo $tytuly[ $go ];

Nie wiem jakie $go może mieć wartości, bo tego nie napisałeś.
radziowie
No to już napisałem wcześniej
  1.  
  2. $tytul = array(
  3.  
  4. 'strona' => 'tytul strony',
  5.  
  6. 'strona_druga' => 'drugi tytul'
  7.  
  8. );


Czyli zmienna może być strona (od nazw strony głównej czyli strona.php lub strona_druga (od nazwy podstrony strona_druga.php)
ADeM
No to z czym masz jeszcze jakiś problem?
radziowie
Z tym żeby wyjąć zmianną, czyli nazwe pliku. Przyjmijmy, że jesteśmy na strona_druga.php to on wyciąga "strona_druga", sprawdza tablicę i jeśli tam jest to wyciąga z niej tytuł, czyli wartość $go.
ADeM
Poddaje się...
Co to jest w takim razie $go, gdzie to definiujesz, i jaką ma wartość.
Zobacz też co zawiera tablica $_SERVER.
radziowie
Może, źle się wyraziłem. Zacznę od początku. Mam kod:

  1. <?php
  2. $go=$GET['go'];
  3. if ($go=='' || $go='index')
  4. {
  5. $go='Strona główna';
  6. }
  7. else
  8. {
  9. include('./folder/tytuly.php');
  10. }
  11. /// potem <html><meta ....
  12. <title><? echo $tytul[$go] ?>

Może mam ten kod trochę pokręcony. Mamy zmienną $go która pobiera (przynajmniej powinna pobierać) nazwy strony na której jesteśmy. W przypadku gdy jesteśmy na stronie głównej index.php to wyświetla Strona główna jak widać w powyższym kodzie. Problem w tym, że nie wiem dokładnie jak pobrać zmienną $go z nazwy pliku a następnie porównać ją z naszą tablicą. Mam nadzieję, ze teraz trochę zrozumialej napisałem.
lDoran
Co Ty przekazujesz w zmiennej $go?
Porter3
Chodzi Ci chyba o coś takiego :

tytuly.php
Kod
<?php
  $tytul = array (
    glowna => 'Strona Główna',
    muzyka => 'Podstrona o muzyce',
    download => 'Pobieralnia plików',
  );
?>



potem w index.php (W menu musisz posiadać coś takiego: <a href="index.php?go=glowna lub muzyka lub download> i includowac odp. strony-glowna.php, muzyka.php itd.)

Kod
<?php
$go = $_GET['go'];
include("./include/tytuly.php");
...
<head>
  <title><? echo $tytul[$go] ?></title>  // jeśli będzie np. $tytul[glowna], to tytuł będzie 'Strona Główna', bo pobiera z wcześniej zrobionej tablicy tytułów.
?>


Jeśli się mylę, proszę poprawić.
To jest tylko schemat postępowania smile.gif
radziowie
Tzn. jeśli chodzi o ten adres index.php?go=glowna to wim, że będzie pobierać wartości z tablicy
A ja mam pytanie czy da się to tak zrobić, aby wyciągał adres z www.jakasdomena.pl/index.php (tytuł=Strona główna) lub www.jakasdomena.pl/strona.php (tytuł=podstrona)?
ADeM
Da się. Zainteresuj się tym co zawiera tablica $_SERVER.
radziowie
To znalazłem coś na tema t na stronie:
Kod
http://funkcje.net/view/3/1786/

PHP_SELF - Plik w którym aktualnie wykonywany jest skrypt
Ale teraz się zastanawiam jak z tego zabrać tylko nazwe pliku, czyli dla www.jakasstrona.pl/index.php wyciągnął "index"
ADeM
$_SERVER[ 'SCRIPT_NAME' ]
radziowie
tylko, że akurat script_name podaje nazwa_katalogu/glowna.php jeśli wejdę na glowna.php. A jak wyciągnąć tylko "glowna"? Podobnie działa również tablica php_self
Ja używam web_serva jak serw i w moim przypadku podaje /~strona/glowna.php
ADeM
Chociażby explode(), str_replace()...
nekomata
a nie mozesz czegos takiego zrobic?
  1. if(isset($_REQUEST['strona])){
  2. switch($_REQUEST['strona'])
  3. {
  4. case 'podstrona2':
  5. $title = "podstrona2";
  6. include('header.html'); // tu bys mial mete i $title
  7. include('podstrona2.html');
  8. break;
  9. case "podstrona3":
  10. $title = "podstrona3";
  11. include('header.html'); // tu bys mial mete i $title
  12. include('podstrona3.html');
  13. break;
  14. case "podstrona4":
  15. $title = "podstrona4";
  16. include('header.html'); // tu bys mial mete i $title
  17. include('podstrona4.html');
  18. break;
  19. }
  20. }
  21. else{
  22. $title = "Strona Glowna";
  23. include('header.html'); // tu bys mial mete i $title
  24. include('glowna.html');
  25. }
  26. include('stopka.html');// tym sposobem stopka jest do każdej podstrony

to zapiszesz jako index.php i resztę stron w osobno dajesz osobno i includujesz.
radziowie
Stworzyłem taki kod:
  1. // string do rozdzielenia
  2. $title=$_SERVER['PHP_SELF'];
  3. echo ''.$title.'<br /><br />';
  4. // wykorzystanie funkcji explode, wg przecinka
  5. $title_ciag = explode("/", $title);
  6. $tytul=explode(".", $title_ciag[2]);
  7. echo $tytul[0];

Problem w tym, że on wyłania tylko z katalogu głównego a z podkatalogu już jest źle. Podejrzewam także, że gdy wrzucę to na serwer to też może być problem.

Zastanawiam się jeszcze nad zastosowaniem preg_match. I tak stworzyłem kod. Ale wydaje mi się, ze są krótsze i łatwiejsze sposoby.
  1. // string do rozdzielenia
  2. $title=$_SERVER['PHP_SELF'];
  3. echo ''.$title.'<br /><br />';
  4.  
  5. // konstrukcja wyrażenia regularnego
  6.  
  7. $wyrazenie = '/index//glowna/';
  8.  
  9. // preg_match() sprawdza występowanie wyrażenia w ciągu
  10. if(preg_match($wyrazenie, $title))
  11. {
  12. $tytul='Strona główna';
  13. }
  14. else
  15. {
  16. $tytul='Inna strona';
  17. }
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.