Как изменить сортировку элементов в множественном свойстве типа "Привязка к элементам"

Как изменить сортировку элементов в множественном свойстве типа "Привязка к элементам"

На одном проекте очень нужна была возможность менять порядок элементов в множественном свойстве типа "Привязка к элементам". К сожалению, по умолчанию Битрикс не умеет этого делать, только если руками копировать и вставлять элементы один за одним, что оооочень напряжно и долго.

Поэтому изучив возможные варианты было принято решение добавить кастомный скрипт, который бы позволял по нажатию клавиш вверх и вниз менять порядок (сортировку) элементов. Сделать это как оказалось не сложно. И так наши шаги:

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 следующего содержания:

	addJs('/local/themes/admin.js'); // наш JS
	// стили можно тоже подключить файлом, я не заморачивался
	?>
	

И всё, после этого у вас должны появиться возможность управлять сортировкой элементов у множественных свойств. Надеюсь кому-нибудь пригодится)


Возврат к списку