template.fun.php 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194
  1. <?php
  2. //dezend by qq784939922
  3. function myparseTemplate($tplfile, $templateid, $tpldir)
  4. {
  5. global $timestamp;
  6. global $mytemplates;
  7. $nest = 6;
  8. $file = basename($tplfile, '.html');
  9. $objfile = MYMPS_DATA . ('/templates/' . $templateid . '_' . $file . '.tpl.php');
  10. if (!@$fp = fopen($tplfile, 'r')) {
  11. exit('Current template file \'./' . $tpldir . '/' . $file . '.html\' not found or have no access!');
  12. }
  13. $template = @fread($fp, filesize($tplfile));
  14. fclose($fp);
  15. $var_regexp = "((\\\$[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*)(\\[[a-zA-Z0-9_\\-\\.\"\\'\\[\\]\$\x7f-\xff]+\\])*)";
  16. $const_regexp = "([a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*)";
  17. $mytemplates = array();
  18. for ($i = 1; $i <= 3; $i++) {
  19. if (strexists($template, '{mytemplate')) {
  20. $template = preg_replace('/[
  21. ]*\\{mytemplate\\s+([a-z0-9_]+)\\}[
  22. ]*/ies', 'loadmytemplate(\'\\1\')', $template);
  23. }
  24. }
  25. $template = preg_replace('/([
  26. ]+) +/s', '\\1', $template);
  27. $template = preg_replace('/\\<\\!\\-\\-\\{(.+?)\\}\\-\\-\\>/s', '{\\1}', $template);
  28. $template = str_replace('{LF}', '<?="\\n"?>', $template);
  29. $template = preg_replace("/\\{(\\\$[a-zA-Z0-9_\\[\\]\\'\"\$\\.\x7f-\xff]+)\\}/s", '<?=\\1?>', $template);
  30. $template = preg_replace('/' . $var_regexp . '/es', 'addquote(\'<?=\\1?>\')', $template);
  31. $template = preg_replace('/\\<\\?\\=\\<\\?\\=' . $var_regexp . '\\?\\>\\?\\>/es', 'addquote(\'<?=\\1?>\')', $template);
  32. $headeradd = '';
  33. if (!empty($mytemplates)) {
  34. $headeradd .= '
  35. 0
  36. ';
  37. foreach ($mytemplates as $fname) {
  38. $headeradd .= '|| chktplrefresh(\'' . $tplfile . '\', \'' . $fname . '\', ' . $timestamp . ', \'' . $templateid . '\', \'' . $tpldir . '\')
  39. ';
  40. }
  41. $headeradd .= ';';
  42. }
  43. $template = '<? if(!defined(\'IN_MYMPS\')) exit(\'Access Denied\');
  44. /*Mymps分类信息系统
  45. 官方网站:http://www.mymps.com.cn*/?>
  46. ' . $template;
  47. $template = preg_replace('/[
  48. ]*\\{mympstag_([a-z0-9_]+)\\}[
  49. ]*/is', '
  50. <?php echo custom(\'\\1\'); ?>
  51. ', $template);
  52. $template = preg_replace('/[
  53. ]*\\{template\\s+([a-z0-9_]+)\\}[
  54. ]*/is', '
  55. <?php include mymps_tpl(\'\\1\'); ?>
  56. ', $template);
  57. $template = preg_replace('/[
  58. ]*\\{php\\s+(.+?)\\}[
  59. ]*/ies', 'stripvtags(\'<?php \\1 ?>\',\'\')', $template);
  60. $template = preg_replace('/[
  61. ]*\\{php\\}\\s*(\\<\\!\\-\\-)*(.+?)(\\-\\-\\>)*\\s*\\{\\/php\\}[
  62. ]*/ies', 'stripvtags(\'<?php \\2 ?>\',\'\')', $template);
  63. $template = preg_replace('/[
  64. ]*\\{echo\\s+(.+?)\\}[
  65. ]*/ies', 'stripvtags(\'<? echo \\1; ?>\',\'\')', $template);
  66. $template = preg_replace('/([
  67. ]*)\\{if\\s+(.+?)\\}([
  68. ]*)/ies', 'stripvtags(\'\\1<? if(\\2) { ?>\\3\')', $template);
  69. $template = preg_replace('/([
  70. ]*)\\{elseif\\s+(.+?)\\}([
  71. ]*)/ies', 'stripvtags(\'\\1<?php } elseif(\\2) { ?>\\3\',\'\')', $template);
  72. $template = preg_replace('/([
  73. ]*)\\{else\\}([
  74. ]*)/is', '\\1<?php } else { ?>\\2', $template);
  75. $template = preg_replace('/\\{\\/if\\}/i', '<?php } ?>', $template);
  76. $template = preg_replace('/[
  77. ]*\\{loop\\s+(\\S+)\\s+(\\S+)\\}[
  78. ]*/ies', 'stripvtags(\'<?php if(is_array(\\1)){foreach(\\1 as \\2) { ?>\')', $template);
  79. $template = preg_replace('/[
  80. ]*\\{loop\\s+(\\S+)\\s+(\\S+)\\s+(\\S+)\\}[
  81. ]*/ies', 'stripvtags(\'<?php if(is_array(\\1)){foreach(\\1 as \\2 => \\3) { ?>\')', $template);
  82. $template = preg_replace('/([
  83. ]*)\\{loopelse\\}([
  84. ]*)/is', '\\1<?php }} else {{ ?>\\2', $template);
  85. $template = preg_replace('/\\{\\/loop\\}/i', '<?php }} ?>', $template);
  86. $template = preg_replace('/\\{' . $const_regexp . '\\}/s', '<?=\\1?>', $template);
  87. $template = preg_replace('/ \\?\\>[
  88. ]*\\<\\? /s', ' ', $template);
  89. $template = str_replace('$db_mymps', '{$db_mymps}', $template);
  90. if (!@$fp = fopen($objfile, 'w')) {
  91. exit('Directory \'/data/templates/\' not found or have no access!');
  92. }
  93. flock($fp, 2);
  94. fwrite($fp, $template);
  95. fclose($fp);
  96. }
  97. function loadmytemplate($file, $templateid = 0, $tpldir = '')
  98. {
  99. global $mytemplates;
  100. $tpldir = $tpldir ? $tpldir : TPLDIR;
  101. $templateid = $templateid ? $templateid : TEMPLATEID;
  102. $tplfile = MYMPS_ROOT . '/template/' . $tpldir . '/' . $file . '.html';
  103. if ($templateid != 1 && !file_exists($tplfile)) {
  104. $tplfile = MYMPS_ROOT . '/template/default/' . $file . '.html';
  105. }
  106. $content = @implode('', file($tplfile));
  107. $mytemplates[] = $tplfile;
  108. return $content;
  109. }
  110. function transamp($str)
  111. {
  112. $str = str_replace('&', '&amp;', $str);
  113. $str = str_replace('&amp;amp;', '&amp;', $str);
  114. $str = str_replace('\\"', '"', $str);
  115. return $str;
  116. }
  117. function addquote($var)
  118. {
  119. return str_replace('\\"', '"', preg_replace("/\\[([a-zA-Z0-9_\\-\\.\x7f-\xff]+)\\]/s", '[\'\\1\']', $var));
  120. }
  121. function stripvtags($expr, $statement)
  122. {
  123. $expr = str_replace('\\"', '"', preg_replace('/\\<\\?\\=(\\$.+?)\\?\\>/s', '\\1', $expr));
  124. $statement = str_replace('\\"', '"', $statement);
  125. return $expr . $statement;
  126. }
  127. function stripscriptamp($s, $extra)
  128. {
  129. $extra = str_replace('\\"', '"', $extra);
  130. $s = str_replace('&amp;', '&', $s);
  131. return '<script src="' . $s . '" type="text/javascript"' . $extra . '></script>';
  132. }
  133. function stripblock($var, $s)
  134. {
  135. $s = str_replace('\\"', '"', $s);
  136. $s = preg_replace('/<\\?=\\$(.+?)\\?>/', '{$\\1}', $s);
  137. preg_match_all('/<\\?=(.+?)\\?>/e', $s, $constary);
  138. $constadd = '';
  139. $constary[1] = array_unique($constary[1]);
  140. foreach ($constary[1] as $const) {
  141. $constadd .= '$__' . $const . ' = ' . $const . ';';
  142. }
  143. $s = preg_replace('/<\\?=(.+?)\\?>/', '{$__\\1}', $s);
  144. $s = str_replace('?>', '
  145. $' . $var . ' .= <<<EOF
  146. ', $s);
  147. $s = str_replace('<?', '
  148. EOF;
  149. ', $s);
  150. return '<?
  151. ' . $constadd . '$' . $var . ' = <<<EOF
  152. ' . $s . '
  153. EOF;
  154. ?>';
  155. }
  156. function chktplrefresh($maintpl, $subtpl, $timecompare, $templateid, $tpldir)
  157. {
  158. global $mymps_mymps;
  159. if (empty($timecompare) || $mymps_mymps['tplrefresh'] == 1) {
  160. if ($timecompare < @filemtime($subtpl)) {
  161. myparsetemplate($subtpl, $templateid, $tpldir);
  162. return true;
  163. }
  164. }
  165. return false;
  166. }
  167. if (!defined('IN_MYMPS')) {
  168. exit('Access Denied');
  169. }
  170. ?>