修正 WHMCS 定单模板使之主动添补选项内容

WHMCS 下单 Dedicated/VPS Server 产品默认要填几个选项,包括设置主机名、密码、NS 地址,用户体验很是不好,徒增用户困扰与麻烦。研究了下如何自动填充内容,本想去掉选项验证,提交后再生成内容值。但似乎不太容易要编辑核心文件,强行去除改动太大,还是直接在页面生成好了。

先介绍 WHMCS 产品订购页面的模板文件路径:WHMCS根目录/templates/orderforms(目录下有多个样式主题,默认使用standard_cart),里面的模板文件所对应各个页面如下。

为避免后续升级程序可能丢失所做的修改,建议创建自定义主题使用(不用创建一个完整主题,要修改哪个页面就创建哪个模板文件,页面继承使用父模板文件)。

创建自定义主题目录,假设名称为 custom_cart。红色字符为 Web 目录路径自行修改。

拷贝要修改的模板文件到自定义主题目录下,例如要修改 configureproduct.tpl 这个模板页面。

主机名这里用uniqid()函数生成微秒级时间戳,考虑多线程和基于系统时间可能影响唯一性(实际重复可能性极低,uniqid()时间戳精确到百万分之一秒), 在字符串前面添加两位随机数(由mt_rand(10,99)生成)。添加蓝色参数设置字段不可编辑和禁用浏览器自动完成功能。

如果想用 WHMCS 内置的 Smarty 模板系统保留变量生成随机数,可以用{$smarty.now}生成 UNIX 时间戳(精确到秒,配合date_format还可转换友好时间格式)。

由于密码需考虑不可预测性,也要尽可能随机复杂,所以不能用时间戳生成。可以通过随机+散列+截取函数生成,例如由特定范围随机数转换为 md5 字符串,再从其中截取 12 位字符。

如果要生成复杂一些的(包含大写字母和特殊字符),可以用str_shuffle()函数随机打乱预设字符(其随机算法因 PHP 版本而有不同, PHP 7.1 开始由默认的 libc rand 改为了 Mersenne twister),再从其中截取所需长度的字符串。这种方法生成的密码每个字符只会出现一次(其中删除了容易混淆的字符),若要增加可能性可以重复添加预设字符。

上面两种都是比较简单的密码生成方法,可以满足一般程度的安全要求。若要追求更安全的随机值,可以使用random_bytes()或openssl_random_pseudo_bytes()函数生成。前者要求 PHP 7,后者要求 PHP 5。

修改方法和之前一样,模板文件里找到密码 input 元素,内容值里设置 PHP 密码生成函数。

未经允许不得转载:主机宝贝 » 修正 WHMCS 定单模板使之主动添补选项内容

评论 抢沙发

评论前必须登录!