Metatags in PHP-pagina's

Status
Niet open voor verdere reacties.

Bas web

Gebruiker
Lid geworden
5 mrt 2008
Berichten
86
Goedenavond,

ik wil graag voor iedere aparte php-pagina eigen metatags in kunnen vullen (logisch, want zo "hoort" het eigenlijk ook). Daarvoor kwam ik dit scriptje tegen:
http://www.cre8asiteforums.com/forums/index.php?showtopic=4558

echter werkt het niet bij mij, als ik de broncode ga bekijken van de testpagina staat er dus niets
HTML:
<head>

	<meta http-equiv="Content-Type" content="text/html; charset=utf-8"></meta>

	<title></title>

	<meta name="description" content=""></meta>

	<meta name="keywords" content=""></meta>

	<link href="stylesheet.css" rel="stylesheet" type="text/css" />

</head>

Ik heb onderstaande bovenaan in de home.php:
PHP:
<?php

$tpTitle="Dit is de paginatitel";

$pgDesc="Omschrijving";

$pgKeywords="titel, omschrijving";

?>

En dit is het eerste gedeelte van mijn index.php:
PHP:
<?php 
	if($_GET['page'] == home){
		$include = "home.php";
	}elseif($_GET['page'] == media){
		$include = "media.php";
	}elseif($_GET['page'] == contact){
		$include = "contact.php";
	}else{
		$include = "home.php";
	}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
	<meta http-equiv="Content-Type" content="text/html; charset=utf-8"></meta>
	<title><?php echo $tpTitle ?></title>
	<meta name="description" content="<?php echo $pgDesc ?>"></meta>
	<meta name="keywords" content="<?php echo $pgKeywords ?>"></meta>
	<link href="stylesheet.css" rel="stylesheet" type="text/css" />
</head>
<body>

Iemand enig idee wat er mis gaat?

Alvast bedankt voor de hulp!
 
In index.php geef je de variabele $include wel als waarde een pagina, deze pagina wordt vervolgens niet ge-include. Hierdoor bestaan de variabelen $tpTitle, $pgDesc en $pgKeywords (die in home.php gedefinieerd worden) niet (en worden dus als lege waardes getoond).
 
Bedankt voor je snelle antwoord, maar misschien was het van mij niet handig om alleen het eerste gedeelte van de index er in te zetten, ik had de body er niet bij gezet:
PHP:
<?php 
	if($_GET['page'] == home){
		$include = "home.php";
	}elseif($_GET['page'] == biografie){
		$include = "biografie.php";
	}elseif($_GET['page'] == fotos){
		$include = "fotos.php";
	}elseif($_GET['page'] == agenda){
		$include = "agenda.php";
	}elseif($_GET['page'] == media){
		$include = "media.php";
	}elseif($_GET['page'] == contact){
		$include = "contact.php";
	}elseif($_GET['page'] == gastenboek){
		$include = "gastenboek.php";
	}else{
		$include = "home.php";
	}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
	<meta http-equiv="Content-Type" content="text/html; charset=utf-8"></meta>
	<title><?php echo $tpTitle ?></title>
	<meta name="description" content="<?php echo $pgDesc ?>"></meta>
	<meta name="keywords" content="<?php echo $pgKeywords ?>"></meta>
	<link href="stylesheet.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="container">
	<div id="header">
		<?PHP include("header.php");?>
    </div>
	<div id="mainContent">
		<?php include(''.$include.'');?>
    </div>
</div>
</body>
</html>

de include wordt dus wel geincluded ;)
 
Laatst bewerkt:
Zet eens bovenaan je code:

PHP:
<?php

  ini_set ( 'display_errors', 1 );
  error_reporting ( E_ALL );

?>

De volgende code zou namelijk een error moeten opwerpen:

PHP:
<?php 
    if($_GET['page'] == home){
        $include = "home.php";
    }elseif($_GET['page'] == biografie){
        $include = "biografie.php";
    }elseif($_GET['page'] == fotos){
        $include = "fotos.php";
    }elseif($_GET['page'] == agenda){
        $include = "agenda.php";
    }elseif($_GET['page'] == media){
        $include = "media.php";
    }elseif($_GET['page'] == contact){
        $include = "contact.php";
    }elseif($_GET['page'] == gastenboek){
        $include = "gastenboek.php";
    }else{
        $include = "home.php";
    }
?>

