Скрываем ненужное поле

Материал из ISPWiki

Перейти к: навигация, поиск

Задача: убрать насовсем из интерфейса кнопку, поле, колонку и т.д. Рассмотрим пример скрытия кнопки перехода на уровень пользователя

Для этого надо описать эту кнопку в xml и добавить ей атрибут if, указывающий на то, что она видима при указанном условии. Поскольку мы хотим скрыть ее, то это условие никогда не должно выполняться.

Создаем файл /usr/local/ispmgr/etc/ispmgr_mod_myhide.xml с следующим содержимым

<?xml version="1.0" encoding="UTF-8"?>
<mgrdata>
    <metadata name="user">
        <toolbar>
            <toolbtn name="su" if="myhide"/>
        </toolbar>
    </metadata>
</mgrdata>

и перезапускаем панель (killall ispmgr)

(для других продуктов ispmgr нужно заменить соответственно на dsmgr, billmgr и т.п.)

Посмотреть имена модулей и кнопок можно в ispmgr.xml. Атрибут if может принимать любое несуществующее в манагере значение.

Все описанное выше справедливо и для других наших продуктов, изменяются только префиксы в именах фалов, например для биллинга вместо ispmgr нужно писать billmgr

Убираем "лишнюю" функциональность

Если кнопка или поле была спрятана, пользователь все равно может вызвать действие этой кнопки и увидеть содержимое скрытых полей, используя API.

Отключаем функции

Чтобы запретить выполнение функции user.su, можно сделать следующее: добавить внутрь тега <mgrdata> из предыдущего элемента

<handler name="hideaction.pl" type="cgi">
    <event before="yes">user.su</event>
</handler>

Обработчик события addon/hideaction.pl:

#!/usr/bin/perl
 
print "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<doc><skipaction/></doc>\n";

Скрываем поле из таблицы

Следующий пример скрывает поле owner в списке пользователей. В отличии от предыдущего примера здесь используется тип xml, т.к. только он позволяет обработать результат, выданный функцией ISPmanager:

<handler name="dropcol.pl" type="xml">
    <event after="yes">user</event>
</handler>

Обработчик события addon/dropcol.pl:

#!/usr/bin/perl
 
use XML::LibXML;
my $d = XML::LibXML->new->parse_string(join "", <STDIN>);
for my $dead ($d->findnodes(q{//elem/owner})) {
    $dead->unbindNode;
}
print $d->toString;
Была ли эта информация полезной? Да | Нет
Личные инструменты