问鼎社区_成都问鼎科技官方论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1588|回复: 0

ecshop中truncate修改

[复制链接]
发表于 2014-3-4 23:28:20 | 显示全部楼层 |阅读模式
ecshop中truncate修改
在使用ecshop是,发现在模板中使用truncate的时候,默认都会输出三个点表示省略。但是在smarty中我们可以在truncate中设置参数以改变默认的三个点。但是这种方法在ecshop中没有效果。难道,ecshop重新封装的smarty库和原本的不一样。
查看ecshop目录下的temp目录下的complied目录下的编译后的文件,发现,编译后truncate会转换为sub_str函数的调用。
在lib_base.php我们可以发现该函数的定义:
function sub_str($str, $length = 0, $append = true)
第一个参数表示:要被截取的字符串
第二个参数则表示:要截取的长度
第三个表示:是否在截取后的字符串后面附加省略号,默认情况始终会显示省略号的。
修改方法:
      1:修改$append的默认值,使得默认情况下不会输出省略号。
      2:修改sub_str函数的
         if ($append && $str != $newstr)
   {
     $newstr .= '---';
   }
   让默认输出为其它的字符串。
      3:在默认文件中通过参数控制输出的字符串
           打开cls_template.php文件,查看get_val($val)函数。
           在616行我们可以看到
                     case 'truncate':
                        $p = 'sub_str(' . $p . ",$s[1])";
                        break;  
           这里就是解析模板文件中truncate的地方!在这里我们可以看最终该函数调用的就是lib_base.php中的sub_str函数,但是这里只提供了两个参数,第三个参数是默认的,因此默认情况只要使用的truncate函数则都为加上省略号。
           在这里往上看,在switch上面一行:
            $s = explode(':', $mod);
            这句是分割字符串,如果我们在模板文件中使用:{$str|truncate:20:'***'}
            则$mod就是|后面的字符串了。
            则:$s[1]   表示的是要解决的字符串长度 既20
                $s[2]   表示的是默认要加的字符创了。
         
            但是,在ecshop的程序中,只是用了长度参数,并没有使用默认连接的字符串函数。
           修改方法:
      a:修改cls_template.php函数,修改get_val函数,第616行为:
        $p = 'sub_str(' . $p . ",$s[1],$s[2])";   
      b: 修改lib_base.php文件的sub_str函数:
                 function sub_str($str, $length = 0, $appendstr = '...',$append = true)
                 {   
    ....
    if ($append && $str != $newstr)
    {
      $newstr .= $appendstr;
    }
           ....
   }
      c:   模板文件使用:
                  {$str|truncate:20:'***'}

#二次开发

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|手机版|问鼎社区  

GMT+8, 2020-3-29 16:58 , Processed in 0.284597 second(s), 23 queries .

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表