Alles na de == zou namelijk tussen quotes moeten ( ' / " ). Probeer dat eerst maar eens.
 
D'r zitten inderdaad alleen maar errors in :o (nooit geweten, want dit gebruik ik al een hele tijd zonder verdere problemen...)
Ik kreeg eerst deze melding:
Notice: Use of undefined constant home - assumed 'home' in /index.php on line 9

Daarna heb ik alles tussen de " gezet en krijg ik de volgende melding (domein er ff uitgeknipt):
Notice: Undefined index: page in /index.php on line 9

Notice: Undefined index: page in /index.php on line 11

Notice: Undefined index: page in /index.php on line 13

Notice: Undefined index: page in /index.php on line 15

Notice: Undefined index: page in /index.php on line 17

Notice: Undefined index: page in /index.php on line 19

Notice: Undefined index: page in /index.php on line 21

Hierbij de hele index:
PHP:
<?php
 
  ini_set ( 'display_errors', 1 );
  error_reporting ( E_ALL );
 
?>

<?php 
	if($_GET['page'] == "home"){
		$include = "home.php";
	}elseif($_GET['page'] == "biografie"){
		$include = "biografie.php";
	}elseif($_GET['page'] == "fotos"){
		$include = "fotos.php";
	}elseif($_GET['page'] == "agenda"){
		$include = "agenda.php";
	}elseif($_GET['page'] == "media"){
		$include = "media.php";
	}elseif($_GET['page'] == "contact"){
		$include = "contact.php";
	}elseif($_GET['page'] == "gastenboek"){
		$include = "gastenboek.php";
	}else{
		$include = "home.php";
	}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
	<meta http-equiv="Content-Type" content="text/html; charset=utf-8"></meta>
	<title><?php echo $tpTitle ?></title>
	<meta name="description" content="<?php echo $pgDesc ?>"></meta>
	<meta name="keywords" content="<?php echo $pgKeywords ?>"></meta>
	<link href="stylesheet.css" rel="stylesheet" type="text/css" />
    <!-- start lightbox -->
    	<script type="text/javascript" src="js/prototype.js"></script>
		<script type="text/javascript" src="js/scriptaculous.js?load=effects,builder"></script>
		<script type="text/javascript" src="js/lightbox.js"></script>
	<!-- end lightbox -->
</head>
<body>
<div id="container">
	<div id="header">
		<?PHP include("header.php");?>
    </div>
	<div id="mainContent">
		<?php include(''.$include.'');?>
    </div>
</div>
<div id="footer">
	<p>&copy;</p>
</div>
</body>
</html>

Begin er steeds minder van te snappen ;)
 
Wat nu het probleem is, is dat $_GET[ 'page' ] helemaal niet bestaat...

PHP:
<?php
 
  ini_set ( 'display_errors', 1 );
  error_reporting ( E_ALL );

  if ( array_key_exists ( 'page', $_GET ) ) {

    if ( $_GET[ 'page' ] == "home" ){

        $include = "home.php";

    } elseif ( $_GET[ 'page' ] == "biografie" ) {

        $include = "biografie.php";

    } elseif ( $_GET[ 'page' ] == "fotos" ) {

        $include = "fotos.php";

    } elseif ( $_GET[ 'page' ] == "agenda" ) {

        $include = "agenda.php";

    } elseif ( $_GET[ 'page' ] == "media" ) {

        $include = "media.php";

    } elseif ( $_GET[ 'page' ] == "contact" ) {

        $include = "contact.php";

    } elseif ( $_GET[ 'page' ] == "gastenboek" ) {

        $include = "gastenboek.php";

    } else {

        $include = "home.php";

    }

  } else {

    $include = "home.php";

  }

?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"></meta>
    <title><?php echo $tpTitle ?></title>
    <meta name="description" content="<?php echo $pgDesc ?>"></meta>
    <meta name="keywords" content="<?php echo $pgKeywords ?>"></meta>
    <link href="stylesheet.css" rel="stylesheet" type="text/css" />
    <!-- start lightbox -->
        <script type="text/javascript" src="js/prototype.js"></script>
        <script type="text/javascript" src="js/scriptaculous.js?load=effects,builder"></script>
        <script type="text/javascript" src="js/lightbox.js"></script>
    <!-- end lightbox -->
</head>
<body>
<div id="container">
    <div id="header">
        <?PHP include("header.php");?>
    </div>
    <div id="mainContent">
        <?php include(''.$include.'');?>
    </div>
</div>
<div id="footer">
    <p>&copy;</p>
</div>
</body>
</html>

Overigens kan het bovenste stuk veel korter:

PHP:
<?php
 
  ini_set ( 'display_errors', 1 );
  error_reporting ( E_ALL );

  $includes = array ( 'home', 'biografie', 'fotos', 'agenda', 'media', 'contact', 'gastenboek' );

  if ( array_key_exists ( 'page', $_GET ) && in_array ( trim ( strtolower ( $_GET[ 'page' ] ) ), $includes ) ) {

    $include = trim ( strtolower ( $_GET[ 'page' ] ) ) . '.php';

  } else {

    $include = "home.php";

  }

?>
 
erik, dank je voor je steeds weer snelle reactie! Super!

