Скрываем ненужное поле
Материал из 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;
