[php] Hvordan få egendefinert tittel på hver eneste side?

Mr Vest

Sjefen over alle sjefer!
Jeg er i en litt merkelig situasjon her som jeg ikke helt forstår. Du vet, oppe i <head> så er det jo greit og få inn disse <title>-greiene og slikt for at Google lettere skal forstå hva siden handler om. Jeg har en kode som kan minne om denne:

if($_GET['do']=="jeg-er-kul"){
$pagetitle='Jeg er kul';
echo'Jeg er så utrolig kul assa.';
}

else if($_GET['do']=="jeg-er-ikke-kul"){
$pagetitle='Jeg er ikke kul';
echo'Jeg er ikke kul allikevel';
}

else {
$pagetitle='Er jeg kul?';
echo'Er jeg kul? Ja eller nei?';
}

Denne koden ligger da f.eks i index.php. Hvorfor vil det ikke fungere når jeg i header.php velger og legge inn $pagetitle oppe i <title> ? Skal det etter rett fungere? Hva kan evt være årsak til at det ikke funker?
 
Er variablen definert før head før den benyttes?
PHP:
<head>
 <title><?php echo $Sidetittel;?></title>
</head>
<body>
<?php
 if(isset($_GET['foo']) == 'bar') {
  $SideTittel  = 'bar';
  $Content = 'foobar';
 }
 
echo $Content;
?>
</body>

Dette vil ikke fungere da variablen blir definert etter recall. Dette vil også generere Warning.

Det samme vil det være hvis html delen din ligger i index.php, der du i stedenfor $Content har en require() eller include(), da blir innholdet i header.php filen parset etter title tags, og den vil lese $SideTittel som udefinert.
 

RipZ

Medlem
Hvorfor ikke gi oss koden din?

Om du inkluderer header.php før koden over, vil ikke variabelen bli satt før etter at HTML-koden med tittel-taggen er skrevet ut.

Hvis du legger inn koden i følgende rekkefølge, vil det fungere (med mindre du har andre bugs som er umulig å finne uten at du gir oss koden din):

- Kode for å sette $pagetitle
- Include av header.php hvor $pagetitle blir skrevet ut

Merk; PHP behandler alle variabler som globale på tvers av inkluderte filer. Men har du lagt koder i funksjoner eller klasser, er variablene isolert. Hvis du f.eks i header.php har en funksjon som heter printHeader(); og du prøver å skrive ut $pagetitle, vil $pagetitle være tom med mindre du har satt den eksplisitt inne i funksjonen. Man kan nå globale variabler i en funksjon med å bruke "global $variablename;" før variabelen brukes.

Se forøvrig PHP: Variable scope - Manual
 

Mr Vest

Sjefen over alle sjefer!
Skjønner skjønner. Det er slik at jeg har en include() i index.php som henter header ja, og dermed kommer det altså ikke noe ja. Jeg får ikke noen warning riktignok, men bare en tom <title>.

Jeg legger egentlig ikke ut koden fordi det er grusomt mye mer kode enn en skulle tro. Det ville vært WF's største mareritt om jeg skulle lagt ut både header og index her altså. Index ser forsåvidt ut slik jeg har den i første innlegg, bare med ganske mye mer innhold, og med et par include()-greier for å hente en header, sidebars og en footer.

Jeg merker så absolutt nå at det kanskje har vært litt for mye php her i gården nå, og at spørsmålet i tråden ble litt tullete. Beklager det, og takk for meget gode svar. Ryktepoeng kommer snart. :)
 
Da er det løst :)
Jeg så lenge du skal ha et "template-script" selv, og ikke bruke andre ressurser som f.eks Smarty,vil jeg anbefale deg å lage 1 fil, f.eks design.php , der du kjører htmlen og php'n som er design relatert over i funksjoner. Slik som ble nevt over her.
Da kan du enkelt manipulere slik data, uten og måtte skrive koden mange ganger.
 

Sjefskoder

Sjefskoder
Her har du en mulig løsning på dette, påsan ;)

litt php-magi før head-taggen..
PHP:
<?php
define ('TITLE', 'HER ER SIDETITTELENS TEKST!');// 'HER ER SIDETITTELENS TEKST!' kan og fint byttes ut med en variabel ;) 
?>

Også litt mer php-magi i head-taggen

<head>
<title><?php if (defined ('TITLE')) {
print TITLE;
} else {
print 'Itte no tittel satt...';
}
?></title>

også......

Voilaaaa! du har en egendefinert tittel ;)

Håper du skjønte litt av dette og hvordan dette kan gjøres..

hilsen en trøtt og sliten sjefskoder...
 

Mr Vest

Sjefen over alle sjefer!
Hehe, ja, jeg er på en måte glad akkurat nå for at jeg omtrent ikke har innhold tilgjengelig for utloggede brukere på nettstedet det dreier seg om. For innloggede brukere er det ikke sånn kjempeprioritet og sette opp den taggen, så det får heller være et prosjekt for fremtiden og rote litt rundt med det.

Er rimelig sikker på at jeg skjønner hva du mener Sjefskoder. Takker for tipset. Akkurat rett før jeg leste det la jeg heller bare inn de nødvendige greiene i header for og vise de titlene jeg ville ha, så det blir nok ikke å bruke akkurat i kveld nei. Sov godt :)
 
Topp