Volledige versie bekijken : Dynamische title tag



MabadosS
29 August 2010, 01:20
Hoi,

Op mijn website gebruik ik momenteel overal dezelfde title tag.
Niet erg optimaal voor zoekmachines.

Bestaat er een mogelijkheid om automatisch de tekst van de <h1></h1> uit de pagina in de title tag te krijgen?

Vb
<html>
<head>
<title>Paginatitel</title>
</head>
<body>
<h1>Paginatitel</h1>
<p>lalalalalala</p>
</body>
</html>

Alvast bedankt voor de tips.

carl
29 August 2010, 07:39
Javascript: getElementByTagName/ID/Class/Name ? En dan gewoon toewijzen (op page load wss). Ik ben wel niet zeker of zoekmachines wel JS uitvoeren eigenlijk :S dus dan is dit niet meer zo geschikt.

Of Misschien dat dit ook lukt dmv XSLT, maar dan moet je wel al die transformaties handmatig starten.

Tenzij ik je vraag verkeer begrijp natuurlijk ;)

Butterflyice
29 August 2010, 07:55
Je kan het ook met php doen en dan de variable toekennen.
De optie met javascript kan je ook gebruiken.

Martijnc
29 August 2010, 23:51
De title tag updaten met JavaScript heeft in dit geval helemaal geen zin, zoekmachine's voeren geen JavaScript uit dus voor Google etc. heb je nog altijd dezelfde titel.

De beste manier is zoals Butterflyice zegt; de title door PHP/ASP (iig server side) aan te passen.

kurt0015
30 August 2010, 02:40
Zoals Martijnc al opmerkte heeft javascript geen zin omdat zoekmachines deze niet uitvoeren. Waardoor dit geen effect zal hebben. Al zijn er simpele methodes in php die iedereen kan aanleren met een beetje uitleg dus moest je intresse hebben..

Wat meer informatie over je website en opbouw welke talen er gebruikt zijn en dergelijke lijkt me wel handig? Anders is het nogal moeilijk je echt verder te helpen.

Spoorzoeker
30 August 2010, 10:27
Volgens mij doe je dat het snelste met:
<?php
$a="Titel";
en dan
echo "<title>$a</title>
</head>
<body>
<h1>$a</h1>";

?>

Maar als je de h tag invult, waarom dan niet gelijk de titletag ?

MabadosS
1 September 2010, 23:21
Zoals Martijnc al opmerkte heeft javascript geen zin omdat zoekmachines deze niet uitvoeren. Waardoor dit geen effect zal hebben. Al zijn er simpele methodes in php die iedereen kan aanleren met een beetje uitleg dus moest je intresse hebben..

Wat meer informatie over je website en opbouw welke talen er gebruikt zijn en dergelijke lijkt me wel handig? Anders is het nogal moeilijk je echt verder te helpen.

De site is zo opgebouwd dat alles geladen wordt in de index.php
Even der illustratie:
Versimpelde versie van de index.php


<head>
<title>Statische Title tag</title>
</head>
<body>
<?php
$urlVar = $_GET['pagina'];
$urlVar = str_replace('.','',$urlVar);
$urlVar = str_replace('/','',$urlVar);
$_GET['pagina'] = $urlVar.'.php';

if (isset($_GET['pagina']))
{
$pagina = $_GET['pagina'];
if ($pagina == ".php")
{
$pagina = "home.php";
}
elseif (!file_exists($pagina))
{
$pagina .= ".php";
if (!file_exists($pagina))
{
$pagina = "fout.php";
}
}
}
else
{
$pagina = "home.php";
}
include ($pagina);
?></body>
</html>


Voorbeeld van een pagina.php:


<h1>Paginatitel</h1>
<p>tekst</p>


Zoals je ziet behoud ik zo telkens de title tag van de index.php en daarom dacht ik dat het misschien mogelijk was dmv wat simpele code om automatisch de <h1></h1> van de geladen pagina te nemen






Volgens mij doe je dat het snelste met:
<?php
$a="Titel";
en dan
echo "<title>$a</title>
</head>
<body>
<h1>$a</h1>";

?>

Maar als je de h tag invult, waarom dan niet gelijk de titletag ?

Alvast bedankt uw mogelijke code, maar als ik het goed ontrafel, vermoed ik dat het m'n probleem niet oplost (verbeter me als ik fout ben).
Als ik uw code goed begrijp defineer ik in '$a="Titel";' de naam van de titel, maar heb ik toch op alle pagina's nog dezelfde title tag.

Doordat ik eigenlijk 1 index heb, waar alle pagina's in geinclude worden kan ik dus geen aparte title tag defineren en dus leek het me het simpelste als automatisch de <h1> zou genomen worden.

Het lijkt niet zo eenvoudig blijkbaar ;)

kurt0015
1 September 2010, 23:54
Ey,

