Имеется 80 сайтов на одной редакции и 80 учетных записей администраторов. Возникает задача, отображать в административной части сайта в разделе "Контент" страницы и инфоблоки только одного сайта.
Создаем файл admin_header.php в разделе /bitrix/php_interface/
Далее в этом файле:
<? //Подключаем jQuery
CJSCore::Init( 'jquery' );
?>
|
<? //Получаем ID сайта к которому привязан юзер
global $USER;
$rsUser = CUser::GetByID($USER->GetID());
$arUser = $rsUser->Fetch();
$site_id = $arUser["LID"];
?>
|
<? //Получаем список инфоблоков текущего юзера
$res = CIBlock::GetList(Array(), Array('SITE_ID'=>$site_id, 'ACTIVE'=>'Y'));
$arIblock = Array();
while($ar_res = $res->Fetch()){
$arIblock[] = $ar_res;
}
?>
|
Список инфоблоков выводим в скрытый блок в виде json строки, далее эти данные нам понядобятся
<div id="arIblock" style="display:none;"><?=json_encode($arIblock);?></div> |
Создаем класс для скрытых инфоблоков, иначе скрипт раскрытия списка инфоблоков работать не будет.
<st yle>
#_global_menu_content .hide_item {
display: none;
}
</style> |
Далее JavaScript, который будет скрывать все лишнее
<sc ript type="text/javascript">
$(document).ready(function() {
//Парсим список инфоблоков из строки json
var arIblock = $.parseJSON($('#arIblock').text());
//скрываем ссылки на другие сайты, которые не относятся к текущему юзеру
$('#_global_menu_content a[href *= "site="]').each(function() {
var siteIdReg = new RegExp("site=<?=$site_id?>&", "g");
if( ! siteIdReg.test($(this).attr('href'))) {
$(this).parent().hide();
}
});
//скрываем инфоблоки, которые не относятся к текущему юзеру
$('#_global_menu_content a[href *= "IBLOCK_ID="]').closest('.adm-submenu-level-2').addClass('hide_item');
for (var i = arIblock.length - 1; i >= 0; i--) {
$('#_global_menu_content a[href *= "IBLOCK_ID=' + arIblock[i].ID + '&"]').closest('.adm-submenu-level-2').removeClass('hide_item');
};
});
</sc ript> |
Теперь каждый администратор сайта будет видеть данные только своего сайта и случайно не отредактирует чужой сайт.