Witam, zrobiłem sobie klasę (poniżej) i nie mogę sobie poradzić z jednym problemem...
jak mogę zmodyfikować tą klasę aby możliwe było dodawanie podbloków, tak jak w tej z phpBB? Jeżeli bym wiedział jak to nie musiałbym tworzyć dodatkowych metod (assign_dynamic i assign_inblock_dynamic)...
<?php
class Template
{
var $classname = 'Template';
var $last_id = 0;
var $root_dir;
var $filenames = array();
function set_rootdir($dir)
{
$dir = subst($dir, 0, -1);
$this->root_dir = $dir;
return true;
}
function set_filenames($arr)
{
if($this->root_dir == "")
die($this->error('set_filenames', 'root_dir_empty'));
{
foreach($arr as $name => $file)
{
$this->filenames[$name] = $this->root_dir.'/'.$file;
}
}
else
{
die($this->error('set_filenames', 'not_array')); }
return true;
}
function error($fname, $errtype)
{
if($errtype == 'not_array')
$err = 'This is not an array';
elseif($errtype == 'root_dir_empty')
$err = 'Set root dir before seting filenames';
else
$err = $errtype;
return $this->classname.'->'.$fname.': '.$err;
}
function assign_var($key, $value)
{
$this->vars[$key] = $value;
return true;
}
function assign_vars($arr)
{
{
foreach($arr as $key => $value)
{
$this->vars[$key] = $value;
}
return true;
}
else
{
die($this->error('assign_vars', 'not_array')); }
}
function assign_block_vars($block = '', $arr)
{
if($block == '')
die($this->error('assign_block_vars', 'Block name is empty'));
die($this->error('assign_block_vars', 'not_array'));
{
$i = count($this->blocks[$block]); $this->last_id = $i;
}
else
{
$i = 0;
}
foreach($arr as $a => $b)
{
$this->blocks[$block][$i][$a] = $b;
}
}
function assign_inblock_dynamic($dynamic)
{
$this->idynamic[$dynamic][$this->last_id] = true;
}
function assign_dynamic($dynamic)
{
$this->dynamic[$dynamic] = true;
}
function pparse($name)
{
#
## BEGIN - parsing blocks
#
foreach($this->blocks as $blockname => $variables)
{
if(!strpos('switch_', $blockname)) {
if(preg_match('#<!-- BEGIN '.$blockname.' -->(.*?)<!-- END '.$blockname.' -->#is', $code, $result)) {
$uncompiled_blocks[$blockname] = $result[0];
for($i=0; $i<count($variables); $i++)
{
$found_blocks[$blockname][$i] = $result[1];
}
}
}
}
foreach($found_blocks as $blockname => $variables)
{
# Variables is an array
foreach($variables as $key => $value)
{
foreach($this->blocks[$blockname][$key] as $k => $v)
{
if($this->idynamic['switch_'.$blockname][$key] != true)
{
$found_blocks[$blockname][$key] = preg_replace('#<!-- BEGIN switch_'.$blockname.' -->(.*?)<!-- END switch_'.$blockname.' -->#is', '', $found_blocks[$blockname][$key]); }
else
{
$found_blocks[$blockname][$key] = preg_replace('#<!-- BEGIN switch_'.$blockname.' -->(.*?)<!-- END switch_'.$blockname.' -->#is', '1', $found_blocks[$blockname][$key]); }
$found_blocks[$blockname][$key] = str_replace('{'.$blockname.'.'.$k.'}', $v, $found_blocks[$blockname][$key]); }
}
}
foreach($found_blocks as $blockname => $values)
{
$code = str_replace($uncompiled_blocks[$blockname], $replace, $code); }
#
## END - parsing blocks
#
#
## BEGIN - parsing dynamic
#
foreach($this->dynamic as $dynamic => $x)
{
if(strpos('switch_', $dynamic)) {
$code = preg_replace('#<!-- BEGIN '.$dynamic.' -->(.*?)<!-- END '.$dynamic.' -->#is', '1', $code); }
}
#
## END - parsing dynamic
#
#
## BEGIN - parsing variables
#
foreach($this->vars as $key => $value)
{
}
#
## END - parsing variables
#
#
## Clearing dynamics
#
$code = preg_replace('#<!-- BEGIN switch_(.*?) -->(.*?)<!-- END switch_(.*?) -->#is', '', $code);
}
}
?>