1С-Битрикс: ссылки в виде выпадающих списков с правами доступа через GetUserGroupArray

Была задача — уменьшить боковое поле на сайте путём «схлопывания» горячих ссылок. Для этого делается инфоблок, где название раздела является группой ссылок, а элементы раздела — самими ссылками. Добавляется свойство url (сюда вписываем, куда переходить) и добавляется множественное свойство groups_list (сюда вписываем число, какой группе отображать ссылку).

Принцип работы:
проверяем, если юзер принадлежит группе номер такой-то, то для этой группы доступна ссылка в виде выпадающего опшена.
В противном случае ни у кого нет права смотреть эту ссылку.
Если не указана никакая группа — по умолчанию опшен виден всем.

Решение:
Использован битриксовый GetUserGroupArray.
Использован компонент Разделы с top’ом элементов.
Сделан небольшой яваскрипт, чтобы опшены переходили по ссылкам.


Код шаблона ниже (со стилями):

<?if(!defined(«B_PROLOG_INCLUDED») || B_PROLOG_INCLUDED!==true)die();?>
<SCRIPT LANGUAGE=»JavaScript» TYPE=»text/javascript»>
function JumpToIt(list)
{
var selection = list.options[list.selectedIndex].value
if (selection != «None»)
location.href = selection
}
</SCRIPT>
<style>
.font-family, div.rapid_outlist_jquery {
font-family: ‘PTSansRegular’, Tahoma, Verdana, Helvetica, Arial, sans-serif;
font-size:13px;
text-align:left;
width:180px;
}
div.rapid_outlist_jquery {padding-left:5px;}
div.rapid_outlist_jquery form {padding-top:0; padding-bottom:0; margin-top:0; margin-bottom:0;}
</style>
<div class=»rapid_outlist_jquery»>
<?
global $USER;
$user_groups = $USER->GetUserGroupArray();
?>
<?
foreach($arResult[«SECTIONS»] as $arSection){
?>
<form>
<select onChange=»JumpToIt(this)» class=»font-family»><option class=»font-family» VALUE=»None»><?=$arSection[«NAME»]?></option>
<?
foreach($arSection[«ITEMS»] as $arElement){
$groups = array();
$restriction = 0; if (isset($arElement[«PROPERTIES»][«groups_list»][«VALUE»][0])){$restriction = 1;}
if ($restriction == 1){
for ($l=0;count($arElement[«PROPERTIES»][«groups_list»][«VALUE»])>$l;$l++){
array_push($groups,$arElement[«PROPERTIES»][«groups_list»][«VALUE»][$l]);
}
$intersect_selection = array_intersect($groups,$user_groups);
$qqq = 0;
if (isset($intersect_selection[0])){$qqq = 1;}
}
if ($restriction == 1 && $qqq == 0){}else{
?>
<option class=»font-family» VALUE=»<?=$arElement[«PROPERTIES»][«url»][«VALUE»]?>»><?=$arElement[«NAME»]?></option>
<?
}
unset($qqq);
}
?>
</select>
</form>
<?
}
?>

</div>

Выглядит вот так:

link

Можно подключить библиотеку formstyler, но она косо работает во всех версиях ИЕ, хоть разработчиком заявлено обратное.

p.s.: снова две копейки про ИЕ — в государственных организациях, увы, и в «бюджетках», приходится тестировать под разные версии ИЕ и придумывать костыли с ухищрениями, потому что многие пользователи категорически не могут, не хотят или не знают как переползать на другие «вменяемые» браузеры. Вдобавок, из-за низкого уровня доходов или собственной лени — парк техники своей не обновляют, пользуются древними компьютерами и ноутбуками, на которых пиратская необновлёнка ХР. Встречаются единицы таких, кто понимает, что всё устарело, какие-то работы мирится и делает через одно_место или через знакомых, или хотя бы в крайнем случае через свой телефон, который умеет больше и порою работает быстрее, чем его «настольник».


Понравилась моя запись?
Кликни по рекламному баннеру ниже. Тебе бесплатно и не сложно, а мне - честный заработок блогом и приятное дополнение к энтузиазму на чашку кофе :-)