PbootCMS二次开发版在标签中调用自定义函数

原创 admin  2022-10-25 15:00  阅读 69 次

熟悉织梦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 [email protected]  * @date 2022年10月23日
 *  个人扩展函数可编写到本文件中,升级不会覆盖
 */

// 测试个人扩展函数
function test($str){
    return '哎呦真的不错哟~';
}

2、模板标签中使用函数

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

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

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

然后在相关标签中使用

{pboot:list}

[list:ext_phone fun=test1]

{/pboot:list}

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

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

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

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

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

虽然也可以使用:

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

但完全没用这个必要

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

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

或者

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

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

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

[list:ext_phone fun=md5]

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

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

......

理论上大部分标签均可以使用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'

来源:https://www.huanp.com/wangzhan/46939.html
声明:欢迎分享本文,转载请保留出处!

发表评论


表情