Simple Template Engine
bigger project vaD simple TemplateEngine vIngu'. server-side 'ej client-side scripts vaD same code reH ghItlh pagh (cha' places Daq change tedious - Single Point Of Maintenance). simple TemplateEngine PHP pagh Javascript vaD tu'lu'be' (search failed). goal: PHP file 'ej Javascript Daq parameters few pass, template content replace. Ajax request (dynamic content page Daq insert) same template "source" lo' (PHP page build rap). forum misvam: posts display (PHP script generate) 'ej posts dynamically Javascript via add (post send qaSDI' direct display, page reload pagh). TemplateEngine pagh vaj cha' templates: PHP template 'ej Javascript template. DaH wa' template neH (PHP 'ej Javascript Hoch lo'). Variables curly brackets Daq (choH laH). short: misvam:
<template source="welcome">
Hallo, mein Name ist {name} und ich bin {age} Jahre alt.
</template>
{name} 'ej {age} variables replace (dynamically pass). Let's go.
Le Javascript
<script language="javascript">
var TemplateEngine = function(tpl, data) {
if ($("template[source='" + tpl + "']").length > 0){
tpl = $("template[source='" + tpl + "']").html();
}else{
$.get(tpl, (data) => tpl = data);
}
var re = /{([^}]+)}/g, match;
while(match = re.exec(tpl)){
tpl = tpl.replace(match[0], data[match[1]]);
}
return tpl;
</script>
TemplateEngine call template (tpl) 'ej data expect. template: HTML node type "template" "source" property pagh relative path file (template content ghaj).
TemplateEngine("welcome", {name: 'David', age: 28})
template source Daq ghaj vaj element direct access. pagh vaj GET request start, file Ajax via read. "tpl" file name pagh "source" property value pass laH. file example above contain poQ (template node je). return:
Hallo, mein Name ist David und ich bin 28 Jahre alt.
Le PHP
PHP via je possible poQ (pagh vaj unsensible).
class TemplateEngine{
public function compile($file, $data){
preg_match_all('/<template([^>]*)>(.*)<\/template>/m', file_get_contents($file), $content, PREG_SET_ORDER, 0);
$content = $content[0][2];
foreach($data as $key => $value){
$content = str_replace("{".$key."}", $value, $content);
}
return $content;
}
}
call:
$engine = new TemplateEngine();
$engine->compile("myfile.template", ["age" => "28", "name" => "David"]);
return je:
Hallo, mein Name ist David und ich bin 28 Jahre alt.
template file neH edit vaj server-side 'ej client-side same output tlhap!