function parse($file, $section, $vars = null) {
// clear file status cache
clearstatcache();
$basename = basename($file);
// if the section is stored in $GLOBALS, use section that was stored
// so that we do not need to find the section again from the template file
if (isset($GLOBALS['parser'][$basename][$section])) {
$result = $GLOBALS['parser'][$basename][$section];
}
// read template file and find $section
if (!isset($result)) {
$fileLines = file($file);
$file_i = implode('<@>', $fileLines);
$start_i = strpos($file_i, '['.$section.']');
$start = sizeof(explode('<@>', substr($file_i, 0, $start_i))) - 1;
$end_i = strpos($file_i, '[/'.$section.']');
$end = sizeof(explode('<@>', substr($file_i, 0, $end_i))) - 1;
for ($i=$start+1; $i<=$end-1; $i++) {
$result .= $fileLines[$i];
}
}
// if template does not contain the section
if (empty($result)) {
return 'source: '.$file. ' is empty ('.$section.')';
}
// store the section
$GLOBALS['parser'][$basename][$section] = $result;
// remove comments
$result = preg_replace('![comment].+[/comment]!s', '', $result);
// place values into section
if (is_array($vars)) {
foreach($vars as $key => $value) {
$tag = "{VAR:" . $key . "}";
$result = str_replace($tag, $value, $result);
}
}
// remove VAR tags that had no mathing replacement in $vars
$result = preg_replace("/{VAR:(.*)}/U", "", $result);
return $result;
}
Tühjendab file status cache‘i, et kasutada värsket versiooni templeidist:
clearstatcache();
Kui sektsioon on eelnevalt salvestatud, siis kasutab salvestatud versiooni, et vältida selle uut otsingut templeidi failist:
$basename = basename($file);
if (isset($GLOBALS['parser'][$basename][$section])) {
$result = $GLOBALS['parser'][$basename][$section];
}
Loeb templeidi faili ja otsib $section’it:
if (!isset($result)) {
$fileLines = file($file);
$file_i = implode('<@>', $fileLines);
$start_i = strpos($file_i, '['.$section.']');
$start = sizeof(explode('<@>', substr($file_i, 0, $start_i))) - 1;
$end_i = strpos($file_i, '[/'.$section.']');
$end = sizeof(explode('<@>', substr($file_i, 0, $end_i))) - 1;
for ($i=$start+1; $i<=$end-1; $i++) {
$result .= $fileLines[$i];
}
}
Kui templeit ei sisalda otsitud sektsiooni, siis tagastab veateate:
if (empty($result)) {
return 'source: '.$file. ' is empty ('.$section.')';
}
Salvestab sektsiooni võimalikuks taaskasutamiseks sama laadimise jooksul:
$GLOBALS['parser'][$basename][$section] = $result;
Eemaldab kommentaarid:
$result = preg_replace('![comment].+[/comment]!s', '', $result);
Asetab väärtused sektsiooni:
if (is_array($vars)) {
foreach($vars as $key => $value) {
$tag = "{VAR:" . $key . "}";
$result = str_replace($tag, $value, $result);
}
}
Eemaldab VAR tagid, millele vastavad asendusväärtused puudusid $vars muutujas:
$result = preg_replace("/{VAR:(.*)}/U", "", $result);
HTML templeit:
[section1]
The number is: "{VAR:number}"
[/section1]
PHP skript:
$params['number'] = '1000';
$html = parse('templates/test1.tpl', 'section1', $params);
echo $html;
Lae zipitud failid alla siit.