Real Simple Template Parser

Door Nils VG, 16 jaar geleden, 3.969x bekeken

Hoi Hoi.
Veel mensen maken de laatste tijd ingewikkelde template parsers. Nou, ik wou er ook eentje maken en ik kwam op een uit die praktisch alleen basisfuncties van PHP gebruikt.
Je mag hem natuurlijk uitbereiden. Commentaar is welkom.
Voorbeeld van template(*.tpl file):

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<html>
<head>
<title>[pname]</title>
</head>
<body>
[content]
</body>
</html>


Voorbeeld van gebruik van parser(*.php file):
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?
require_once("class.parser.php"); // het script dus
$parse = new parser("index.tpl"); // de template
$parse->assign("pname", "parser voorbeeld"); //naam van blok zonder [ of ] + inhoud
$parse->assign("content", "Dit is een voorbeeld"); // zie hierboven
$parse->output(); // de pagina outputten
?>


Veel plezier ermee!

Gesponsorde koppelingen

PHP script bestanden

  1. real-simple-template-parser

 

Er zijn 6 reacties op 'Real simple template parser'

PHP hulp
PHP hulp
0 seconden vanaf nu
 

Gesponsorde koppelingen
Martijn B
Martijn B
16 jaar geleden
 
0 +1 -0 -1
Leuk simpel template script, maar wat als je:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<html>
<head>
<title>[pname]</title>
</head>
<body>
[content]
</body>
</html>


Zou kunnen vervangen door een nieuw bestand template.php met als inhoud:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
<?
echo '<html>',"\n",
'<head>',"\n",
'<title>',$pname,'</title>',"\n",
'</head>', "\n",
'<body>',"\n",
$content, "\n",
'</body>',"\n",
'</html>',"\n";
?>


Nu kan PHP meteen aan de slag om alles op het scherm te zetten. Maar hiervan wordt alles wel ingewikkelder ;D

edit:

Voor templates zou ik template.html gebruiken omdat de meeste editors dan snappen dat het om html codes gaat , je hebt dan dus mooie kleurtjes.
Jelmer -
Jelmer -
16 jaar geleden
 
0 +1 -0 -1
Ik gebruik zelf momenteel gewoon HTML + PHP als templates, en dan is er als het ware in het template een object '$this' beschikbaar waar ik mijn variabelen aan kan toewijzen, zodat er toch nog een soort grens tussen verwerking en uitvoer zit. Ik gebruik mijn template-achtige iets meer om templates in templates e.d. te kunnen toepassen, en last-minute veranderingen door de code in de templates te kunnen toepassen.

Een nadeel van jouw aanpak vind ik toch dat je direct de variabelen al vervangt. Het eerste wat ik dus zou moeten doen is een template-bestand opgeven. Bij mij verandert die als ik bijvoorbeeld uitvoer in XML wil geven. Maar het wordt pas later in het script duidelijk of ik wel XML wil gebruiken als uitvoer, of gewoon HTML. Ik had liever gezien dat je alle variabelen verzamelde en bij parser::output() pas in het bestand verving. Bijkomend voordeel is dat je dan gewoon die 2 array's (met sleutels en met waarden) in str_replace kan proppen, wat volgens mij net even iets sneller is dan voor iedere variabele str_replace aanroepen.

Dat 2e voorbeeld wat martijn! gaf als alternatief heeft als enorme nadeel, naja je ziet het al, dat je de tags moet escapen en dat je handmatig de linebrakes erin moet zetten. En naar mijn mening is dat dus totaal geen oplossing. Maar Martijn! heeft (uiteraard) wel gelijk, native PHP is veel sneller dan *_replace.
Martijn B
Martijn B
16 jaar geleden
 
0 +1 -0 -1
Quote:
Dat 2e voorbeeld wat martijn! gaf als alternatief heeft als enorme nadeel, naja je ziet het al, dat je de tags moet escapen en dat je handmatig de linebrakes erin moet zetten. En naar mijn mening is dat dus totaal geen oplossing. Maar Martijn! heeft (uiteraard) wel gelijk, native PHP is veel sneller dan *_replace.


Dat moet je dan ook laten genereren. Van templates.html naar template.php is een stap waar je zelf niets aan hoeft te doen. Daar wil je zelf ook niets aan hoeven doen omdat je natuurlijk niet wil dat de maker van een template zomaar bepaalde PHP functies kan aanroepen.

Enters en tabs in je HTML kun je hiermee ook makkelijk verwijderen, dat scheelt weer een aantal bytes per template.

Maar om even terug te komen op deze template parser:

Dit bedoelt Jelmer:
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
<?php
$aVar
= array('[var1]', '[var2]', '[var3]');
$aVar_value = array('val1', 'val2', 'val3');

$sTemplateContent = '
...
[var1]
...
[var2]
...
[var3]
...'
;

$sTemplateContent = str_replace($aVar, $aVar_value, $sTemplateContent);

?>
Jasper
jasper
16 jaar geleden
 
0 +1 -0 -1
op een xhtml pagina moet je gewoon je CSS file vervangen. wat veel gemakkelijker gaat!
Dutchcamel
dutchcamel
16 jaar geleden
 
0 +1 -0 -1
@Jasper:
Ik weet niet of ik je bericht nu goed begrijp of niet, maar het gebruik van templates heeft helemaal niets met het gebruik van een stylesheet te maken. Templates zijn handig om je (X)HTML en PHP uit elkaar te houden. Daarom vind ik de PHP oplossingen voor templates die hierboven gegeven worden ook maar vreemd.

Door te werken met een stylesheet en templates heb je uiteindelijk 3 typen bestanden:
- Templates met de structuur van je pagina
- PHP bestanden die de inhoud dynamisch bepalen
- Stylesheet(s) voor de opmaak

Daardoor is al je code netjes gescheiden en eenvoudig te onderhouden.
PHP hulp
PHP hulp
0 seconden vanaf nu
 

Gesponsorde koppelingen
Nick Bakx
Nick Bakx
14 jaar geleden
 
0 +1 -0 -1
Weet iemand hoe ik meerdere records uit een mysql database kan halen met deze class?
Ik gebruik een fuctie met het volgende er in:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
<?php
function bekijk(){
// database connectie en query weg gelaten.
while ($rij = mysql_fetch_object($query)){
        $id = htmlspecialchars($rij->id);
        $titel = htmlspecialchars($rij->titel);
echo $titel;
}

?>


Ik krijg ze nu boven aan mijn pagina.
Tevens werken de specialchars niet.

Hoe kan ik zorgen dat wel werkt?

Om te reageren heb je een account nodig en je moet ingelogd zijn.

Inhoudsopgave

  1. real-simple-template-parser

Labels

  • Geen tags toegevoegd.

Navigatie

 
 

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.