[PHP] Titel in browser van pagina (indeling)

Status
Niet open voor verdere reacties.

rutje1

Gebruiker
Lid geworden
17 feb 2006
Berichten
377
Hallo,

Ik ben bezig met een website in PHP.

Het werkt alsvolgt.

Je hebt het bestand index.php wanneer deze wordt opgeroepen zie je standaard home.php in het midden geinclude.

Ga je naar index.php?page=informatie dan wordt in het midden informatie.php geinclude.

Nu zou ik graag willen dat ik bijv. bij de pagina informatie de titel in de browser krijg: Lees hier informatie. Maar de header is al gesloten voordat informatie.php geinclude is.

Wanneer ik het andersom doe, dus de header onderaan de pagina werkt het wel, MAAR dan staat de header onderaan en wordt de titel en CSS dus als een van de laatste dingen geladen.

Hoe kan ik nu toch gegevens in de titel zetten die pas in informatie.php gezet worden?

Kunnen jullie me helpen?
Mvg Rutje1

P.S. Ik weet de manier van je kan dat dat if $_GET page is informatie - title = lees hier informatie. Maar ik wil de gegevens perse uit het bestand zelf halen. Dit omdat ik een ingewikkelder geval heb. Graag een andere oplossing dan deze manier.
 
Waarom voeg je het niet toe aan de url dan?

index.php?page=informatie&titel=Informatie

Vervolgens zet je gewoon
PHP:
<title><?php echo $_GET['titel']; ?></title>
in het bestand waar je alle pagina's include.

Volgens mij is dat wat je bedoelt met de kleine letters nietwaar? Dat is de makkelijke manier.

Anders moet je de inhoud in variabelen zetten.
informatie.php
PHP:
$titel = 'Informatie';
$inhoud = ''; // Hier zet je dus alle inhoud van die pagina in;

Vervolgens doe je
index.php
PHP:
<?php
include($_GET['page'].'.php');
?>
<html>
<head>
 <title><?php echo $titel; ?></title>
</head>
<body>
<div id="menu">

</div>
<div id="content">
<?php echo $inhoud; ?>
</div>
<div id="footer">

</div>
</body>
</html>
 
Laatst bewerkt:
PHP:
<?php
include('config.php');
include('boven.php');
include('taal.php');
?>
<div id="container">
<div id="bovenkant"><?php include('bovenkant.php');?></div>
<div id="linksboven"><?php      echo date($lang['DATUMTIJD']);?></div>
<div id="inloggen"><?php 
include('inloggen.php');
?></div> 
<div id="zijkant"><?php include('zijkant.php'); ?></div>
<div id="main"><?php
if(isset($_GET['informatie'])){
   include('informatie.php');
}elseif(isset($_GET['forum'])){
   include('forum.php');
}else{
   include('home.php');          
}
?></div>
<div id="onderkant"><?php include('onderkant.php'); ?></div>
</div>

Dit is zoals het nu is. Ik zou dus graag willen dat in het bestand boven.php staat

<head>
<meta ......./>
<title>$titel</title>
</head>

nadat het bestand boven.php is geinclude komt het bestand pas. In het geval van de url index.php?page=informatie dus het bestand informatie.php.

Ik zou dus willen dat in het bestand informatie.php de $titel is gezet. Oftwel $titel = 'Lees hier meer info';

Maar deze is er nog niet als de header al is gesloten.

Wanneer ik een $_GET zou gebruiken zou iedere gebruiker de titel kunnen veranderen. Dit zou ik niet prettig vinden.

Met de kleine letters bedoel ik de manier van:
PHP:
<?php
if($_GET['page'] == 'informatie'){
$titel = 'lees hier meer info';
}
?>

Die manier hoop ik ook te vermijden omdat ik andere variabelen in de titel wil ivm een forumpje.

Ik hoop dus egt de $titel in het geinclude bestand te zetten, maar tot nu toe lukt dit mij helaas niet.

Hoe kan ik dit voor mekaar krijgen?
 
