template = $template; } public function setObject($object) { $this->object = $object; } public function render($template = null, $object = null) { if($template == null) $template = $this->template; if($object == null) $object = $this->object; return $this->block($template, $object); } private function block($template = null, $object = null) { $pattern = '/\{\{#(\w+)(\?|!)?}}/i'; if($template == null) $template = $this->template; if($object == null) $object = $this->object; do { $porzioni = null; preg_match($pattern, $template, $porzioni); if(count($porzioni)) { if(!isset($porzioni[2])) $porzioni[2] = ""; $oTag = '{{#'.$porzioni[1].$porzioni[2].'}}'; $cTag = '{{/#'.$porzioni[1].$porzioni[2].'}}'; if(!strstr($template, $oTag)) return false; if(!strstr($template, $cTag)) return false; list(, $contenuto) = explode($oTag, $template); list($contenuto) = explode($cTag, $contenuto); if(is_object($object)) { if(isset($object->{$porzioni[1]})) $parziale = @$object->{$porzioni[1]}; else $parziale = false; } else if(is_array($object)) { if(isset($object[$porzioni[1]])) $parziale = $object[$porzioni[1]]; else $parziale = false; } else return false; $typeOfObject = gettype($parziale); if($porzioni[2] == "") { if($typeOfObject == 'boolean') { if($parziale == true) $res = $this->block($contenuto, $object); else $res = ""; } else if($typeOfObject == 'array') { $res = ""; foreach($parziale as $i=>$value) $res .= $this->block($contenuto, $parziale[$i]); } } else if($porzioni[2] == "?") { if(is_array($parziale) || $parziale == true || $parziale == 1 || is_object($parziale)) { $res = $this->block($contenuto, $object); } else $res = ""; } else if($porzioni[2] == "!") { if(!$parziale && !is_array($parziale) && $parziale == 0 && !is_object($parziale)) $res = $this->block($contenuto, $object); else $res = ""; } $template = @str_replace($oTag . $contenuto . $cTag, $res, $template); } else return($this->variables($template, $object)); } while(count($porzioni) > 0); } private function variables($template = null, $object = null) { if($template == null) $template = $this->template; if($object == null) $object = $this->object; $pattern = '/\{\{([^}]*)\}\}/i'; preg_match_all($pattern, $template, $res); list($originali, $chiavi) = $res; $typeOfInclude = gettype($object); foreach($chiavi as $key => $value) { if($typeOfInclude == 'object') $replace[$key] = $object->$value; else { $replace[$key] = $object[$value]; } } @$parsed = str_replace($originali, $replace, $template); return($parsed); } } ?>