Вы можете создать динамический массив элементов или таблицу, где изменение элементов будет сохраняться в БД.
Для работы вам понадобиться библиотека jQuery не ниже 1.9 и jquery-ui.min.js
На примере таблицы, где необходимо перемещать строки(вверх-вниз) и запоминать их позицию(ordering)
<table >
<tbody class="container">
<tr id="OrdNum_1">
<td>
<input type="hidden" id="imageindex_0" value="1">
<a class="btn"><i class="icon-move"></i></a>
</td>
<td>
....
</td>
</tr>
<tr id="OrdNum_2">
<td>
<input type="hidden" id="imageindex_1" value="2">
<a class="btn"><i class="icon-move"></i></a>
</td>
<td>
....
</td>
</tr>
</tbody>
</table>
Алгоритм работы:
- 1.Пользователь перетаскивает строку, зажав элемент <i class="icon-move"></i>
- 2.После завершения, скрипт анализирует позицию с которой был взял элемент и позицию на которую он перемещен, далее по элементам <input type="hidden" id="imageindex_1" value="2"> в атрибуте value получаем ID записи
- 3.Делаем запрос в БД на изменение позиции(ordering)
Скрипт выполняющий поиск ID старой и новой позиции:
jQuery(document).ready(function() {
jQuery('.container').sortable({
group: 'no-drop',
opacity: 0.8,
handle: 'i.icon-move',
start: function(e, ui) {jQuery(this).attr('data-previndex', ui.item.index());},
update: function(e, ui) {
var newIndex = ui.item.index();
var oldIndex = jQuery(this).attr('data-previndex');
var target_id=document.getElementById('imageindex_'+newIndex).value;
var self_id=document.getElementById('imageindex_'+oldIndex).value;
var myData = 'changeimageord='+target_id+'&sid='+self_id;
jQuery.ajax({
type: "POST",
url: document.getElementById('siteurl').value+"index.php?option=com_rad_sale",
dataType:"text",
data:myData,
success:function(response){},
error:function (xhr, ajaxOptions, thrownError){alert(thrownError);}
});
jQuery(this).removeAttr('data-previndex');
},
onDragStart: function ($item, container, _super) {if(!container.options.drop) $item.clone().insertAfter($item);_super($item, container);},
});
});
Обработка aJax запроса:
if (isset($_POST['changeord']) and strlen($_POST['changeord']))
{
$target_id=trim($_POST['target_id']);
$self_id=trim($_POST['self_id']);
$db = JFactory::getDbo();
$db->setquery("select ordering from #__table where id='".$target_id."'");$target_id_ord=$db->loadresult();
$db->setquery("select ordering from #__table where id='".$self_id."'");$self_id_ord=$db->loadresult();
$db->setquery("update #__table set ordering='".$self_id_ord."' where id='".$target_id."'");$db->execute();
$db->setquery("update #__table set ordering='".$target_id_ord."' where id='".$self_id."'");$db->execute();
exit();
}