Ik krijg nu die error niet meer en die code is inderdaad een stuk korter! :D.
Wat bedoel je met dat $_GET[ 'page' ] niet bestaat?

Bovenaan in het tabblad van Google Chrome waar normaal je titel staat, staat nu "undefined variable: tp title in/index.php on line 22 "

Vind hij de koppeling met het geinclude php-file niet?
 
Notice: Undefined index: page in /index.php on line 9

Betekent dat je een array-index opvraagt die niet bestaat. Vandaar dat we nu eerst checken of die wel bestaat.

De foutmelding die je aangeeft, die in het tabblad in chrome staat, komt doordat de variabele tptitle niet bestaat. Post eens de inhoud van de betreffende file die geinclude wordt.

Ook zie ik nu pas dat je

PHP:
include ( '' . $include . '' );

doet. Dat mag gewoon:

PHP:
include ( $include );

zijn.
 
Tnx voor de tip, heb ik ook meteen aangepast ;)

Dit is de inhoud van de (verder nog lege) contactpagina die dezelfde error aangeeft:
PHP:
<?php
	$tpTitle="Contact";
	$pgHeading="nog invullen";
	$pgDesc="ook nog invullen";
	$pgKeywords="contact, gegevens";
?>
<link href="stylesheet.css" rel="stylesheet" type="text/css" />

<h1 align="center">Contact</h1>

Wederom bedankt voor je hulp! Ik zal vanmiddag niet meer antwoorden, m'n dochtertje is net wakker dus tijd om de pc uit te zetten :D

Ik ga er vanavond weer mee verder, maar in ieder geval hartelijk dank voor je hulp!
 
Oeps, het probleem is me al duidelijk.

Je wilt de variabelen al gebruiken voordat je de pagina include. Kijk maar in je code, eerst gebruik je in de head de variabelen, en vervolgens in de body include je de pagina eens.

Wat een optie is, is om ook de inhoud van de pagina in een variabele te zetten, de pagina al direct als duidelijk is om welke het te gaat en dan middels PHP ook de content in de body te echoën.
 
:rolleyes:
daar zit inderdaad wel een logica in ja...

Ik had het scriptje hier vandaan. Daar schijnt het dus wel te werken of zou er een andere opbouw gebruikt worden?

