本帖最后由 tonygege 于 2010-4-11 21:09 编辑
本人二次开发UCHOME中,发现的几点疑问:
- function_template.php文件中 parse_template函数解析模板时,会出现如果if loop嵌套超过6层,则会替换失败的问题
- for($i = 0; $i < 6; $i++) {
- $temp_template = $template;
- $template = preg_replace("/\{loop\s+(\S+)\s+(\S+)\}(.+?)\{\/loop\}/ies", "stripvtags('<?php if(is_array(\\1)) { foreach(\\1 as \\2) { ?>','\\3<?php } } ?>')", $template);
- $template = preg_replace("/\{loop\s+(\S+)\s+(\S+)\s+(\S+)\}(.+?)\{\/loop\}/ies", "stripvtags('<?php if(is_array(\\1)) { foreach(\\1 as \\2 => \\3) { ?>','\\4<?php } } ?>')", $template);
- $template = preg_replace("/\{if\s+(.+?)\}(.+?)\{\/if\}/ies", "stripvtags('<?php if(\\1) { ?>','\\2<?php } ?>')", $template);
- }
复制代码 建议修改为以下,这样可以在替换无变化时,不需要再正则替换了:
- while(true) {
- $temp_template = $template;
- $template = preg_replace("/\{loop\s+(\S+)\s+(\S+)\}(.+?)\{\/loop\}/ies", "stripvtags('<?php if(is_array(\\1)) { foreach(\\1 as \\2) { ?>','\\3<?php } } ?>')", $template);
- $template = preg_replace("/\{loop\s+(\S+)\s+(\S+)\s+(\S+)\}(.+?)\{\/loop\}/ies", "stripvtags('<?php if(is_array(\\1)) { foreach(\\1 as \\2 => \\3) { ?>','\\4<?php } } ?>')", $template);
- $template = preg_replace("/\{if\s+(.+?)\}(.+?)\{\/if\}/ies", "stripvtags('<?php if(\\1) { ?>','\\2<?php } ?>')", $template);
- //如果替换无变化,则退出循环
- if($temp_template == $template){
- break;
- }
- }
复制代码 - script_ajax.js文件中ajaxget函数针对ajaxerror或ajaxok的返回时,evalscript有效执行时的返回语法是怎样的?我尝试过这样写
- <script>alert(1);</script><ajaxerror>
复制代码 却不成功。
- function evalscript(s) {
- if(s.indexOf('<script') == -1) return s;
- var p = /<script[^\>]*?>([^\x00]*?)<\/script>/ig;
- var arr = new Array();
- while(arr = p.exec(s)) {
- var p1 = /<script[^\>]*?src="([^\>]*?)"[^\>]*?(reload="1")?(?:charset="([\w\-]+?)")?><\/script>/i;
- var arr1 = new Array();
- arr1 = p1.exec(arr[0]);
- if(arr1) {
- appendscript(arr1[1], '', arr1[2], arr1[3]);
- } else {
- p1 = /<script(.*?)>([^\x00]+?)<\/script>/i;
- arr1 = p1.exec(arr[0]);
- //获取字符集
- var re = /charset="([\w\-]+?)"/i;
- var charsetarr = re.exec(arr1[1]);
- appendscript('', arr1[2], arr1[1].indexOf('reload=') != -1, charsetarr[1]);
- }
- }
- return s;
- }
复制代码 - 用户头像处理时,如何规定头像middle的长宽比,现在官方给出的camera.swf,用户是可以随意调整middle头像的长宽比,这样用户的头像显示尺寸就千奇百怪了。建议开放规定长宽比的配置。
|