home = $home; } public function load( $files ) { if (! is_array($files) ) { return false; } foreach( $files as $id => $name ) { $this->files[$id] = $this->home . $name; if( ! file_exists( $this->files[$id] ) ) { trigger_error( "Theme::load(): El archivo " . $this->files[$id] . " no existe.", E_USER_ERROR ); } } return true; } public function parse( $file ) { if (! $this->files[$file] ) { trigger_error( "Theme::parse(): No existe archivo asignado a " . $file, E_USER_ERROR ); } $this->checkEmbedded(); print $this->compile( $this->files[$file] ); } public function assignEmbedded( $var, $file ) { if (! $this->files[$file] ) { trigger_error( "Theme::assignEmbedded(): No existe archivo asignado a " . $file, E_USER_ERROR ); } $this->files_emb[$var] = $file; return true; } public function assingBlock( $block, $values ) { if ( preg_match("/\./", $block) ) { $blocks = explode( '.', $block ); $blockcount = sizeof( $blocks ) - 1; $str = '$this->data_blk'; for ($i = 0; $i < $blockcount; $i++) { $str .= '[\'' . $blocks[$i] . '\']'; eval('$lastiteration = sizeof(' . $str . ') - 1;'); $str .= '[' . $lastiteration . ']'; } $str .= '[\'' . $blocks[$blockcount] . '\'][] = $values;'; eval( $str ); } else { $this->data_blk[$block][] = $values; } return true; } public function assignVars( $values ) { foreach( $values as $var => $value ) { $this->data_var[$var] = $value; } return true; } public function assignVar( $var, $value ) { $this->data_var[$var] = $value; return true; } private function checkEmbedded() { if(! empty( $this->data_emb ) ) { foreach( $this->data_emb as $var => $file ) { $data = ''; $data = $this->compile( $this->files[$file] ); $this->assignVar($var, $data); } } return true; } private function _includeTpl( $match ) { return file_exists( $this->home . $match[ 1 ] ) ? file_get_contents( $this->home . $match[ 1 ] ) : ''; } private function _setVar( $match ) { return isset( $this->data_var[ $match[ 1 ] ] ) ? $this->data_var[ $match[ 1 ] ] : ''; } private function _setBlock( $match ) { return $this->blk( $this->tpl_result, $this->data_blk, $match[ 1 ], '', false ); } public function compile($file) { $this->tpl_result = file_get_contents( $file ); if ( empty( $this->tpl_result ) ) { trigger_error( 'Theme::compile(): El archivo esta vacio.', E_USER_ERROR ); } $this->tpl_result = preg_replace_callback( "##sU", array($this, "_includeTpl"), $this->tpl_result ); if( ! empty( $this->data_blk ) ) { $this->tpl_result = preg_replace_callback( "#(.*?)#s", array($this, "_setBlock"), $this->tpl_result ); } if( ! empty( $this->datos_var ) ) { $this->tpl_result = preg_replace_callback( "#{([a-zA-Z0-9\_\-\+\./]+)\}#", array($this, "_setVar"), $this->tpl_result ); } $this->tpl_result = preg_replace( "#(.*?)#s", "", $this->tpl_result ); return $this->tpl_result; } private function blk( $text, $object, $block, $orig_block = '', $sub = false ) { if( empty( $block ) ) { return $text; } $text_blk = ''; if( preg_match( "#(.*?)#s", $text_result, $text ) ) { $text_blk = $text_result[1]; } $orig_block = ($sub === true) ? $orig_block . "." : ""; $final_block = array(); $final_block[$block] = ""; $contar = !isset( $object[$block] ) ? -1 : sizeof($object[$block]) - 1; for($i = 0; $i <= $count; $i++) { $orig_blk = $repl_blk = $sublock = array(); foreach( $object[$block][$i] as $var => $value ) { if( !empty( $var ) && is_array( $value ) && !in_array( $var, $sublock ) ) { $sublock[] = $var; } else { $orig_blk[] = "/{" . $orig_blocke . $blocke . "." . $var . "}/"; $repl_blk[] = $value; } } $texto_proc = $texto_blk; $count2 = sizeof($sublock) - 1; for($m = 0; $m <= $count2; $m++) { $text_proc = $this->blk( $text_proc, $object[$block][$i], $sublock[$m], $block, true ); } $final_block[$block] .= preg_replace( $orig_blk, $repl_blk, ' ' . $text_proc . ' ' ); } $text = ($sub === true) ? preg_replace( "#(.*?)#s", $final_block[$block], $text ) : $final_block[$block]; return $text; } } ?>