WHMCS是个很出名的IDC供应商管理系统,但是由于是加密程序,很多东西改起来不容易。比如你想做个注册页面,你就没法子做,因为你不知道密码的加密方式。不过有一些东西还是可以自定义的。
自定义首页
由于是加密程序,所以index.php你无法修改,怎么办呢?下面提供几个方案解决这个问题。
子站处理
要么把whmcs放一个子域名,比如user.xx.com
要么把whmcs放一个子目录,或者www.xx.com/user/
但是这两种建议是安装之前想好,否则的话,就要去更新授权了。要去购买的地方提交更改。
默认首页处理
静态首页:直接放index.html,一般这个会是默认首页。
动态首页:修改nginx或者apache服务器的配置文件,让默认首页改为home.php
- # nginx 例子
- server_name sdtclass.com www.sdtclass.com;
- index home.php index.html index.htm index.php default.html default.htm default.php;
如果是虚拟主机,并且是apache服务器的,也可以用.htaccess定义默认首页。
- # .htaccess例子
- Directory Index home.php index.html index.php
重写index.php
有的人不喜欢重写定义首页,比如我。因为潜意识里index才是首页呢。而且WHMCS里,首页也是指向index.php,所以我提供了另一个思路。
保存index.php,然后新建一个index.php,这样可以自定义首页的内容了。但是,,,WHMCS比较新的版本里,很多地址打开都依赖index.php。所以我们需要做一个处理。
比如公告页面的菜单连接是:index.php?rp=/announcements
但是,其实 http://www.sdtclass.com/announcements.php 就可以打开(不用复制了,这是举例)。代码又是加密的,我们又无法修改菜单里的连接,怎么办呢?所以我们只好写个PHP来处理了。
- <?php
- //判断是否有参数
- if($_GET) {
- //rp参数
- $url = $_GET['rp'];
- //判断是否是rp这个参数
- if($url) {
- //重定向
- Header("Location: $url.php");
- exit; // 退出
- }
- }
- ?>
- //如果上面不成立,会输出下面内容。下面是首页内容
测试了可行是可行,发现下载页的不一样,不是download.php,而是downloads.php。于是。。
- <?php
- if($_GET) {
- $url = $_GET['rp'];
- if($url) {
- //判断是否是下载页,如果是则定义链接。
- if($url == '/download') {
- Header("Location: downloads.php");
- exit;
- }
- Header("Location: $url.php");
- exit; // 退出
- }
- }
- ?>
- // 首页内容
然后好像就完美了?后来发现,不行啊,有的带id参数啊。于是乎用了stripos函数,这个函数是用于判断字符串里是否有这个字符。
- stripos(string,find,start)
可以参考:http://www.php.net/manual/zh/function.stripos.php
或者参考:http://www.w3school.com.cn/php/func_string_stripos.asp
实际应用如下:
- <?php
- if($_GET) {
- $url = $_GET['rp'];
- if($url) {
- if($url == '/download') {
- Header("Location: downloads.php");
- exit;
- }elseif( stripos($url, '/announcements/') !== false){
- //判断如果URL含有这部分字符,也就是新闻页的字符
- $pid = mb_substr($url,15 ); //提取第15个和后面的,也就是id
- Header("Location: announcements.php?id=$pid");
- //重定向到重新拼接的URL
- exit;
- }
- Header("Location: $url.php");
- exit; // 退出
- }
- }
- ?>
- // 首页内容
你以为事情真的那么简单吗,我也想啊。。然后我发现帮助中心的URL就比较特殊了。。
比如:http://www.xukhost.com/index.php?rp=/knowledgebase/15/755.html
好吧,这个,,只能正则了。。于是。。
- <?php
- if($_GET) {
- $url = $_GET['rp'];
- if($url) {
- if($url == '/download') {
- Header("Location: downloads.php");
- exit;
- }elseif( stripos($url, '/announcements/') !== false){
- $pid = mb_substr($url,15 );
- Header("Location: announcements.php?id=$pid");
- exit;
- }elseif(preg_match('#/knowledgebase/(\d+)#i', $url, $match)) {
- $pid = $match[1];
- Header("Location: knowledgebase.php?action=displayarticle&id=$pid");
- exit;
- }
- Header("Location: $url.php");
- exit; // 退出
- }
- }
- ?>
- // 首页内容
定义引用
经过这样的反复,反复,再反复,我都怀疑人生了。。。我觉得不行吧,既然能让index.php处理,何不直接让他处理呢?
所以也可以是,,,index.php改名,新的index判断是否有参数,如果是就引用这个,不是则输出首页内容。。
好吧,你以为我耍你们呢,其实这两个方案都是可以的。上面那个21行的代码暂时测试没问题。两个方案二选一啦。
自定义菜单
看了很久的模板代码,发现个问题,WHMCS新版本的菜单都是系统生成的了。。。但是,游客访问的话,菜单第一个是指向index.php,而登陆后的话,则是指向会员中心页,你说我这个地方翻译成什么都尴尬好吧?
后面我发现了,其实写死就好了。。。自己利用模板提供的判断方法,判断和引用即可。。
- {if $loggedin}
- <ul class="nav nav-menu">
- {include file="$template/includes/menu.tpl" navbar=$primaryNavbar}
- </ul>
- {else}
- <ul class="nav nav-menu">
- {include file="$template/includes/menus.tpl"}
- </ul>
- {/if}
上面menu.tpl是自带的,我写了个新的menus.tpl,然后这个新的就可以自己写菜单了。。。当然了,登陆页的菜单,也可以引用另一个文件来解决。这样两个菜单就都可以自定义了。不带navber参数即可。
简化注册
这个利用两个东西,一个是隐藏,一个是赋值。
比如,公司,地址2,这两个输入框不是必填,直接隐藏。
- <div class="form-group" style="display: none;">
- <label class="col-sm-3 control-label" for="companyname">{$LANG.clientareacompanyname}</label>
- <div class="col-sm-6">
- <input type="text" name="companyname" id="companyname" value="{$clientcompanyname}" class="form-control"/>
- </div>
- </div>
上面用CSS(display:none;),隐藏了整个输入框。可是呢必填项不仅仅要隐藏,而且要加默认值,这样就可以避免不填写带来的无法跳过验证了。(不加密多好,可以直接去掉判断字符串长度。。。)
- <div class="col-sm-6">
- <input type="text" name="city" id="city" value="city" class="form-control" {if !in_array('city', $optionalFields)}required{/if} />
- </div>
这个value里的变量,改为写死的city,这时候就可以了。变量囊是你填写后注册不了的时候返回才输出的。所以改为写死的,然后加css隐藏即可。【不过我不建议隐藏,因为域名注册需要。】
官方文档和API
当然了,WHMCS官方也有提供API,可以修改的东西还是有不少的。也可以做插件的。
官方文档:https://docs.whmcs.com/Main_Page
API文档:https://developers.whmcs.com/api/
2021年02月01日 20:00 -9楼
大神啊