如何优雅的学习WHMCS主题
WHMCS 简介
WHMCS 是一套国外流行的域名主机管理软件,跟国内众所周知的 IDCSystem 一样,主要在用户管理、财务管理、域名接口、服务器管理面板接口等方面设计的非常人性化。全面支持域名注册管理解析,主机开通管理,VPS 开通管理和服务器管理的一站式管理软件,是IDC行业主机商所钟爱的财务系统之一,目前已经被越来越多的中国站长们所熟悉和了解。
这段时间有机会接触 WHMCS,本以为很麻烦,但当你熟练掌握了一套程序模板的制作方法后,再看其他程序一下就可以抓住本质。WHMCS 模板同 WordPress 模板制作,最重要的就是模板标签调用,这些标签不需要记,每次使用都可以像查字典一样去找对应的即可,然后把标签放置在静态页面中替换删减。
WHMCS 程序是收费程序,国内代理一般200多元就可以购买,但 IDC 行业一般主机商不会省这个钱。当然国人的力量是无穷的!现在百度搜 x版的 WHMCS 也可以拿来练手。
WHMCS 模板目录文件说明
下面是WHMCS程序常用到的模板文件,这里记录下来以备使用:
常规模板(/templates/目录):
- header.tpl – 公用头部
- footer.tpl – 公用页脚
- homepage.tpl – 网站首页
- announcements.tpl – 公告中心
- viewannouncement.tpl – 公告内容页
- knowledgebase.tpl – 帮助中心首页
- knowledgebasecat.tpl – 帮助分类页
- knowledgebasearticle.tpl – 帮助文章页
- downloads.tpl – 资源中心页面,列出资源分类
- downloadscat.tpl – 资源分类页面,列出资源
- serverstatus.tpl – 服务器状态
- domainchecker.tpl – 域名注册(单个域名搜索)
- bulkdomainchecker.tpl – 批量域名搜索
- bulkdomaintransfer.tpl – 批量域名转入
- clientregister.tpl – 会员注册
- login.tpl – 登录页面,包括会员中心页面
- logout.tpl – 注销页面
- pwreset.tpl – 重置密码页面
- pwresetvalidation.tpl – 重置密码验证页面
- clientareahome.tpl – 会员中心登录后首页
- clientareadetails.tpl – 我的资料
- clientareacontacts.tpl – 联系人子账户
- clientareaaddcontact.tpl – 新增联系人
- clientareachangepw.tpl – 修改密码
- clientareaproducts.tpl – 我的产品页面
- clientareaproductdetails.tpl – 产品详情页面
- upgrade.tpl – 产品升级页面
- upgradesummary.tpl – 产品升级页面2
- clientareadomains.tpl – 我的域名界面
- clientareadomaindetails.tpl – 域名详情页
- clientareadomaindns.tpl – 域名解析界面
- clientareadomaincontactinfo.tpl – 域名注册人信息
- clientareadomainregisterns.tpl – 注册域名服务器
- clientareadomainrenew.tpl – 域名续费
- clientareainvoices.tpl – 账单列表
- viewinvoice.tpl – 查看账单详情
- supportticketslist.tpl – 支持单列表
- supportticketsubmit-stepone.tpl – 支持单部门选择
- supportticketsubmit-steptwo.tpl – 提交支持单页面
- supportticketsubmit-confirm.tpl – 支持单提交成功
- viewticket.tpl -查看TK
- affiliatessignup.tpl – 推介赚钱激活帐号页面
- affiliates.tpl – 推介赚钱页面
- banned.tpl – IP被禁止之后的警告页面
- forwardpage.tpl – 选择支付方式之后付款跳转页面
- masspay.tpl – 批量付款页面
- clientareaaddfunds.tpl – 账户充值页面
订单模板(/templates/orderforms/目录):
- products.tpl- 列出产品分类和产品
- adddomain.tpl –域名注册订单的第一步
- addons.tpl – 列出用户可以在登陆时为现有的主机方案订购的插件
- domainrenewals.tpl – 列出客户账户中的域名,允许提前订购备件部分。
- configureproductdomain.tpl – 产品的域名选择
- domainoptions.tpl –模板用来显示域名可用性检查结果。
- configproduct.tpl – 产品添加到购物车之前设置产品的账单周期、可设置选项、客户区域
- configuredomains.tpl – 选择域名插件,完成客户区域的要求和客户域名服务器
- ordersummary.tpl – 用于在订购过程中显示购物车目录和产品总结
- viewcart.tpl – 显示购物车目录和结账过程
- login.tpl – 用于现有用户的登陆
- complete.tpl – 此页面在结账过程的最后出现
有了这些文件目录,再研究几个模板标签,或者去 WHMCS官网 看下教程,就距离WHMCS模板制作的高手不远了。
扒下别人的 WHMCS 主题
开始工作
首先,建议使用 Chrome 来辅助你的工作,因为 Chrome 查看源码十分方便。 假设一个网站叫 www.fuckwhmcs.com ,打开 Chrome 查看目标网站的源码,或在网站前加上 view-source:
然后找到类似这样的css或者js。
<link href="/templates/NeWorld-New/assets/css/all.min.css?4d3362" rel="stylesheet">
<link href="/templates/NeWorld-New/assets/css/main.css?1" rel="stylesheet">
<link href="/templates/NeWorld-New/assets/css/custom.css?70" rel="stylesheet">
通过解析这段可以知道这个 WHMCS 使用的模版名字叫 NeWorld-New 。
需要确认对方的网站有没有做防护,如果目标网站没有使用 CloudFlare 你就可以愉快的祭出脚本了。
wget 脚本
我们假设要扒的主题叫 Sample (请注意,网站应该是类似 www.fuckwhmcs.com/templates/Sample 最后斜杠必须去除。 )
#!/bin/bash
read -p "请输入网站: " website
echo -e "\n"
echo "网站为: $website"
wget "$website/3dsecure.tpl"
wget "$website/affiliates.tpl"
wget "$website/affiliatessignup.tpl"
wget "$website/announcements.tpl"
wget "$website/banned.tpl"
wget "$website/bulkdomainmanagement.tpl"
wget "$website/clientareaaddcontact.tpl"
wget "$website/clientareaaddfunds.tpl"
wget "$website/clientareacancelrequest.tpl"
wget "$website/clientareachangepw.tpl"
wget "$website/clientareacontacts.tpl"
wget "$website/clientareacreditcard.tpl"
wget "$website/clientareadetails.tpl"
wget "$website/clientareadomainaddons.tpl"
wget "$website/clientareadomaincontactinfo.tpl"
wget "$website/clientareadomaindetails.tpl"
wget "$website/clientareadomaindns.tpl"
wget "$website/clientareadomainemailforwarding.tpl"
wget "$website/clientareadomaingetepp.tpl"
wget "$website/clientareadomainregisterns.tpl"
wget "$website/clientareadomains.tpl"
wget "$website/clientareaemails.tpl"
wget "$website/clientareahome.tpl"
wget "$website/clientareainvoices.tpl"
wget "$website/clientareaproductdetails.tpl"
wget "$website/clientareaproducts.tpl"
wget "$website/clientareaquotes.tpl"
wget "$website/clientareasecurity.tpl"
wget "$website/clientregister.tpl"
wget "$website/configuressl-complete.tpl"
wget "$website/configuressl-stepone.tpl"
wget "$website/configuressl-steptwo.tpl"
wget "$website/contact.tpl"
wget "$website/contactaccessdenied.tpl"
wget "$website/creditcard.tpl"
wget "$website/downloaddenied.tpl"
wget "$website/downloads.tpl"
wget "$website/downloadscat.tpl"
wget "$website/footer.tpl"
wget "$website/forwardpage.tpl"
wget "$website/header.tpl"
wget "$website/homepage.tpl"
wget "$website/index.php"
wget "$website/invoicepdf.tpl"
wget "$website/knowledgebase.tpl"
wget "$website/knowledgebasearticle.tpl"
wget "$website/knowledgebasecat.tpl"
wget "$website/login.tpl"
wget "$website/logintwofa.tpl"
wget "$website/logout.tpl"
wget "$website/managessl.tpl"
wget "$website/markdown-guide.tpl"
wget "$website/masspay.tpl"
wget "$website/pwreset.tpl"
wget "$website/pwresetvalidation.tpl"
wget "$website/quotepdf.tpl"
wget "$website/serverstatus.tpl"
wget "$website/supportticketslist.tpl"
wget "$website/supportticketsubmit-confirm.tpl"
wget "$website/supportticketsubmit-customfields.tpl"
wget "$website/supportticketsubmit-kbsuggestions.tpl"
wget "$website/supportticketsubmit-stepone.tpl"
wget "$website/supportticketsubmit-steptwo.tpl"
wget "$website/theme.yaml"
wget "$website/ticketfeedback.tpl"
wget "$website/twitterfeed.tpl"
wget "$website/unsubscribe.tpl"
wget "$website/upgrade.tpl"
wget "$website/upgradesummary.tpl"
wget "$website/viewannouncement.tpl"
wget "$website/viewemail.tpl"
wget "$website/viewinvoice.tpl"
wget "$website/viewquote.tpl"
wget "$website/viewticket.tpl"
wget "$website/whois.tpl"
echo "主文件下载完毕,开始下载其他文件。"
mkdir includes
cd includes
wget "$website/includes/alert.tpl"
wget "$website/includes/breadcrumb.tpl"
wget "$website/includes/captcha.tpl"
wget "$website/includes/head.tpl"
wget "$website/includes/index.php"
wget "$website/includes/linkedaccounts.tpl"
wget "$website/includes/modal.tpl"
wget "$website/includes/navbar.tpl"
wget "$website/includes/pageheader.tpl"
wget "$website/includes/panel.tpl"
wget "$website/includes/pwstrength.tpl"
wget "$website/includes/sidebar.tpl"
wget "$website/includes/subheader.tpl"
wget "$website/includes/tablelist.tpl"
wget "$website/includes/verifyemail.tpl"
echo "全部下载完毕。"
下载脚本:备用网盘下载
新建一个文件夹将 wget 脚本放进文件夹里,然后 sh Whmcs.sh
运行脚本。脚本跑完后,你会惊喜的发现,文件出现在了文件夹里面。接下来就要开始进行css和js的查错以及文件的查缺补漏了。
css, js和其他
在Chrome中直接将网页另存为到电脑可以减少很多的工作。将扒到的主题上传到网站,然后打开Chrome的开发者工具。
Failed to load resource: the server responded with a status of 404 (Not Found)
Scripts.min.js
找到类似这样的404错误,可以看见文件的路径。将你另存为的网页中的对应内容上传即可。 如果没有,打开原网站的对应路径下载即可。
查缺补漏
测试你所有能打开的链接,如果出现了异常,前往WHMCS的后台查看错误日志。如果是tpl缺失,比如includes/faindex/faindex.tpl,那么就前往 www.fuckwhmcs.com/templates/Sample/includes/faindex/faindex.tpl 不出意外文件会自动下载下来,之后上传到对应路径即可。
到此主题基本就扒完了。虽然这不是好行为,但是确实很多站长疏于防护。在此建议还是一定要做好主题的防护,不然花好多钱买的主题就这样被别人扒走总是心疼的啊(((
扒下别人的 WHMCS 购物车主题
过程同上
#!/bin/bash
read -p "请输入网站: " website
echo -e "\n"
echo "网站为: $website"
wget "$website/adddomain.tpl"
wget "$website/addons.tpl"
wget "$website/checkout.tpl"
wget "$website/common.tpl"
wget "$website/complete.tpl"
wget "$website/configuredomains.tpl"
wget "$website/configureproduct.tpl"
wget "$website/configureproductdomain.tpl"
wget "$website/domainoptions.tpl"
wget "$website/domainregister.tpl"
wget "$website/domainrenewals.tpl"
wget "$website/domaintransfer.tpl"
wget "$website/error.tpl"
wget "$website/fraudcheck.tpl"
wget "$website/index.php"
wget "$website/linkedaccounts.tpl"
wget "$website/ordersummary.tpl"
wget "$website/products.tpl"
wget "$website/sidebar-categories.tpl"
wget "$website/sidebar-categories-collapsed.tpl"
wget "$website/theme.yaml"
wget "$website/thumbnail.gif"
wget "$website/viewcart.tpl"
echo "全部下载完毕。"
扒皮原理描述
tpl 文件,是用 smarty 和 html 编写的模板主文件。
WHMCS 的主题有个优点也是死穴,是任何一个模版拿到的值一样。这也就说明,任何一个模版,都是基于 WHMCS 本身的值来的,就算 hook 也一样。那么既然都基于 WHMCS 本身的值,那就带来一个突破点,可以通过模版的输出反推出模版的tpl文件。所有主题都逃不开 header 和 footer ,产品列表什么的也逃不开 tablelist ,验证邮件逃不开 verifyemail。而在反推过程中最难的不过也就这两个。通过阅读网页源码,找出明显是遍历得到的部分,即可反推出如何遍历进而得到整个模版。
参考模板
附上几个 WHMCS 模板作为学习参考: