WN

WN (https://www.wn.se/forum/index.php)
-   Serversidans teknologier (https://www.wn.se/forum/forumdisplay.php?f=4)
-   -   Att ändra title via PHP (https://www.wn.se/forum/showthread.php?t=19808)

boena 2007-03-07 09:34

Sitter här och tänker lite hur man smidigast ska ändra title-taggen dynamiskt. Det som ska hända är att den ska gå in i databasen och hämta en inskriven title, och om det inte finns en title så tar den en standard typ "Min Sida".

Som jag har det nu så har jag lagt header-infon högst upp i index.php, sen lite längre ner så lägger jag in alla GET kommandon, saken som jag inte kan få att fungera är ju att title-taggen redan är inläst vid det tillfället den kommer till en av GET-attributen och därför så kan ju inte någon info hämtas därifrån. Visst, man kan ju lägga in headern i varje GET men tycker att det borde finnas något bättre sätt... Typ en this som används i javascript men kanske inte finns någon liknande i PHP?

Hoppas att någon kanske förstår vad det är jag menar för det är knappt jag gör själv efter att ha läst inlägget :P

Lite svårt att förklara ;)

DeSoto 2007-03-07 09:45

Använd output-buffern. Kör ob_start(), sen inkluderar du din template-fil, dvs den som hamnar i mitten av index.php. Hämta innehållet i den filen med ob_get_contents(), och skriv ut i mitten. Typ:

Kod:

mintemplate.php
-------------------
<?php
$title = 'Sidans titel';
?>
<div>Lite html</div>
-------------------

index.php
<?php
ob_start();
include( 'mintemplate.php' );
$contents = ob_get_contents();
?>
<html>
<head>
        <title><?php echo $title; ?></title>
</head>
<body>
<?php echo $contents; ?>
</body>
</html>
-------------------


boena 2007-03-07 20:51

Härligt det där verkar smidigt, får försöka lite ikväll med det :)

Tackar!

eliasson 2007-03-07 21:50

(Kortfattat) Ett annat sätt är att t ex låta index.php hantera alla dina requests. När den inkluderar din fil så kör du kanske högst upp template('default', 'sidans titel'); och så kör du en funktion som då visar templaten "default" och som då kanske sätter andra argumentet 'sidans titel' som en constant och sedan läser du in den i templatefilen för att då skriva ut <title>sidans titel</title>.
Min förklaring kan låta lite luddig men jag har byggt upp det på liknande sätt och det fungerar bra.

boena 2007-03-07 22:17

Hmmm förstår inte exakt hur du menar. Du tror inte du skulle kunna visa en liten kodsnutt hur du gör?

eliasson 2007-03-07 23:15

Ja, jag fixar det imorn på jobbet, klockan är 9:56 och jag är astrött :(

Seattlegrunge 2007-03-07 23:54

Citat:

Originally posted by eliasson@Mar 7 2007, 21:50
(Kortfattat) Ett annat sätt är att t ex låta index.php hantera alla dina requests. När den inkluderar din fil så kör du kanske högst upp template(default, sidans titel); och så kör du en funktion som då visar templaten default och som då kanske sätter andra argumentet sidans titel som en constant och sedan läser du in den i templatefilen för att då skriva ut titlesidans titel/title.
Min förklaring kan låta lite luddig men jag har byggt upp det på liknande sätt och det fungerar bra.

Det är ingen speciellt snygg lösning, blir fruktansvärt intetsägande url:er till undersidorna för besökarna. Dessutom inte alls bra seo-mässigt. Jag vet, många bygger sina sajter med att bara ha index-filen som tolkar allt innehåll, men jag förkastar det, inte alls vackert eller optimalt.

Visst, man kan göra url:erna snyggare med t ex .htaccess, men boena kanske inte har den möjligheten, då bör han verkligen välja bort det.

EDIT: Eftersom du ändå ska hämta title-texten från databasen, varför inte bara göra en ren och skär query som hämtar rätt titel baserat på vilken script-fil som visas (t ex index.php eller produkter.php). Det är lätt att plocka ut script-filen med t ex php (pathinfo och server-variabler mm), sen i din databas har du en kolumn som heter t ex filename och som innehåller t ex index och produkter och då kan du lätt plocka ut rätt title baserat på detta.

Sen kör du bara if-satser t ex:
if (urlpage = 'index') {
$title = 'Välkommen till oss';
}

och title-taggen ser ut som följer:

<title><?php echo $title; ?></title>

fors 2007-03-08 12:12

Jag brukar använda en funktion som skriver ut sidhuvudet och en som skriver ut sidfoten. Själva titeln på varje sida sätter jag genom en konstant.

Exempel:
Kod:

require('include/include.php');

define('PAGE_TITLE', 'Nyheter');
pageHead();
?>
<h1>Nyheter</h1>
<p>lala</p>
<?php pageFoot(); ?>

där pageHead() och pageFoot() i princip ser ut som:
Kod:

function pageHead()
{
  require('page_head.php');
}
function pageFoot()
{
  require('page_foot.php');
}


Björn 2007-03-08 12:25

Citat:

Originally posted by boena@Mar 7 2007, 10:34
Sitter här och tänker lite hur man smidigast ska ändra title-taggen dynamiskt. Det som ska hända är att den ska gå in i databasen och hämta en inskriven title, och om det inte finns en title så tar den en standard typ "Min Sida".

Som jag har det nu så har jag lagt header-infon högst upp i index.php, sen lite längre ner så lägger jag in alla GET kommandon, saken som jag inte kan få att fungera är ju att title-taggen redan är inläst vid det tillfället den kommer till en av GET-attributen och därför så kan ju inte någon info hämtas därifrån. Visst, man kan ju lägga in headern i varje GET men tycker att det borde finnas något bättre sätt... Typ en this som används i javascript men kanske inte finns någon liknande i PHP?

Hoppas att någon kanske förstår vad det är jag menar för det är knappt jag gör själv efter att ha läst inlägget :P

Lite svårt att förklara ;)

Antar att jag inte riktigt förstår hur du menar.. men för mig låter det som ett icke-problem : ) det är väl bara att sätta variablerna innan du börjar skrivar ut html koden. Typ plocka ut variblerna ut $_get eller databasen först av allt, sen sätta det i sidan med tex <title><?=$title?></title> i head.

Glöm inte att kolla get variablerna innan du använder dem!.

/b


Alla tider är GMT +2. Klockan är nu 20:09.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson