str_replace in template

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

George Boot

George Boot

14/08/2010 14:26:15
Quote Anchor link
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:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?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!!

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 ?
 
PHP hulp

PHP hulp

28/03/2024 20:36:15
 
Danny Roelofs

Danny Roelofs

14/08/2010 14:36:54
Quote Anchor link
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.
 
- SanThe -

- SanThe -

14/08/2010 14:38:08
Quote Anchor link
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}'
 
George Boot

George Boot

14/08/2010 14:41:08
Quote Anchor link
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?
 
- SanThe -

- SanThe -

14/08/2010 14:46:04
Quote Anchor link
Dit werkt toch zeker wel (mits de C inderdaad met een hoofdletter is).
$template = str_replace('breadCrumbs', 'aap', $template);
 
George Boot

George Boot

14/08/2010 14:50:23
Quote Anchor link
index.php
Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?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
Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?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

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<!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}

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
 
P Lekensteyn

P Lekensteyn

14/08/2010 16:45:25
Quote Anchor link
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.
 
George Boot

George Boot

14/08/2010 17:10:47
Quote Anchor link
Okee, dat is slim ja :P

Nu gebruik ik (met php5):
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
$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?
 
Niels K

Niels K

14/08/2010 17:13:21
Quote Anchor link
Wat komt er uit als je var_dump gebruikt?

Je kunt natuurlijk ook zo kijken of het gelukt is.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<?php

$result
= file_get_contents( .... );

if ( $result === false)
{

   echo 'blaaa';
}
Gewijzigd op 14/08/2010 17:15:51 door Niels K
 
George Boot

George Boot

14/08/2010 17:18:03
Quote Anchor link
var_dump in de class leverd niets op.
In de index.php als:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
var_dump($layout->getHeader());

levert het wel iets op. Kijk live op http://flyman.bobe-multimedia.nl/
 
Niels K

Niels K

14/08/2010 17:29:22
Quote Anchor link
"var_dump in de class leverd niets op."

Die snap ik even niet..

Ik bedoelde dit:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php

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

?>


En geeft mijn tweede methode?
 
George Boot

George Boot

14/08/2010 17:33:06
Quote Anchor link
Dat levert het zelfde op: http://flyman.bobe-multimedia.nl/

Wat kan er mis aan zijn dan?
 
Niels K

Niels K

14/08/2010 17:40:38
Quote Anchor link
Lees PHP.net eens.. Daar zie je dat hij een string returned dus volgens mij doet hij het gewoon goed, anders returned hij false. Voor de rest heb ik weinig of nooit met deze functie gewerkt.. Dus hoe het verder zou moeten weet ik niet.

Bron: file_get_contents
 
George Boot

George Boot

14/08/2010 17:43:39
Quote Anchor link
Oké. Ik vind het ook al zo apart:
- hij kan het bestand in een string plaatsen
- maar str_replace kan/wil er niets in replacen.

Iemand anders die een oplossing heeft? BVD!
 
P Lekensteyn

P Lekensteyn

15/08/2010 11:12:50
Quote Anchor link
Ik weet niet hoe je $layout->getHeader() toepast, maar het return't de verwerkte template.

Je zult dus iets moeten doen als echo $layout->getHeader();
 
Jurgen B

Jurgen B

15/08/2010 12:23:16
Quote Anchor link
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?
 
George Boot

George Boot

16/08/2010 07:44:41
Quote Anchor link
@ Peter:
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..
 
Pim -

Pim -

16/08/2010 11:39:01
Quote Anchor link
Ik denk dat je niet heel handig bezig bent. Je opzet is totaal verkeerd.
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.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.