熟悉织梦CMS的小伙伴一定知道织梦有一种自定义标签的写法,如下:

{dede:field.字段名 function='test_fun(@me)'/}

上面标签作用就是把该标签的内容用自定义的test_fun进行处理,这种方法能够很方便地处理某些数据

像博主这种“拿来主义”,必须把这姿势弄到PbootCMS上,于是博主稍加思索,一顿骚操作后实现了该功能

该功能目前已经集成到PbootCMS二次开发版v1.5.7中,用法如下:

1、自定义函数文件创建

因为该文件设定为更新不覆盖,所以该文件不会通过在线更新推送,需要用户手动进行创建

创建方法:在站点根目录/config/文件夹下新建function.php文件,文件默认内容如下:

<?php
/**
 * @copyright (C)2022 LiuXiaoBai
 * @author LiuXiaoBai
 * @email 1144842311@qq.com
 * @date 2022年10月23日
 *  个人扩展函数可编写到本文件中,升级不会覆盖
 */

// 测试个人扩展函数
function test($str){
    return '哎呦真的不错哟~';
}
2、模板标签中使用函数

例子使用自定义函数隐藏手机号中间4位


2.1先在config/function.php文件中编写隐藏手机号中间4位的函数

// 隐藏手机号中间4位
function test1($phone){
    return substr_replace($phone, '****', 3, 4);
}

然后在相关标签中使用

{pboot:list}

[list:ext_phone fun=test1]

{/pboot:list}


2.2、如果函数有多个参数需要调用,则使用:

[list:ext_phone fun=test1('1',###)]

表示test函数传入两个参数,每个参数用逗号分割,这里第一个参数是1,第二个参数是前面要输出ext_phone的标签内容,因为该标签内容是第二个参数,因此需要用###标识位置,你可以理解为###就是该标签自身内容

注意:多个参数之间不能存在空格,否则会被系统过滤,例如写成test1('1', ###),这里###前面存在空格,就会被过滤为test1('1'),也就是空格后面的参数会丢失,这是一个需要注意的地方


2.3、如果前面输出的标签内容在后面定义的函数的第一个参数,则可以直接使用:

[list:ext_phone fun=test1('1')]

虽然也可以使用:

[list:ext_phone fun=test1(###,'1')]

但完全没用这个必要


2.4、还可以支持多个函数过滤,多个函数之间用“|”分割即可,理论上无数量限制,例如:

[list:ext_phone fun=test|test2|test...]

或者

[list:ext_phone fun=test|test2('1',###)|test...]

函数会按照从左到右的顺序依次调用。


2.5、除了自定义函数外,还可以直接使用内置函数,例如:

[list:ext_phone fun=md5]

[list:ext_phone fun=substr_replace(###,'****',3,4)]

[list:ext_phone fun=md5|strtoupper|substr(0,3)]

......

2.6、理论上大部分标签均可以使用fun来调节,不限于上方例子,更多玩出花的用法还需自行探索,如果你发现了有趣的玩法欢迎投稿分享......

安全起见,函数调用黑名单暂定如下,调用下方函数将会拦截并弹出拦截信息:

特殊函数

'phpinfo','symlink','readlin','getenv','putenv','dl','ini_get','ini_set','ini_alter','ini_restore','is_numeric','in_array','parse_str',

'extract','mb_parse_str','import_request_variables','glob','get_defined_vars','get_defined_constants','get_defined_functions','get_include_files'


代码执行函数

'eval','assert','preg_replace','create_function','call_user_func'


命令执行函数

'exec','passthru','proc_open','shell_exec','system','popen'


包含函数

'require','include','require_once','include_once'


文件操作函数

'copy','file_get_contents','file_put_contents','file','fopen','move_uploaded_file','readfile','rename','rmdir','unlink','delete'


内置公共函数

'create_dir','create_file','path_delete','dir_copy','upload','handle_upload','zip','unzip'

THE END

非特殊说明,本站所有文章均为博主原创

如若转载,请注明出处:https://www.htmlbk.com/pbootcms/1837.html

温馨提示:该文档最后一次修改时间为2022-11-08 09:46:46,请注意相关的内容是否还可用!