| 本帖最后由 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头像的长宽比,这样用户的头像显示尺寸就千奇百怪了。建议开放规定长宽比的配置。
 
 |