Jump to content

Hide admin sidebar by default


bear

Recommended Posts

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.

Link to comment
Share on other sites

@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.

Link to comment
Share on other sites

@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;
    }
});

 

Link to comment
Share on other sites

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. 

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use & Guidelines and understand your posts will initially be pre-moderated