Dat is toch zoals ik de 2e manier heb beschreven?

Daar gebeurt de include boven alle HTML en wordt de inhoud in een variabele gezet samen met de titel...

Overigens is dit
PHP:
if(isset($_GET['informatie'])){ 
   include('informatie.php'); 
}
niet de manier waarop je je verhaal begint.

Als ik nu jouw pagina aanroep met ?informatie=aoeuhgajiklgiaehkgaegen dan kom ik op de pagina informatie.php...

Maar ik begrijp niet wat dit verhaal met een forum te maken heeft. Die kan die titel in de browser ook niet wijzigen...

Je kunt dit evt proberen, ik garandeer je niet of het werkt:
PHP:
<?php 
include('config.php'); 
include('boven.php'); 
include('taal.php');
if(isset($_GET['informatie'])){ 
  $titel = "info";
  $inhoud = include('informatie.php'); 
}elseif(isset($_GET['forum'])){ 
  $titel = "forum";
  $inhoud = include('forum.php'); 
}else{
  $titel = "Home";
  $inhoud = include('home.php');
} 
?> 
<div id="container"> 
<div id="bovenkant"><?php include('bovenkant.php');?></div> 
<div id="linksboven"><?php echo date($lang['DATUMTIJD']);?></div> 
<div id="inloggen"><?php 
include('inloggen.php'); 
?></div> 
<div id="zijkant"><?php include('zijkant.php'); ?></div> 
<div id="main"><?php 
 echo $inhoud;
?></div> 
<div id="onderkant"><?php include('onderkant.php'); ?></div> 
</div>
Waar jij je <title> hebt staan is mij een raadsel maar in dit bestand staat hij niet...
 
boven.php
PHP:
<head>
<meta ......./>
<title>$titel</title>
</head>

Dat is dus waar $title staat.

Zoals in het gegeven voorbeeld staat $title onder het bestand boven.php. Wanneer de server dus bij <title> komt is $titel nog niet bekend. Deze wordt eronder namelijk pas gezet.

in plaats van:
PHP:
if(isset($_GET['informatie'])){ 
  $titel = "info"; 
  $inhoud = include('informatie.php'); 
}elseif(isset($_GET['forum'])){ 
  $titel = "forum"; 
  $inhoud = include('forum.php'); 
}else{ 
  $titel = "Home"; 
  $inhoud = include('home.php'); 
}

kan ik ook in het bestand informatie.php zelf $titel zetten. Maar dat is dus hetzelfde probleem.

Hij wil in het bestand boven.php de titel weten (ong. regel 3) terwijl deze pas eronder gezet wordt.

---------

Over het forum:
ALs ik dan dus een forum heb, en ik kan $titel weergeven in het bestand wat geladen wordt (bijv. forum.php) kan ik zegge: $titel = $database['titel'];
Maar dat doet er ver niet toe.

Kort samengevat.

Hoe kan ik een variabele ($titel) weergeven op lijn 3 terwijl deze pas later wordt gezet? (in informatie.php staat pas $titel = ...ong. regel 6)
 
Laatst bewerkt:
Nou nou nou, dan moet je nogal veel aanpassen...

PHP:
<?php 
include('config.php'); 
if(isset($_GET['informatie'])){ 
  $titel = "info"; 
  $inhoud = include('informatie.php'); 
}elseif(isset($_GET['forum'])){ 
  $titel = "forum"; 
  $inhoud = include('forum.php'); 
}else{ 
  $titel = "Home"; 
  $inhoud = include('home.php'); 
}
include('boven.php'); 
include('taal.php'); 
?> 
<div id="container"> 
<div id="bovenkant"><?php include('bovenkant.php');?></div> 
<div id="linksboven"><?php echo date($lang['DATUMTIJD']);?></div> 
<div id="inloggen"><?php 
include('inloggen.php'); 
?></div> 
<div id="zijkant"><?php include('zijkant.php'); ?></div> 
<div id="main"><?php 
echo $inhoud; 
?></div> 
<div id="onderkant"><?php include('onderkant.php'); ?></div> 
</div>