Inderdaad je zit hier met een klein design probleem kwa code. Ik zelf heb dit vaak voor gehad zeer vaak. Op die manier is het praktische onmogelijk om je titel mee te geven. Waarom? Simpel je zou de informatie van een titel moeten hebben maar deze ga je pas later kunnen defineren. Wat ik je aanraad is misschien eens mijn tutorial te bekijken genaamd Basis scheiding tussen html en php code (geen oop) (http://www.minatica.be/content/490-Basis-scheiding-tussen-html-en-php-code-%28geen-OOP%29). Hierin zie je namelijk zeer duidelijk dat we de html pas op het laatste doen zodat we zeer simpel de titels en dergelijke kunnen toewijzen.

Je kan makkelijk arrays doorspelen naar je html en in je html een foreach doen of dergelijke om zo toch een lijst op te bouwen. De code is niet zo moeilijk als hij lijkt en is volgens mij toch wel zeer functioneel. Het script doet bijna het zelfde wat jou script doet met enkele extra voorzieningen er boven op.

Overigens let er op in mijn tutorial de $_GET['lang'] werd niet gecontroleerd en zou je dus best wel eens controleren. Ook in jou script worden de $_GET waardes niet gecontroleerd. Best dat je dit wel doet zeker wanneer je ze op het scherm gaat toveren is een htmlspecialchars() over je $_GET waarde geen overbodige luxe.

MabadosS
2 September 2010, 20:32
Bedankt voor alle reacties!

Met de tips/hulp hier en de hulp op een ander forum is een oplossing uit de bus gekomen.

En voor de geïnteresseerden, dit is het geworden:
In de title tag wordt de bestandsnaam van het php document geïntegreerd.


<?php
$urlVar = $_GET['pagina'];
$urlVar = str_replace('.','',$urlVar);
$urlVar = str_replace('/','',$urlVar);
$_GET['pagina'] = $urlVar.'.php';

if (isset($_GET['pagina']))
{
$pagina = $_GET['pagina'];
if ($pagina == ".php")
{
$pagina = "home.php";
}
elseif (!file_exists($pagina))
{
$pagina .= ".php";
if (!file_exists($pagina))
{
$pagina = "fout.php";
}
}
}
else
{
$pagina = "home.php";
}
?>

<head><title>Sitenaam - <?= $urlVar ?></title></head>
<body>
<?php include ($pagina); ?>
</body>
</html>

Het is ondertussen toegepast op www.jma-allegro.be (http://www.jma-allegro.be) voor wie het werkend wil zien.

kurt0015
3 September 2010, 01:56
Ey,

Dat script lijkt me niet echt veilig. Hier enkele verbeteringen van mij met de nodige commentaar.


<?php

$urlVar = (isset($_GET['pagina'])) ? htmlspecialchars($_GET['pagina']) : 'home';
$urlVar = str_replace('.','',$urlVar);
$urlVar = str_replace('/','',$urlVar);

/*
Kijken uit welke karakters de url bestaat overigens moet hij
min uit 3 karakters bestaan en max uit 100.

We voeren hierboven de htmlspecialchars even goed uit
enkel om wat extra maatregelen te nemen normaal
is dit niet eens meer nodig met deze regular expression
*/
if(preg_match('/^[0-9a-zA-Z_\-]{3,100}$/', $urlVar))
{
$fileName = $urlVar.'.php';
$pagina = (file_exists($fileName)) ? $fileName : 'fout.php';
}
else
$pagina = 'fout.php';

?>

<head><title>Sitenaam - <?= $urlVar ?></title></head>
<body>
<?php include ($pagina); ?>
</body>
</html>
een if else kan je verkorten naar iets als

<?php
$pagina = (file_exists($fileName)) ? $fileName : 'fout.php';
?>

Wat dus het zelfde is als


<?php
if(file_exists($fileName))
$pagina = $fileName;
else
$pagina = 'fout.php';
?>

Hier binnenkort meer uitleg over in een tutorial van mij.

kurt0015
3 September 2010, 16:49
Ok, zie net nog een fout in mijn eigen code wat ook bij jou code is wat als je ?pagina=index doet. Inderdaad hij gaat zichzelf oproepen en er ontstaat een lus. Niet gezond dus even aanpassen..


<?php

$urlVar = (isset($_GET['pagina'])) ? htmlspecialchars($_GET['pagina']) : 'home';
$urlVar = str_replace('.','',$urlVar);
$urlVar = str_replace('/','',$urlVar);

/*
Kijken uit welke karakters de url bestaat overigens moet hij
min uit 3 karakters bestaan en max uit 100.

We voeren hierboven de htmlspecialchars even goed uit
enkel om wat extra maatregelen te nemen normaal
is dit niet eens meer nodig met deze regular expression
*/
if($urlVar != 'index' && preg_match('/^[0-9a-zA-Z_\-]{3,100}$/', $urlVar))
{
$fileName = $urlVar.'.php';
$pagina = (file_exists($fileName)) ? $fileName : 'fout.php';
}
else
$pagina = 'fout.php';

?>

<head><title>Sitenaam - <?= $urlVar ?></title></head>
<body>
<?php include ($pagina); ?>
</body>
</html>

ultddave
3 September 2010, 20:21
Gaat hij nu niet fout.php openen als je ?pagina=index opvraagt?

Ik denk dat je een tweede if test moet toevoegen om dat te vermijden. ;)

Mvg,
Dave

kurt0015
3 September 2010, 23:46
Klopt, niet geheel he want index.php is in zijn geval de oproep pagina. En wanneer je die opnieuw aanroept krijg je problemen. Dus laat je de gebruiker denken dat deze niet bestaat. Want dit is toch home?

Edit: Ik zelf zou zelfs home eruit filteren. Want anders krijg je teveel mogelijke urls. Dit is weer niet goed voor google he..