如何优雅的学习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。

1
2
3
<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 最后斜杠必须去除。 )

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
#!/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的开发者工具。

1
2
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 购物车主题

过程同上

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#!/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 模板作为学习参考:

https://app.box.com/s/56akq63xn03dk1tsa4ls7dvz4fult890

您的支持将鼓励我继续坚持技术分享!
0%