Gewoon boven.php include nadat de variabele is gedeclareerd. :rolleyes:
 
Maar op dat moment krijg ik het probleem dat de header (bovenkant) onderaan de pagina staat. Dus dan heb ik eerst alle div's en dan pas de header. De style.css wordt dus als één van de laatste dingen geladen en als er iets fout gaat in de PHP code (mysql die) dan komt de stijl nooit.

Ik weet niet of het verder erg is dat de header onderaan de pagina staat, maar het lijkt mij iig niet de bedoeling. Het is trouwens wel een werkende manier.
 
Dan moet je iets aan je manier van indelen doen...

Overigens snap ik niet goed waarom je niet gewoon je CSS in "boven.php" zet via <link rel="stylesheet" href="style.css" />...

Je moet je PHP altijd aanpassen aan de indeling van het HTML niet andersom...
 
Die link naar CSS staat inderdaad in boven.php.

Maar het klinkt erg gemakkelijk om de PHP indeling aan de HTML aan te passen, maar dat is dus wat mij nu werkelijk niet lukt.

Zou je me daarmee iets kunnen helpen?
Mvg Rutje1
 
Ik begrijp het even niet meer, je vertelt dat het CSS nu als een van de laatste dingen wordt ingeladen. Dat klopt niet met de code die ik je gaf...

PHP:
<?php
// Config ophalen
include('config.php'); 
//Juiste inhoud ophalen en in variabele zetten
if(isset($_GET['informatie'])){ 
  $titel = "info"; 
  $inhoud = include('informatie.php'); 
}elseif(isset($_GET['forum'])){ 
  $titel = "forum"; 
  $inhoud = include('forum.php'); 
}else{ 
  $titel = "Home"; 
  $inhoud = include('home.php'); 
}
// HEADER OPHALEN!!!
include('boven.php'); 
// Taalinstellingen ophalen
include('taal.php'); 
?> 
<div id="container"> 
<div id="bovenkant"><?php include('bovenkant.php');?></div> 
<div id="linksboven"><?php echo date($lang['DATUMTIJD']);?></div> 
<div id="inloggen"><?php 
include('inloggen.php'); 
?></div> 
<div id="zijkant"><?php include('zijkant.php'); ?></div> 
<div id="main"><?php 
echo $inhoud; 
?></div> 
<div id="onderkant"><?php include('onderkant.php'); ?></div> 
</div>
Zie het commentaar.
 
Nou nou nou, dan moet je nogal veel aanpassen...

PHP:
<?php 
include('config.php'); 
if(isset($_GET['informatie'])){ 
  $titel = "info"; 
  $inhoud = include('informatie.php'); 
}elseif(isset($_GET['forum'])){ 
  $titel = "forum"; 
  $inhoud = include('forum.php'); 
}else{ 
  $titel = "Home"; 
  $inhoud = include('home.php'); 
}
include('boven.php'); 
include('taal.php'); 
?> 
<div id="container"> 
<div id="bovenkant"><?php include('bovenkant.php');?></div> 
<div id="linksboven"><?php echo date($lang['DATUMTIJD']);?></div> 
<div id="inloggen"><?php 
include('inloggen.php'); 
?></div> 
<div id="zijkant"><?php include('zijkant.php'); ?></div> 
<div id="main"><?php 
echo $inhoud; 
?></div> 
<div id="onderkant"><?php include('onderkant.php'); ?></div> 
</div>

Ik snap niet helemaal waarom jij denkt dat hier je content boven je header staat?

Bij de if-else statements wordt deze inderdaad opgeroepen, maar in een variabele gezet (die dus in HTML niet zichtbaar is), op het moment dat je hele pagina opgeroepen is wordt hij er pas in geplaatst...

Waarom zet je anders je boven.php niet gewoon in deze code? Lijkt me ook makkelijker werken dan?


