/** * Analyses a template file content (string) and extracts the blocks * * @param string $tpl the template in which to look for blocks * @return void * @see self::$blocks */ protected function searchBlocks($tpl) { $r = array(); $blockStarts = array(); $blockEnds = array(); preg_match_all('#{block([[:blank:]]*)name=(' . tpltools::$varreg . '+)(.*)}#U', $tpl, $r, PREG_OFFSET_CAPTURE); foreach ($r[0] as $k => $match) { $p = tpltools::readParams($match[0]); $blockStarts[] = array($match[1], strlen($match[0]), $p['params']); } preg_match_all('#{/block}#', $tpl, $r, PREG_OFFSET_CAPTURE); foreach ($r[0] as $match) { $blockEnds[] = $match[1]; } $s = sizeof($blockStarts); for ($i = 0; $i < $s; $i++) { for ($j = $i + 1; $j < $s; $j++) { if ($blockStarts[$j][0] < $blockEnds[$i]) { $tmp = $blockEnds[$j]; $blockEnds[$j] = $blockEnds[$i]; $blockEnds[$i] = $tmp; } } } foreach ($blockStarts as $k => $b) { $this->blocks[$b[2]['name']][] = array('content' => substr($tpl, $b[0] + $b[1], $blockEnds[$k] - $b[0] - $b[1]), 'command' => substr($tpl, $b[0], $b[1]), 'params' => $b[2]); } }
/** * Prepares the exportation of the assigned variables * * @return array */ protected function exportVars() { $vars = []; foreach ($this->vars as $name => $var) { if (empty($var['_parse_'])) { $vars[$name] = $var['_value_']; } else { $vars[$name] = tpltools::getVar($var); } } return $vars; }
/** * Gets a variable, parses it if necessary, and returns it * * @param string $var the variable to process * @param string $modifiers the modifiers to apply to the variable * @param string $returnMethod the return method to use (echo|return) * @return mixed a string if returnMethod=='echo', void else * @see self::modifier() */ public static function getVar($var, $modifiers = '', $returnMethod = 'return') { $parse = isset($var['_parse_']) && $var['_parse_']; $var = is_array($var) && array_key_exists('_value_', $var) ? $var['_value_'] : $var; $modifiers = explode('|', $modifiers); foreach ($modifiers as $modifier) { $t = explode(':', $modifier); $var = tpltools::modifier($var, $t[0], isset($t[1]) ? $t[1] : ''); } if (is_string($var) && $parse) { $var = eval('?>' . tpltools::analyseAndTransform($var)); } if ($returnMethod == 'echo') { echo $var; } elseif ($returnMethod == 'return') { return $var; } }