bear Posted May 23 Share Posted May 23 Just moved to the latest WHMCS, and a lot of my older hooks no longer work correctly. A basic one would be to hide the admin sidebar until I click to expand. The code below was working (courtesy Brian!). Now it hides the content, but the sidebar still takes up the space it would occupy (blend template in admin). function hook_admin_minimise_sidebar($vars) { return array("minsidebar" => true); } add_hook("AdminAreaPage", 1, "hook_admin_minimise_sidebar"); Have I missed something? Hs this hook point been changed? Docs don't specifically mention this, but the hooks don't seem to have significantly changed between versions. I have several other useful hooks, and all seem to be non functional. 0 Quote Link to comment Share on other sites More sharing options...
wtools Posted May 24 Share Posted May 24 What template are you using? Standard WHMCS templates or lagom? 0 Quote Link to comment Share on other sites More sharing options...
bear Posted May 24 Author Share Posted May 24 Blend, as mentioned. 0 Quote Link to comment Share on other sites More sharing options...
Evolve Web Hosting Posted May 25 Share Posted May 25 @bear This works with the Blend theme <?php add_hook('AdminAreaHeadOutput', 1, function($vars) { return '<script> document.addEventListener("DOMContentLoaded", function() { document.body.classList.add("sidebar-collapse"); }); </script>'; }); From Claude: The new Blend admin theme in WHMCS is built on AdminLTE, which collapses the sidebar by adding a sidebar-collapse class to the <body> tag — it no longer uses the minsidebar variable from the old theme. 0 Quote Link to comment Share on other sites More sharing options...
bear Posted May 25 Author Share Posted May 25 I'll give that a try, thanks. I couldn't find this in the docs. Is it really necessary to use AI to figure out hooks in the newer versions? 0 Quote Link to comment Share on other sites More sharing options...
bear Posted May 26 Author Share Posted May 26 Using blend, that hook doesn't do anything. On first page load, sidebar is open. Why this is not a built in option is baffling. 0 Quote Link to comment Share on other sites More sharing options...
Evolve Web Hosting Posted May 26 Share Posted May 26 @bear I did some further testing and I think this is what you want. Curious to hear your feedback. I have 8.13.3 installed. <?php /** * WHMCS Hook: Hide Admin Sidebar by Default (Without Breaking Page Grid Rows) * Compatible with WHMCS 8.13.x and hopefully 9.x Blend Layout */ if (!defined("WHMCS")) { die("This file cannot be accessed directly"); } add_hook('AdminAreaHeaderOutput', 1, function($vars) { if (isset($vars['template']) && (strpos($vars['template'], 'blend') !== false)) { return <<<HTML <script> document.addEventListener("DOMContentLoaded", function() { // 1. Target the native WHMCS minimize button var minBtn = document.getElementById('sidebarClose'); // 2. Target the native WHMCS hidden layout flag class var isAlreadyHidden = document.body.classList.contains('sidebar-hidden'); // 3. If the sidebar is present and not already natively minimized, trigger a native click if (minBtn && !isAlreadyHidden) { // A tiny 10ms timeout lets WHMCS paint its grids first, preventing column row-drops setTimeout(function() { minBtn.click(); }, 10); } }); </script> HTML; } }); 0 Quote Link to comment Share on other sites More sharing options...
bear Posted May 26 Author Share Posted May 26 Frankly, I'm going to stop throwing time at this, though I appreciate your effort. I open the page, hit minimize and it stays minimized on page changes. That will have to do. Loads of effort for a small niggle that WHMCS could add with little effort, but have no apparent interest in doing. Giving up, but thanks. 0 Quote Link to comment Share on other sites More sharing options...
DennisHermannsen Posted May 29 Share Posted May 29 It's definitely a bug, I think. I can reproduce this on 2 dev installations running v9, but not earlier versions. Here's a workaround: <?php add_hook('AdminAreaHeadOutput', 1, function() { return <<<HTML <style id="initialSidebarMinimize"> #sidebar { display: none !important; } #contentarea { transition: none !important; } </style> <script> (function() { document.documentElement.classList.add('sidebar-pre-minimized'); document.addEventListener('DOMContentLoaded', function() { const content = document.getElementById('contentarea'); const opener = document.getElementById('sidebarOpener'); if (content) { content.classList.add('sidebar-minimized'); } if (opener) { opener.style.display = 'block'; } requestAnimationFrame(function() { document.getElementById('initialSidebarMinimize')?.remove(); if (content) { content.style.transition = ''; } }); }); })(); </script> HTML; }); 0 Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.