En verder.. Als je via een mysql die je code uit wordt gegooid, waardoor je je style niet zou zien maakt toch niet uit? Op dat moment weet je dat je de code nog moet aanpassen...
Mocht je daar willen debuggen, moet je dat aanpassen zodat het een error-message teruggeeft in plaats van een die...
Die kan je dan weer wel in de $inhoud meegeven....
Geeft ook meteen terugkoppeling aan een gebruiker als hij iets fout doet...
 
Waarom ik dat denk? Volg de structuur zou ik zeggen.

Eerst zet ik $titel, dan heeft include('boven.php'); er ook iets aan. Daarna zet ik meteen de juiste pagina in $inhoud. Dan heeft het gedeelte tussen <div id="main"> ook iets om weer te geven.

Aangezien eerst boven.php wordt geladen is er dus een CSS aanwezig wanneer er $inhoud wordt opgevraagd.

Zoals ik al eerder zei: Ik garandeer niet dat een include in een variabele goed zal werken.

edit: Dit blijkt ook niet te werken...

Wellicht werkt het beter met functies, dat je een functie getInformatie() maakt waarin je alles uitvoert voor die pagina en vervolgens de inhoud returned
 
De manier van $inhoud = include('pagina'); klinkt perfect!

Sorry dat ik het niet direct snapte, ik zag het verschil niet.

Ik zal even proberen of ik een functie kan maken die op deze manier werkt, maar dit is in iedergeval de oplossing voor mijn volgorde!! :thumb:

Ik post hier wel of het gelukt is! Zal wel even duren voor het me lukt, maar jullie horen het nog ;)

--
Het werkt niet op de manier van $inhoud = include, want op dat moment wordt de pagina gewoon geprint op die plaats.
 
Laatst bewerkt:
$inhoud = include("informatie.php"); werkt niet zoals ik in mijn edit heb aangegeven.

Probeer daarom een functie aan te maken zoals dit:

PHP:
function getInformatie() {
  $gegeven = $uit_database_gehaald;
  $result = '<b>Dit gegeven ('. $gegeven .')</b> komt uit de database;
  echo $result;
}

Vervolgens kun je dan in je index.php dit doen:
PHP:
$inhoud = getInformatie();

De bedoeling is dus dat je zorgt dat je alles uitvoert binnen de functie en uiteindelijk alles in 1 variabele samen laat komen en die teruggeeft.
 
maar hoe kan ik in de functie die gegevens ophalen?

Want dat $uit_database_opgehaald moet dus eigenlijk informatie.php zijn, maar dan zou ik verder weer enkel include weten :s
 
Je kunt het proberen om dus in de functie die include te zetten alhoewel ik denk dat dat hetzelfde probleem als eerder zal geven.

Wat ik eigenlijk bedoelde is dat je dus de inhoud van informatie.php in de functie zet. Dus in plaats van een apart bestand te maken heb je nu dus hetgeen in een functie staan.
 
ooh, erg jammer dat include niet werkt. Want niet alles staat in db. Ik moet gebruik blijven maken van verschillende pagina's.

Maar dan blijft de vraag hoe ik een hele pagina in een variabele kan zetten.

EDIT:

Lang Leve Helpmij.nl!
http://www.helpmij.nl/forum/showthread.php?t=230977

Nu moet het zeker gaan lukken!
Echt bedantk voor jullie hulp allemaal! En dat is dan vooral Tha Devil natuurlijk ;)

Toppie
 
Laatst bewerkt:
Volgens mij wordt het echt eens tijd dat je naar een templateparser gaat kijken, dit wordt een onoverzichtelijke rotzooi.

Ik heb deze tutorial over het gebruik van Smarty geschreven, als je Smarty correct toepast op je website kom je nooit met het soort problemen in de knoop die je nu ondervind.
 
Het is me ondertussen gelukt. Ik ben niet zo weg van templates omdat ik nu het met CSS kan oplossen en het erg gemakkelijk is nu.

Ik ga de tut zeker wel even bekijken! Leren is nooit weg.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan