[Smarttemplate-cvscommit] smarttemplate class.smarttemplateparser.php, 1.16, 1.17
Brought to you by:
codeworxtech
|
From: EndelWar <end...@us...> - 2007-01-01 01:46:28
|
Update of /cvsroot/smarttemplate/smarttemplate In directory sc8-pr-cvs8.sourceforge.net:/tmp/cvs-serv15595 Modified Files: class.smarttemplateparser.php Log Message: Added support for an IF statement that can use smart extensions. Initial code by Khary Sharpe Index: class.smarttemplateparser.php =================================================================== RCS file: /cvsroot/smarttemplate/smarttemplate/class.smarttemplateparser.php,v retrieving revision 1.16 retrieving revision 1.17 diff -C2 -d -r1.16 -r1.17 *** class.smarttemplateparser.php 21 Oct 2006 19:56:36 -0000 1.16 --- class.smarttemplateparser.php 1 Jan 2007 01:46:24 -0000 1.17 *************** *** 183,186 **** --- 183,187 ---- return; } + $header = ''; /* Quick hack to allow subtemplates */ /* FIXME: resolve problems with cached subtemplates */ *************** *** 274,277 **** --- 275,340 ---- } + // 'IF {extension:variable}'=mmm Blocks + // e.g. + // <!-- IF {count:list} > 0 --> + // List populated + // <!-- ELSE --> + // List is empty + // <!-- ENDIF --> + // thanks to Khary Sharpe (ksharpe [at] kharysharpe [dot] com) for the initial code + if (preg_match_all('/<!-- (ELSE)?IF {([a-zA-Z0-9_]+):([^}]*)}[\s]*([!=<>]+)[\s]*(["]?[^"]*["]?) -->/', $page, $var)) + { + + foreach ($var[2] as $cnt => $tag) + { + list($parent, $block) = $this->var_name($tag); + $cmp = $var[4][$cnt]; + $val = $var[5][$cnt]; + $else = ($var[1][$cnt] == 'ELSE') ? '} else' : ''; + if ($cmp == '=') + { + $cmp = '=='; + } + + $extension = $var[2][$cnt]; + $extension_var = $var[3][$cnt]; + if (!isset($this->extension_tagged[$extension])) + { + $header .= 'include_once "'.$this->extensions_dir."/smarttemplate_extension_$extension.php\";\n"; + $this->extension_tagged[$extension] = true; + } + if (!strlen($extension_var)) + { + $code = "<?php\n$else"."if (smarttemplate_extension_$extension() $cmp $val) {\n?>\n"; + } + elseif (substr($extension_var, 0, 1) == '"') + { + $code = "<?php\n$else"."if (smarttemplate_extension_$extension($extension_var) $cmp $val) {\n?>\n"; + } + elseif (strpos($extension_var, ',')) + { + list($tag, $addparam) = explode(',', $extension_var, 2); + list($block, $skalar) = $this->var_name($extension_var); + if (preg_match('/^([a-zA-Z_]+)/', $addparam, $match)) + { + $nexttag = $match[1]; + list($nextblock, $nextskalar) = $this->var_name($nexttag); + $addparam = substr($addparam, strlen($nexttag)); + $code = "<?php\n$else"."if (smarttemplate_extension_$extension(\$$block"."['$skalar'],\$$nextblock"."['$nextskalar']"."$addparam) $cmp $val) {\n?>\n"; + } + else + { + $code = "<?php\n$else"."if (smarttemplate_extension_$extension(\$$block"."['$skalar'],$addparam) $cmp $val) {\n?>\n"; + } + } + else + { + list($block, $skalar) = $this->var_name($extension_var); + $code = "<?php\n$else"."if (smarttemplate_extension_$extension(\$$block"."['$skalar']) $cmp $val) {\n?>\n"; + } + $page = str_replace($var[0][$cnt], $code, $page); + } + } + // Replace Scalars if (preg_match_all('/'.$this->left_delimiter.'([a-zA-Z0-9_. >]+)'.$this->right_delimiter.'/', $page, $var)) *************** *** 287,291 **** } - // Replace Translations if (preg_match_all('/<"([a-zA-Z0-9_.]+)">/', $page, $var)) --- 350,353 ---- *************** *** 299,305 **** } - // Include Extensions - $header = ''; if (preg_match_all('/'.$this->left_delimiter.'([a-zA-Z0-9_]+):([^}]*)'.$this->right_delimiter.'/', $page, $var)) { --- 361,365 ---- |