
На одном проекте очень нужна была возможность менять порядок элементов в множественном свойстве типа "Привязка к элементам". К сожалению, по умолчанию Битрикс не умеет этого делать, только если руками копировать и вставлять элементы один за одним, что оооочень напряжно и долго.
Поэтому изучив возможные варианты было принято решение добавить кастомный скрипт, который бы позволял по нажатию клавиш вверх и вниз менять порядок (сортировку) элементов. Сделать это как оказалось не сложно. И так наши шаги:
1. Добавляем в папку /local/themes/ (или кому куда удобно) файлик JS следующего содержания
$(document).ready(function(){
// тут каждый меняет IDшник свойства под себя
$("#tr_PROPERTY_15707 .adm-detail-content-cell-r > table tr td:not(:last)").each(function(){
$(this).append(' ↑ ↓');
});
// Обработчик нажатия стрелки вверх
$(".sort_up").click(function(){
var current_tr = $(this).closest("tr"); // текущий tr
var current_id = $(this).siblings('input[type=text]').attr("id"); // текущее значение input
var up_tr = $(this).closest("tr").prev(); // предыдущий tr
if(up_tr)
{
var up_id = up_tr.find('input[type=text]').attr("id"); // предыдущее значение input
// меняем их значения
current_tr.find('input[type=text]').attr("id", up_id).attr("name", up_id);
up_tr.find('input[type=text]').attr("id", current_id).attr("name", current_id);
current_tr.insertBefore(up_tr); // меняем местами
}
return false;
});
// Обработчик нажатия клавиши вниз
$(".sort_down").click(function(){
var current_tr = $(this).closest("tr"); // текущий tr
var current_id = $(this).siblings('input[type=text]').attr("id"); // текущее значение input
var down_tr = $(this).closest("tr").next(); // предыдущий tr
if(down_tr)
{
var down_id = down_tr.find('input[type=text]').attr("id"); // предыдущее значение input
// меняем их значения
current_tr.find('input[type=text]').attr("id", down_id).attr("name", down_id);
down_tr.find('input[type=text]').attr("id", current_id).attr("name", current_id);
current_tr.insertAfter(down_tr); // меняем местами
}
return false;
});
});
2. Теперь, чтобы его подключить к админке добавляем файлик /local/php_interface/admin_header.php следующего содержания:
use Bitrix\Main\Page\Asset;
$Asset = Asset::getInstance();
CJSCore::Init(array("jquery"));
$Asset->addJs('/local/themes/admin.js'); // наш JS
// стили можно тоже подключить файлом, я не заморачивался
?>
И всё, после этого у вас должны появиться возможность управлять сортировкой элементов у множественных свойств. Надеюсь кому-нибудь пригодится)