如果你刚升级了 WHMCS 6 ,你会发现导航条菜单连产品分类都没有。
如果你是做 WHMCS 模板开发的,你会发现 WHMCS 6 的主菜单已经不能直接在模板修改了。
那如何修改 WHMCS 6 导航条菜单(主菜单)呢?
查阅了官方文档,发现 WHMCS 使用 Hooks 来修改导航条。
那么 WHMCS Hooks 是什么呢?又如何使用呢?
下面以 WHMCS Hooks 修改 WHMCS 导航条按钮为例做一个简单说明:
1、在WHMCS根目录的 /includes/hooks/ 目录新建一个 Hooks.php 文件(注意文件编码一定是 utf-8 );
2、将下面的代码粘贴到 Hooks.php 文件,增加一个显示 “Menu Name” 指向“https://www.example.com/”的按钮:
<?php #adding Menu Item to primaryNavbar use WHMCS\View\Menu\Item as MenuItem; add_hook('ClientAreaPrimaryNavbar', 1, function (MenuItem $primaryNavbar) { $primaryNavbar->addChild('Menu Name') ->setUri('https://www.example.com/') ->setOrder(70); });
其中:
1、addChild(‘Menu Name’) 中的 Menu Name 是按钮名字,也是按钮显示的文字
2、setUri(‘https://www.example.com/’) 中的 https://www.example.com/ 是按钮指向的链接
3、setOrder(70) 中的 70 表示按钮排序,数字越小排序越靠前。
菜单操作示例代码:
1、修改按钮文字:
<?php use WHMCS\View\Menu\Item as MenuItem; add_hook('ClientAreaPrimaryNavbar', 1, function (MenuItem $primaryNavbar) { $navItem = $primaryNavbar->getChild('Support'); if (is_null($navItem)) { return; } $navItem = $navItem->getChild('Announcements'); if (is_null($navItem)) { return; } $navItem->setLabel('Custom Title Here'); });
2、修改按钮的链接指向:
<?php use WHMCS\View\Menu\Item as MenuItem; add_hook('ClientAreaPrimaryNavbar', 1, function (MenuItem $primaryNavbar) { $navItem = $primaryNavbar->getChild('Support'); if (is_null($navItem)) { return; } $navItem = $navItem->getChild('Announcements'); if (is_null($navItem)) { return; } $navItem->setUri('https://www.example.com/3rdpartyblogsystem'); });
3、设置按钮的排序:
<?php use WHMCS\View\Menu\Item as MenuItem; add_hook('ClientAreaPrimaryNavbar', 1, function (MenuItem $primaryNavbar) { $navItem = $primaryNavbar->getChild('Support'); if (is_null($navItem)) { return; } $navItem = $navItem->getChild('Announcements'); if (is_null($navItem)) { return; } $navItem->setOrder(1); });
也可以用下面的代码重新排序:
// 按钮排名往前一位 $primaryNavbar->getChild('Support')->getChild('Announcements')->moveUp(); // 按钮排名往后一位 $primaryNavbar->getChild('Support')->getChild('Announcements')->moveDown(); // 按钮移动到最前面 $primaryNavbar->getChild('Support')->getChild('Announcements')->moveToFront(); // 按钮移动到最后面 $primaryNavbar->getChild('Support')->getChild('Announcements')->moveToBack();
4、增加一个按钮
<?php #adding Menu Item to primaryNavbar use WHMCS\View\Menu\Item as MenuItem; add_hook('ClientAreaPrimaryNavbar', 1, function (MenuItem $primaryNavbar) { $primaryNavbar->addChild('Menu Name') ->setUri('https://www.example.com/') ->setOrder(70); });
4.1、增加一个子菜单
<?php use WHMCS\View\Menu\Item as MenuItem; add_hook('ClientAreaPrimaryNavbar', 1, function (MenuItem $primaryNavbar) { if (!is_null($primaryNavbar->getChild('Support'))) { $primaryNavbar->getChild('Support') ->addChild('Emergency Contacts', array( 'label' => 'Emergency Contacts', 'uri' => 'emergency.php', 'order' => '100', )); } });
4.2、使用翻译文件显示按钮
<?php use WHMCS\View\Menu\Item as MenuItem; add_hook('ClientAreaPrimaryNavbar', 1, function (MenuItem $primaryNavbar) { if (!is_null($primaryNavbar->getChild('Support'))) { $primaryNavbar->getChild('Support') ->addChild('Emergency Contacts', array( 'label' => Lang::trans('emergencyContacts'), 'uri' => 'emergency.php', 'order' => '100', )); } });
4.3、根据登陆状态显示按钮
<?php use WHMCS\View\Menu\Item as MenuItem; add_hook('ClientAreaPrimaryNavbar', 1, function (MenuItem $primaryNavbar) { $client = Menu::context('client'); // 客户没有登陆时显示 if (is_null($client)) { $primaryNavbar->addChild('Example') ->setUri('https://www.example.com/') ->setOrder(100); } });
5、删除一个菜单
<?php use WHMCS\View\Menu\Item as MenuItem; add_hook('ClientAreaPrimaryNavbar', 1, function (MenuItem $primaryNavbar) { if (!is_null($primaryNavbar->getChild('Network Status'))) { $primaryNavbar->removeChild('Network Status'); } });
5.1删除一个子菜单
<?php use WHMCS\View\Menu\Item as MenuItem; add_hook('ClientAreaPrimaryNavbar', 1, function (MenuItem $primaryNavbar) { if (!is_null($primaryNavbar->getChild('Support'))) { $primaryNavbar->getChild('Support')->removeChild('Announcements'); } });
提示:你可以把多个操作合并在同一起,避免重复代码。
例如:
<?php #adding Menu Item to primaryNavbar use WHMCS\View\Menu\Item as MenuItem; add_hook('ClientAreaPrimaryNavbar', 1, function (MenuItem $primaryNavbar) { $primaryNavbar->addChild('按钮1') ->setUri('链接1') ->setOrder(70); $$primaryNavbar->addChild('按钮2') ->setUri('链接2') ->setOrder(80); });
原文链接:http://hosttry.com/2015/11/14/whmcseditareamenu/