Страница 1 из 1

Скрыть пункты меню без потери функционала

Добавлено: 26 апр 2026, 20:55
Serdobolniy
Добрый день, как скрыть в главном меню ненужные пользователю пункты (сущности) без потери самого функционала? Если пользователю даётся "просмотр" данных в существующей "сущности", без возможности в ней работать (создавать, удалять...), в главном меню появляется пункт - "название" сущности. Хочется скрыть название сущности в меню, но оставить функционал в самой программе. Через подсущности (которые не отображаются в меню) и компоновку меню - варианты не подходят.

Re: Скрыть пункты меню без потери функционала

Добавлено: 27 апр 2026, 06:24
Fait
У меня есть плагин, позволяющий это сделать.
Стандартным функционалом сделать невозможно.

Re: Скрыть пункты меню без потери функционала

Добавлено: 27 апр 2026, 06:58
nruslan2
5 копеек :D : есть и доработка) а если поискать по форуму можно найти как скрывать и стандартными средствами через скрипты(правда надо писать код - никакого клика мышки в настройках)

Re: Скрыть пункты меню без потери функционала

Добавлено: 27 апр 2026, 10:20
Serdobolniy
Спасибо за подсказку, нашёл: viewtopic.php?t=7159

Re: Скрыть пункты меню без потери функционала

Добавлено: 27 апр 2026, 11:45
Fait
Serdobolniy писал(а): 27 апр 2026, 10:20 Спасибо за подсказку, нашёл: viewtopic.php?t=7159
Да, только тем способом вы не сможете настроить скрытие для конкретных групп пользователей.
То есть пункт меню в итоге скроется вообще для всех.
А также, если выведены подсущности в меню, тем способом вы их тоже не сможете скрыть.

Re: Скрыть пункты меню без потери функционала

Добавлено: 27 апр 2026, 14:06
nruslan2
Можно и под разные группы и даже пользователей
А вот про подсудности не скажу

Поэтому я пользуюсь своей доработкой, чтоб было легко и не принужденно :D :D

Re: Скрыть пункты меню без потери функционала

Добавлено: 27 апр 2026, 15:03
Serdobolniy
Fait писал(а): 27 апр 2026, 11:45 Да, только тем способом вы не сможете настроить скрытие для конкретных групп пользователей.
Спасибо, но до "каталога полезных плагинов" мой проект ещё не дорос
nruslan2 писал(а): 27 апр 2026, 14:06 Поэтому я пользуюсь своей доработкой, чтоб было легко и не принужденно
Всем тоже так хочется, мне кажется. Если можно, поделитесь доработкой?

Re: Скрыть пункты меню без потери функционала

Добавлено: 27 апр 2026, 15:39
Fait
Serdobolniy писал(а): 27 апр 2026, 15:03 Спасибо, но до "каталога полезных плагинов" мой проект ещё не дорос
Напрасно так думаете, у меня есть как раз есть много действительно полезных и дешёвых (есть также много бесплатных) плагинов с простой установкой в пару кликов.
И есть несколько таких, благодаря которым легче строить саму систему.
Магазин ничему вас не обязывает, просто устанавливаете, и пользуетесь)

Re: Скрыть пункты меню без потери функционала

Добавлено: 04 май 2026, 23:57
Serdobolniy
Переиначил с помощью ИИ найденный код по скрытию меню, сделав его не "мерцающим" при обновлении страницы, и скрываемым у необходимых групп пользователей, убрав не нужную мне сортировку и разрывы.
Serdobolniy писал(а): 27 апр 2026, 10:20 Спасибо за подсказку, нашёл: viewtopic.php?t=7159
Настройка
1. Заходим в "Настройки" => "Пользовательский HTML".
2. Вставляем в поле "Добавьте код в конце тега <head>" следующий код:
3. Пункты меню, группы доступа и вместо: '..........' - замените на своё

Код: Выделить всё

<style id="hide-menu-style">
    /* Временно скрываем всё меню */
    .page-sidebar-menu > li {
        display: none !important;
    }
</style>

<script>
(function() {
    // Функция для показа меню
    function showMenu() {
        // Удаляем временный стиль, который скрывает всё меню
        const tempStyle = document.getElementById('hide-menu-style');
        if (tempStyle) {
            tempStyle.remove();
        }
        
        // Теперь применяем постоянные правила
        applyMenuRules();
    }
    
    // Функция с правилами скрытия
    function applyMenuRules() {
        // ГРУППЫ С ПОЛНЫМ ДОСТУПОМ (видят всё. Дополните свои группы доступа пользователей)
        const fullAccessGroups = ['admin', 'Администратор', 'Директор', '.....'];
        
        // ПУНКТЫ ДЛЯ СКРЫТИЯ (у остальных групп. Дополните свои пункты меню)
        const hiddenItems = [
            'Настройки',
            'Пользователи',
            'Дополнение',
            'Документация',
            'О программе',
            'Лицензия',
            '..........'
        ];
        
        // СООТВЕТСТВИЕ ID ГРУПП
        const groupsMap = {
            0: 'Администратор',
            1: 'Директор',
            2: 'Заместитель директора',
            3: 'Главный бухгалтер',
            4: 'Отдел ...',
            5:  '..........'
        };
        
        // Определяем группу пользователя
        let userGroupId = 0;
        const bodyClasses = document.body.className.split(' ');
        for (let i = 0; i < bodyClasses.length; i++) {
            const match = bodyClasses[i].match(/page-usergroup-(\d+)/);
            if (match) {
                userGroupId = parseInt(match[1]);
                break;
            }
        }
        
        const userGroupName = groupsMap[userGroupId] || 'user';
        const hasFullAccess = fullAccessGroups.includes(userGroupName);
        
        console.log('Группа пользователя:', userGroupName, 'ID:', userGroupId, 'Полный доступ:', hasFullAccess);
        
        // Применяем правила к меню
        const allItems = document.querySelectorAll('.page-sidebar-menu > li');
        allItems.forEach(function(item) {
            const titleElement = item.querySelector('.title');
            if (titleElement) {
                const titleText = titleElement.innerText.trim();
                
                if (hasFullAccess) {
                    // Полный доступ — показываем всё
                    item.style.display = '';
                } else {
                    // Ограниченный доступ — скрываем запрещённые
                    if (hiddenItems.includes(titleText)) {
                        item.style.display = 'none';
                    } else {
                        item.style.display = '';
                    }
                }
            }
        });
    }
    
    // Ждём загрузки DOM
    if (document.readyState === 'loading') {
        document.addEventListener('DOMContentLoaded', showMenu);
    } else {
        showMenu();
    }
})();
</script>