str_replace in template
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:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<?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;
}
}
?>
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!!
Toevoeging op 14/08/2010 14:28:53:
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 ?
http://www.smarty.net/
Sinds ik smarty ken, en gebruik zou ik niet eens meer een eigen template parser willen schrijven.
Het is wel geen directe helpende hand, maar mag ik een suggestie doen : Sinds ik smarty ken, en gebruik zou ik niet eens meer een eigen template parser willen schrijven.
Dus
$_basePath = 'aap';
str_replace('{$_basePath}', '', ... zoek naar de string '{$_basePath}'
str_replace("{$_basePath}", '', ... zoek naar de string '{aap}'
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?
$template = str_replace('breadCrumbs', 'aap', $template);
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<?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;
?>
# 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
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
<?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;
}
}
?>
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
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
<!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}
<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}
Toevoeging op 14/08/2010 14:54:27:
(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..
Gebruik code-tags voor het overzichtelijk weergeven van je code[/modedit]
Gewijzigd op 14/08/2010 16:41:40 door George Boot
Readfile leest het bestand in, en stuur het direct naar de browser.
Je moet file_get_contents gebruiken.
Nu gebruik ik (met php5):
Alleen levert dit weer totaal NIETS op. Leeg scherm dus. Ook geen error. Wat gaat er nu dan fout?
Je kunt natuurlijk ook zo kijken of het gelukt is.
Code (php)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
<?php
$result = file_get_contents( .... );
if ( $result === false)
{
echo 'blaaa';
}
$result = file_get_contents( .... );
if ( $result === false)
{
echo 'blaaa';
}
Gewijzigd op 14/08/2010 17:15:51 door Niels K
Die snap ik even niet..
Ik bedoelde dit:
En geeft mijn tweede methode?
- hij kan het bestand in een string plaatsen
- maar str_replace kan/wil er niets in replacen.
Iemand anders die een oplossing heeft? BVD!
Je zult dus iets moeten doen als echo $layout->getHeader();
Stomme opmerking misschien, maar er staat $_SESSION['breadcrubms'] (notice cruBMs). nu is dit vast niet je grootste probleem maar ik neem aan dat het $_SESSION['breadcrumbs'] moet zijn, met evt. nog een hoofdletter C?
Dat is hem. Hoe stom is het ook weer mogelijk he... Omdat ik eerst getfile gebruikte (die automatisch een echo doet), heb ik de hele geretrnde string nooit ge-echo't... Dat is de oplossing voor de lege pagina, bedankt!
Maar voor alsnog replaced de functie niet alles..
Je hebt eigenlijk 3 keuzen:
- Gebruik een template engine
- Maak zelf een template engine met native PHP ( dus ipv {breadcumbs} $this->breadcrumbs )
- Maak een template engine met een eigen taal.
De laatste optie is verreweg de lastigste en als je meer wilt dan alleen wat variabelen vervangen, dus ook herhalingsblokken, condities e.d. heb je meer php/programmeer kennis nodig dan je nu laat zien.
Als je dus zelf iets wil maken, raad ik je de tweede optie aan.