Hallo mensen,

Ik ben bezig met een reserveringssysteem. Goed, dat doet verder niet ter zake.
Wat wel ter zake doet is dat ik een template in een bestand zet, en die via een classe aanvraag (via readfile).
Vervolgens wil ik een aantal replaces doen. Alleen PHP werkt niet mee! Geen idee waarom hij het niet doet, maar alle seraches staan gewoon nog als voorheen als ik gereplaces heb!

Ik vermoed dat mijn string te groot is, en dat de functie str_replace niet meer mee werkt dat.

De classe:
<?php

class layout {

# constructor
public function __construct($config) {
session_start();
}

# make the header
public function getHeader() {
$template = readfile('layout/header.php', true);
// standard
$template = str_replace('{$_basePath}', '', $template);
$template = str_replace('breadCrumbs', $_SESSION['breadcrubms'], $template);
$template = str_replace('{$message}', $this->getMessage, $template);

// menu
$template = str_replace('{$active1}', $this->_getMenuStatus('1'), $template);
$template = str_replace('{$active2}', $this->_getMenuStatus('2'), $template);
$template = str_replace('{$active3}', $this->_getMenuStatus('3'), $template);
$template = str_replace('{$active4}', $this->_getMenuStatus('4'), $template);
$template = str_replace('{$active5}', $this->_getMenuStatus('5'), $template);
$template = str_replace('{$active6}', $this->_getMenuStatus('6'), $template);

// left menu

return $template;
}
}
?>

Kan iemand mij helpen? Alvast bedankt!!

[size=xsmall]Toevoeging op 14/08/2010 14:28:53:[/size]

Wat betreft de replaces voor {$active1} etc: dit is voor mij menu. Tot op heden nog nooit een goede manier gevonden om via een handige functie de class="act" mee te geven aan een active kop. Iemand hier ook meteen een oplossing voor :P ?
Het is wel geen directe helpende hand, maar mag ik een suggestie doen : http://www.smarty.net/

Sinds ik smarty ken, en gebruik zou ik niet eens meer een eigen template parser willen schrijven.
Tussen enkele quotes betekent dus dat php dat letterlijk over neemt.
Dus
$_basePath = 'aap';
str_replace('{$_basePath}', '', ... zoek naar de string '{$_basePath}'
str_replace("{$_basePath}", '', ... zoek naar de string '{aap}'
Smarty gebruik ik met opzet niet, ik kies deze keer om het eens zelf te maken..

Wat betreft de quotes:
$template = str_replace('breadCrumbs', $_SESSION['breadcrubms'], $template);
werkt ook niet... Terwijl breadCrumbs toch echt letterlijk in die template staat.. Hoe is dat te verklaren?
Dit werkt toch zeker wel (mits de C inderdaad met een hoofdletter is).
$template = str_replace('breadCrumbs', 'aap', $template);
index.php
<?php

# autoLoader
require_once('startApplication.php');

# settings
$_SESSION['breadcrubms'] = '<a href="">Homepage</a> --> <a href="">Overzicht</a>';
$_SESSION['item'] = '1';

# class declarations
$config = new config;
//$user = new user;
//$db = new PDO("$config->_dbType:host=$config->_dbHost;dbname=$config->_dbData", $config->_dbUser, $config->_dbPass);
//$login = new login;
$layout = new layout($config);

#include header
$layout->getHeader();

#make content
//

#include footer
$layout->getFooter();

#quit connection
$db = NULL;

?>

classes/layout.php
<?php

class layout {

# constructor
public function __construct($config) {
session_start();
}

# make the header
public function getHeader() {
$template = readfile('layout/header.php', true);
// standard
$template = str_replace('{$_basePath}', '', $template);
$template = str_replace('breadCrumbs', $_SESSION['breadcrubms'], $template);
$template = str_replace('{$message}', $this->getMessage, $template);

// menu
$template = str_replace('{$active1}', $this->_getMenuStatus('1'), $template);
$template = str_replace('{$active2}', $this->_getMenuStatus('2'), $template);
$template = str_replace('{$active3}', $this->_getMenuStatus('3'), $template);
$template = str_replace('{$active4}', $this->_getMenuStatus('4'), $template);
$template = str_replace('{$active5}', $this->_getMenuStatus('5'), $template);
$template = str_replace('{$active6}', $this->_getMenuStatus('6'), $template);

// left menu

return $template;
}
}

?>

layout/header.php


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
	<head>
		<title>FlyMan 1.0 - Parkingmanagement system by BoBe Multimedia</title>
		<meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
		<style media="all" type="text/css">@import "{$_basePath}css/all.css";</style>
		<link rel="shortcut icon" href="{$_basePath}img/favicon.ico" />
	</head>
	<body>
		<div id="main">
			<div id="header">
				<a href="index.html" class="logo"><img src="{$_basePath}img/logo.gif" width="400" height="29" alt="" /></a>
				<ul id="top-navigation">
					<li{$active1}><span><span><a href="{$_basePath}homepage/">Homepage</a></span></span></li>
					<li{$active2}><span><span><a href="{$_basePath}reserveringen/">Reserveringen</a></span></span></li>
					<li{$active3}><span><span><a href="{$_basePath}website/">Website</a></span></span></li>
					<li{$active4}><span><span><a href="{$_basePath}email/">E-mail</a></span></span></li>
					<li{$active5}><span><span><a href="{$_basePath}gebruikers/">Gebruikers</a></span></span></li>
					<li{$active6}><span><span><a href="{$_basePath}statistiek/">Statistiek</a></span></span></li>
				</ul>
			</div>
			<div id="middle">
				<div id="left-column">
					<h3>Overzicht</h3>
					<ul class="nav">
						<li><a href="#">Uitgaand</a></li>
						<li><a href="#">Inkomend</a></li>
						<li class="last"><a href="#">Reserveringen</a></li>
					</ul>
					<a href="#" class="link">Bekijk e-mail</a>
					<a href="#" class="link">Contact</a>
				</div>
				<div id="center-column">
					<div class="top-bar">
						<h1>Overzicht</h1>
						<div class="breadcrumbs">breadCrumbs</div>
					</div>
					<br />
					{$message}

[size=xsmall]Toevoeging op 14/08/2010 14:54:27:[/size]

(onderaan de HTML zie je de breadCrumbs staan)
Bij mij werkt geen ENKELE replace... Ik vraag me nu ook af of readfile het wel als een sting opslaat, of in ieder geval als een string die str_replace wil eten..

Niet zo vreemd dat ie het niet doet.
Readfile leest het bestand in, en stuur het direct naar de browser.
Je moet file_get_contents gebruiken.

Okee, dat is slim ja :P

Nu gebruik ik (met php5):
$template = file_get_contents('layout/header.php', true);


Alleen levert dit weer totaal NIETS op. Leeg scherm dus. Ook geen error. Wat gaat er nu dan fout?
Wat komt er uit als je var_dump gebruikt?

Je kunt natuurlijk ook zo kijken of het gelukt is.

<?php

$result = file_get_contents( .... );

if ( $result === false)
{
echo 'blaaa';
}

"var_dump in de class leverd niets op."

Die snap ik even niet..

Ik bedoelde dit:

<?php

var_dump( $template = file_get_contents('layout/header.php', true); );

?>

En geeft mijn tweede methode?

Reageren