ecshop中truncate修改
查看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:'***'}
ecshop中truncate的修改
最新推荐文章于 2021-03-11 13:36:00 发布