-
- /*
- * ???: 模板解析類
- * ???: 51JS.COM-ZMM
- * ??: 2011.3.1
- * ???: 304924248@qq.com
- * ???: http://www.cnblogs.com/cnzmm/
- * ??: http://bbs.it-home.org
- */
- ??? ??? {
- public $html, $vars, $bTag, $eTag;
- ?? $bFlag='{', $eFlag='}', $pfix='zmm:';
- ??? $??, $file;
- function __construct($vars=array()) {
- !empty($vars) && $this->vars = $vars;
- !empty($GLOBALS['cfg_tag_prefix']) &&
- $this->pfix = $GLOBALS['cfg_tag_prefix'].':';
- $this->bTag = $this->bFlag.$this->pfix;
- $this->eTag = $this->bFlag.'/'.$this->pfix;
- empty(Tags::$vars) && Tags::$vars = &$this->vars;
- }
- ?? ?? LoadTpl($tpl) {
- $this->file = $this->GetTplPath($tpl);
- ??::$file = &$this->file;
- if (is_file($this->file)) {
- if ($this->GetTplHtml()) {
- $this->SetTplTags();
- } else {
- exit('模板文件加載失敗!');
- }
- } else {
- exit('模板文件['.$this->file.']?存?!');
- }
- }
- ??? ?? GetTplPath($tpl) {
- $this->folder = WEBSITE_DIRROOT.
- $GLOBALS['cfg_tpl_root'];
- $this->??? ?????.'/'.$tpl;
- }
- ??? ?? GetTplHtml() {
- $html = self::FmtTplHtml(file_get_contents($this->file));
- if (!empty($html)) {
- $callFunc = Tags::$prefix.'??';
- $this->html = Tags::$callFunc($html, new Template());
- } else {
- exit('模板文件內(nèi)容為空!');
- } true? ?????.
- }
- ?? ?? ?? FmtTplHtml($html) {
- return preg_replace('/(r)|(n)|(t)|(s{2,})/is', '', $html);
- }
- ?? ?? Register($vars=array()) {
- if (is_array($vars)) {
- $this->vars = $vars;
- ??::$vars = &$this->vars;
- }
- }
- ?? ?? Display($bool=false, $name="", $time=0) {
- if (!empty($this->html)) {
- if ($bool && !empty($name)) {
- if (!is_int($time)) $time = 600;
- $cache = ? ??($time);
- $cache->Set($name, $this->html);
- }
- echo $this->html; ???();
- } else {
- exit('模板文件內(nèi)容為空!');
- }
- }
- ?? ?? SetAssign($souc, $info) {
- if (!empty($this->html)) {
- $this->html = str_ireplace ($souc, self::FmtTplHtml($info), $this->html);
- } else {
- exit('模板文件內(nèi)容為空!');
- }
- }
- ??? ?? SetTplTags() {
- $this->SetPanelTags(); $this->SetTrunkTags(); $this->RegHatchVars();
- }
- ??? ?? SetPanelTags() {
- $rule = $this->bTag.'([^'.$this->eFlag.'] )/'.$this-> e???;
- preg_match_all('/'.$rule.'/ism', $this->html, $out_matches);
- $this->TransTag($out_matches, '??'); unset($out_matches);
- }
- ??? ?? SetTrunkTags() {
- $rule = $this->bTag.'(w )s*([^'.$this->eFlag.']*?)' .$this->eFlag.
- '((?:(?!'.$this->bTag.')[Ss]*?|(?R))*)'.$this->eTag.'\1s*'. $this->eFlag;
- preg_match_all('/'.$rule.'/ism', $this->html, $out_matches);
- $this->TransTag($out_matches, '???'); unset($out_matches);
- }
- ??? ?? TransTag($result, $type) {
- if (!empty($result[0])) {
- switch ($type) {
- case 'panel' : {
- for ($i = 0; $i $strTag = ??(' ', $result[1][$i], 2);
- if (strpos($strTag[0], '.')) {
- $itemArg =Explode('.', $result[1][$i], 2);
- $callFunc = ??::$prefix.ucfirst($itemArg[0]);
- if (method_exists('Tags', $callFunc)) {
- $html = Tags::$callFunc(chop($itemArg[1]));
- if ($html !== false) {
- $this->html = str_ireplace($result[0][$i], $html, $this->html);
- }
- }
- } else {
- $rule = '^([^s] )s*([Ss] )$';
- preg_match_all('/'.$rule.'/is', Trim($result[1][$i]), $tmp_matches);
- $callFunc = ??::$prefix.ucfirst($tmp_matches[1][0]);
- if (method_exists('Tags', $callFunc)) {
- $html = Tags::$callFunc($tmp_matches[2][0]);
- if ($html !== false) {
- $this->html = str_ireplace($result[0][$i], $html, $this->html);
- }
- } unset($tmp_matches);
- }
- } ??;
- }
- case '???': {
- for ($i = 0; $i < count($result[0]); $i ) {
- $callFunc = ??::$ prefix.ucfirst($result[1][$i]);
- if (method_exists('Tags', $callFunc)) {
- $html = Tags::$callFunc($result[2][$i], $result[3][$i]);
- $this->html = str_ireplace($result[0][$i], $html, $this->html);
- }
- } ??;
- }
- ???: ??;
- }
- } else {
- false? ?????.
- }
- }
- ??? ?? RegHatchVars() {
- $this->SetPanelTags();
- }
- function __destruct() {}
- }
- ?>
復(fù)代碼
2. ?? ?? ??? : (??? ? ?? ??? ?? ?? ????? ????? ??)
-
- /*
- * ???: 標(biāo)簽解析類
- * ???: 51JS.COM-ZMM
- * ??: 2011.3.2
- * ???: 304924248@qq.com
- * ???: http://www.cnblogs.com/cnzmm/
- * ??: http://bbs.it-home.org
- */
- class ?? {
- static private $attrs=null;
- ?? ?? $file, $vars, $rule, $prefix='TAG_';
- ?? ?? ?? TAG_Syntax($html, $that) {
- $rule = $that->bTag.'ifs ([^'.$that->eFlag.'] )s*'.$ that->eFlag;
- $html = preg_replace('/'.$rule.'/ism', '', $html);
- $rule = $that->bTag.'elseifs ([^'.$that->eFlag.'] )s*'.$that->eFlag;
- $html = preg_replace('/'.$rule.'/ism', '', $html);
- $rule = $that->bTag.'elses*'.$that->eFlag;
- $html = preg_replace('/'.$rule.'/ism', '', $html);
- $rule = $that->bTag.'loops (S )s (S )s*'.$that->eFlag;
- $html = preg_replace('/'.$rule.'/ism', '', $html);
- $rule = $that->bTag.'loops (S )s (S )s (S )s*'.$that->eFlag;
- $html = preg_replace('/'.$rule.'/ism', ' \3) { ?>', $html);
- $rule = $that->eTag.'(if|loop)s*'.$that->eFlag;
- $html = preg_replace('/'.$rule.'/ism', '', $html);
- $rule = $that->bTag.'phps*'.$that->eFlag.'((?:(?!'.
- $that->bTag.')[Ss] *?|(?R))*)'.$that->eTag.'phps*'.$that->eFlag;
- $html = preg_replace('/'.$rule.'/ism', '', $html);
- return self::TAG_Execute($html);
- }
- ?? ?? ?? TAG_List($attr, $html) {
- if (!empty($html)) {
- if (self::TAG_HaveTag($html)) {
- return self::TAG_DealTag($attr, $html, true);
- } else {
- return self::TAG_GetData($attr, $html, true);
- }
- } else {
- exit('標(biāo)簽{list}的內(nèi)容為空!');
- }
- }
- ?? ?? ?? TAG_Data($attr, $html) {
- if (!empty($html)) {
- if (self::TAG_HaveTag($html)) {
- return self::TAG_DealTag($attr, $html, false);
- } else {
- return self::TAG_GetData($attr, $html, false);
- }
- } else {
- exit('標(biāo)簽{data}的內(nèi)容為空!');
- }
- }
- ?? ?? ?? TAG_Execute($html) {
- ob_clean(); ob_start();
- if (!empty(self::$vars)) {
- is_array(self::$vars) &&
- extract(self::$vars, EXTR_OVERWRITE);
- }
- $file_inc = WEBSITE_DIRINC.'/buffer/'.
- md5(uniqid(rand(), true)).'.php';
- if ($fp = fopen($file_inc, 'xb')) {
- fwrite($fp, $html);
- if (fclose($fp)) {
- include($file_inc);
- $html = ob_get_contents();
- } ?? ??($fp);
- } else {
- exit('模板解析文件生成失敗!');
- } ob_end_clean(); @unlink($file_inc);
- $html? ?????.
- }
- ?? ??? ?? TAG_HaveTag($html) {
- $bool_has = false;
- $tpl_ins = ? ???();
- self::$rule = $tpl_ins->bTag.'([^'.$tpl_ins->eFlag.'] )/'.$tpl_ins->eFlag;
- $bool_has = $bool_has || preg_match('/'.self::$rule.'/ism', $html);
- self::$rule = $tpl_ins->bTag.'(w )s*([^'.$tpl_ins->eFlag.']*?)'.$tpl_ins->eFlag.
- '((?:(?!'.$tpl_ins->bTag.')[Ss]*?|(?R))*)'.$tpl_ins->eTag.'\1s*'. $tpl_ins->eFlag;
- $bool_has = $bool_has || preg_match('/'.self::$rule.'/ism', $html);
- ?? ??($tpl_ins);
- $bool_has? ?????.
- }
- ?? ??? ?? TAG_DealTag($attr, $html, $list) {
- preg_match_all('/'.self::$rule.'/ism', $html, $out_matches);
- if (!empty($out_matches[0])) {
- $child_node = array();
- for ($i = 0; $i $child_node[] = $out_matches[3][$i];
- $html = str_ireplace($out_matches[3][$i], '{-->>child_node_'.$i.'<<--}', $html);
- }
- $html = self::TAG_GetData($attr, $html, $list);
- for ($i = 0; $i < count($out_matches[0]); $i ) {
- $html = str_ireplace('{-->>child_node_'.$i.' <<--}', $child_node[$i], $html);
- }
- preg_match_all('/'.self::$rule.'/ism', $html, $tmp_matches);
- if (!empty($tmp_matches[0])) {
- for ($i = 0; $i < count($tmp_matches[0]); $i ) {
- $callFunc = self ::$prefix.ucfirst($tmp_matches[1][$i]);
- if (method_exists('Tags', $callFunc)) {
- $temp = self::$callFunc($tmp_matches[2][$i], $tmp_matches[3][$i]);
- $html = str_ireplace($tmp_matches[0][$i], $temp, $html);
- }
- }
- }
- unset($tmp_matches);
- }
- unset($out_matches); $html? ?????.
- }
- ?? ??? ?? TAG_GetData($attr, $html, $list=false) {
- if (!empty($attr)) {
- $attr_ins = new Attbt($attr);
- $attr_arr = $attr_ins->attrs;
- if (is_array($attr_arr)) {
- extract($attr_arr, EXTR_OVERWRITE);
- $source = ???_??($source, $column);
- $rule = '[??:s*(w )s*([^]]*?)s*/?]';
- preg_match_all('/'.$rule.'/is', $html, $out_matches);
- $data_str = '';
- $data_ins = ??? DataSql();
- $attr_where = $attr_order = '';
- if (!empty($where)) {
- $where = str_replace(',', ' and ', $where);
- $attr_where = '??'. $???;
- }
- if (!empty($order)) {
- $attr_order = '?? ??'.$order;
- } else {
- $fed_name = '';
- $fed_ins = $data_ins->GetFedNeedle($source);
- $fed_cnt = $data_ins->GetFedCount($fed_ins);
- for ($i = 0; $i $fed_flag = $data_ins->GetFedFlag($fed_ins, $i);
- if (preg_match('/auto_increment/ism', $fed_flag)) {
- $fed_name = $data_ins->GetFedName($fed_ins, $i);
- ??;
- }
- }
- if (!empty($fed_name))
- $attr_order = ''.$fed_name?? ?????.' ??';
- }
- if ($list == true) {
- if (empty($source) &&empty($sql)) {
- exit('標(biāo)簽{list}必須指?source屬性!' );
- }
- $attr_rows = $attr_page = '';
- if ($rows > 0) {
- $attr_rows = ' ?? 0,'.$rows;
- }
- if (!empty($sql)) {
- $data_sql = $sql;
- } else {
- $data_sql = '`'.$source.'`?? *? ?????.
- $attr_where.$attr_order.$attr_rows;
- }
- if ($pages=='true' && !empty($size)) {
- $data_num = $data_ins->GetRecNum($data_sql);
- $page_cnt = ceil($data_num / $size);
- ??? $page;
- if (!isset($page) || $page < 1) $page = 1;
- if ($page > $page_cnt) $page = $page_cnt;
- $data_sql = '``.$source.'`'.$attr_where?? *? ?????.
- $attr_order.' ?? '.($page-1) * $size.','.$size;
- $GLOBALS['cfg_page_curr'] = $???;
- $GLOBALS['cfg_page_prev'] = $??? - 1;
- $GLOBALS['cfg_page_next'] = $??? 1;
- $GLOBALS['cfg_page_nums'] = $page_cnt;
- if (function_exists('list_pagelink')) {
- $GLOBALS['cfg_page_list'] = list_pagelink($page, $page_cnt, 2);
- }
- }
- $data_idx = 0;
- $data_ret = $data_ins->SqlCmdExec($data_sql);
- while ($row = $data_ins->GetRecArr($data_ret)) {
- if ($skip > 0 && !empty($flag)) {
- $data_idx != 0 &&
- $data_idx % $skip == 0 &&
- $data_str .= $flag;
- }
- $data_tmp = $html;
- $data_tmp = str_ireplace('@idx', $data_idx, $data_tmp);
- for ($i = 0; $i $data_tmp = str_ireplace($out_matches[0][$i],
- $row [$out_matches[1][$i]], $data_tmp);
- }
- $data_str .= $data_tmp; $data_idx ;
- }
- } else {
- if (empty($source)) {
- exit('標(biāo)簽{data}必須指?source屬性!');
- }
- $data_sql = '``.$source?? *? ?????.
- '`'.$attr_where.$attr_order;
- $row = $data_ins->GetOneRec($data_sql);
- if (is_array($row)) {
- $data_tmp = $html;
- for ($i = 0; $i $data_val = $row[$out_matches[1][$i]];
- if (empty($out_matches[2][$i])) {
- $data_tmp = str_ireplace($out_matches[0][$i], $data_val, $data_tmp);
- } else {
- $attr_str = $out_matches[2][$i];
- $attr_ins = ? ??($attr_str);
- $func_txt = $attr_ins->attrs['function'];
- if (!empty($func_txt)) {
- $func_tmp = ??('(', $func_txt);
- if (function_exists($func_tmp[0])) {
- eval(' $func_ret ='.str_ireplace('@me',
- '''.$data_val.''', $func_txt))
- $data_tmp = str_ireplace($out_matches[0][$i], $ func_ret, $data_tmp);
- } else {
- exit('調(diào)用了不存??函數(shù)!')
- }
- } else {
- exit('標(biāo)簽設(shè)置屬無(wú)效!' );
- }
- }
- $data_str .= $data_tmp
- }
- }
- unset($data_ins)
- return $data_str; >} else {
- exit('標(biāo)簽設(shè)置屬性無(wú)效!');
- }
- } else {
- exit('沒(méi)有設(shè)置標(biāo)簽屬性!')
- }
- }
- ?? ?? ?? __callStatic($name, $args) {
- exit('標(biāo)簽{'.$name.'}不存?!')
- }
- }
- ?>
-
-
???碼
|