熟悉织梦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'
本站部分文章搜集整理于互联网或者网友提供,如有侵权请联系站长
如若转载,请注明出处:https://htmlbk.com/pbootcms/1837.html
温馨提示:该文档最后一次修改时间为2024-07-08 11:23:46,请注意相关的内容是否还可用!