Zou je me verder op weg kunnen/willen helpen betreft jouw idee? Ik kan het namelijk niet helemaal volgen :(
Of wordt er normaal gesproken op een andere manier gebruik gemaakt van metatags icm het includen van pagina's in de index? Ik heb daar verder namelijk niets over kunnen vinden.
 
Hoeft niet per sé vandaag hoor, 't is zondag en dan moet je je niet te druk maken of te veel inspannen :D :cool:

Ik waardeer het in ieder geval heel erg dat je me verder op weg wil helpen!! (jammer dat jullie de optie "reputatiepunten" niet aan hebben staan, anders had je die zeker van me gehad :thumb:)
 
Sorry, eerlijk gezegd was ik het een beetje vergeten.

Het idee is zo.

home.php
PHP:
<?php
  $tpTitle="Contact";
  $pgHeading="nog invullen";
  $pgDesc="ook nog invullen";
  $pgKeywords="contact, gegevens"
  $pgContent = <<<EOT

    <link href="stylesheet.css" rel="stylesheet" type="text/css" />
 
    <h1 align="center">Contact</h1>

EOT;

En dan je paginafile:

PHP:
<?php
 
  ini_set ( 'display_errors', 1 );
  error_reporting ( E_ALL );
 
  if ( array_key_exists ( 'page', $_GET ) ) {
 
    if ( $_GET[ 'page' ] == "home" ){
 
        $include = "home.php";
 
    } elseif ( $_GET[ 'page' ] == "biografie" ) {
 
        $include = "biografie.php";
 
    } elseif ( $_GET[ 'page' ] == "fotos" ) {
 
        $include = "fotos.php";
 
    } elseif ( $_GET[ 'page' ] == "agenda" ) {
 
        $include = "agenda.php";
 
    } elseif ( $_GET[ 'page' ] == "media" ) {
 
        $include = "media.php";
 
    } elseif ( $_GET[ 'page' ] == "contact" ) {
 
        $include = "contact.php";
 
    } elseif ( $_GET[ 'page' ] == "gastenboek" ) {
 
        $include = "gastenboek.php";
 
    } else {
 
        $include = "home.php";
 
    }
 
  } else {
 
    $include = "home.php";
 
  }

  include ( $include ); 

?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"></meta>
    <title><?php echo $tpTitle ?></title>
    <meta name="description" content="<?php echo $pgDesc ?>"></meta>
    <meta name="keywords" content="<?php echo $pgKeywords ?>"></meta>
    <link href="stylesheet.css" rel="stylesheet" type="text/css" />
    <!-- start lightbox -->
        <script type="text/javascript" src="js/prototype.js"></script>
        <script type="text/javascript" src="js/scriptaculous.js?load=effects,builder"></script>
        <script type="text/javascript" src="js/lightbox.js"></script>
    <!-- end lightbox -->
</head>
<body>
<div id="container">
    <div id="header">
        <?PHP include("header.php");?>
    </div>
    <div id="mainContent">
        <?php echo $pgContent; ?>
    </div>
</div>
<div id="footer">
    <p>&copy;</p>
</div>
</body>
</html>
 
Hoi Erik,

dank je wel voor je antwoord!Hier zat ik ook aan te denken maar mijn kennis is te laag om dit zelf te kunnen schrijven (begrijp wel wat er staat, dat scheelt dan weer :p)
Maar je maakt nu toch weer gebruik van de if/elseif ipv je verkorte versie. Is dat omdat het anders niet werkt?

Ook zie ik staan EOT, daartussen komt gewoon de inhoud van de pagina?
 
Die if/else constructie is omdat ik niet goed opgelet heb bij het kopieren uit je eerdere post, daar kun je gewoon de korte versie voor gebruiken.

Tussen <<<EOT en EOT; kun je inderdaad de inhoud van je pagina kwijt. Let wel dat op de laatste regel (EOT;) geen leading-spaces en dergelijke mogen voorkomen. EOT; moet het eerste op die regel zijn.
 
Helaas, werkt niet :(

Notice: Undefined variable: pgContent in /..../index.php on line 70

Ik dacht te zien dat er een paar ;-tjes te veel en te weinig in stonden en dat ?> ontbrak aan het einde van de home.php maar dat mocht allemaal helaas niet werken :(

Heb jij 'm getest, of doe ik iets fout?
 
Euhm, kun je eens de volledige code posten zoals je die nu hebt? Zowel van je index.php en home.php
 
index.php
PHP:
<?php
 
  ini_set ( 'display_errors', 1 );
  error_reporting ( E_ALL );
 
  $includes = array ( 'home', 'biografie', 'fotos', 'agenda', 'media', 'contact', 'verzenden', 'gastenboek' );
  if ( array_key_exists ( 'page', $_GET ) && in_array ( trim ( strtolower ( $_GET[ 'page' ] ) ), $includes ) ) {
    $include = trim ( strtolower ( $_GET[ 'page' ] ) ) . '.php';
  } else {
    $include = "home.php";
  }
?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
	<meta http-equiv="Content-Type" content="text/html; charset=utf-8"></meta>
   <title><?php echo $tpTitle ?></title>
    <meta name="description" content="<?php echo $pgDesc ?>"></meta>
    <meta name="keywords" content="<?php echo $pgKeywords ?>"></meta>
    <link href="stylesheet.css" rel="stylesheet" type="text/css" />
    <link rel="stylesheet" href="css/lightbox.css" type="text/css" media="screen" />
    <!-- start lightbox -->
		<script type="text/javascript" src="js/prototype.js"></script>
		<script type="text/javascript" src="js/scriptaculous.js?load=effects,builder"></script>
		<script type="text/javascript" src="js/lightbox.js"></script>
	<!-- end lightbox -->
<script type="text/javascript">
		<!--
		function MM_swapImgRestore() { //v3.0
		  var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
		}
		function MM_preloadImages() { //v3.0
		  var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
 		   var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
 		   if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
		}

		function MM_findObj(n, d) { //v4.01
		  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
		    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
		  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
		  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
		  if(!x && d.getElementById) x=d.getElementById(n); return x;
		}

		function MM_swapImage() { //v3.0
		  var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)
		   if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
		}
		//-->
</script>
</head>
<body onLoad="MM_preloadImages('afbeeldingen/site/home_over.gif','afbeeldingen/site/biografie_over.gif','afbeeldingen/site/fotos_over','afbeeldingen/site/agenda_over.gif','afbeeldingen/site/media_over.gif','afbeeldingen/site/contact_over.gif','afbeeldingen/site/gastenboek_over.gif')">
<div id="container">
	<div id="header">
		<?PHP include("header.php");?>
    </div>
	<div id="mainContent">
        <?php echo $pgContent; ?>
    </div>
</div>
<div id="footer">
	<p>&copy;</p>
</div>
</body>
</html>

home.php
PHP:
<?php
  $tpTitle="Contact";
  $pgHeading="nog invullen";
  $pgDesc="ook nog invullen";
  $pgKeywords="contact, gegevens"
  $pgContent = <<<EOT
 
    <link href="stylesheet.css" rel="stylesheet" type="text/css" />
 
    <h1 align="center">Contact</h1>
 
EOT;

Geeft:
Notice: Undefined variable: pgContent in /..../index.php on line 58

Maar ook
Notice: Undefined variable: tpTitle in /..../index.php on line 16 (geeft ie boven in het tabblad van de browser)
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan