Мы можем перетаскивать элементы, используя Сортируемый пользовательский интерфейс jQuery — портлеты. Я хочу сохранить состояние в базе данных MySQL. Любой способ (возможно, AJAX) сделать это?
Мой HTML:
<div class="column" id = "column-1">
First Category
<div class="portlet">
<div class="portlet-header">Feeds</div>
<div class="portlet-content">Lorem ipsum dolor sit amet, consectetuer adipiscing elit</div>
</div>
<div class="portlet">
<div class="portlet-header">News</div>
<div class="portlet-content">Lorem ipsum dolor sit amet, consectetuer adipiscing elit</div>
</div>
</div>
<div class="column" id = "column-2">
Second Category
<div class="portlet">
<div class="portlet-header">Shopping</div>
<div class="portlet-content">Lorem ipsum dolor sit amet, consectetuer adipiscing elit</div>
</div>
</div>
<div class="column" id = "column-3">
Third Category
<div class="portlet">
<div class="portlet-header">Shopping</div>
<div class="portlet-content">Lorem ipsum dolor sit amet, consectetuer adipiscing elit</div>
</div>
<div class="portlet">
<div class="portlet-header">Shopping</div>
<div class="portlet-content">Lorem ipsum dolor sit amet, consectetuer adipiscing elit</div>
</div>
</div>
<div class="column" id = "column-4">
Fourth Category
<div class="portlet">
<div class="portlet-header">Links</div>
<div class="portlet-content">Lorem ipsum dolor sit amet, consectetuer adipiscing elit</div>
</div>
<div class="portlet">
<div class="portlet-header">Images</div>
<div class="portlet-content">Lorem ipsum dolor sit amet, consectetuer adipiscing elit</div>
</div>
</div>
Мой JavaScript:
<script>
$( function() {
$( ".column" ).sortable({
connectWith: ".column",
handle: ".portlet-header",
cancel: ".portlet-toggle",
placeholder: "portlet-placeholder ui-corner-all"});
$( ".portlet" )
.addClass( "ui-widget ui-widget-content ui-helper-clearfix ui-corner-all" )
.find( ".portlet-header" )
.addClass( "ui-widget-header ui-corner-all" )
.prepend( "<span class='ui-icon ui-icon-minusthick portlet-toggle'></span>");
$( ".portlet-toggle" ).on( "click", function() {
var icon = $( this );
icon.toggleClass( "ui-icon-minusthick ui-icon-plusthick" );
icon.closest( ".portlet" ).find( ".portlet-content" ).toggle();
});
} );
</script>
Стайлинг:
<style>
body {
min-width: 520px;
}
.column {
width: 170px;
float: left;
padding-bottom: 100px;
}
.portlet {
margin: 0 1em 1em 0;
padding: 0.3em;
}
.portlet-header {
padding: 0.2em 0.3em;
margin-bottom: 0.5em;
position: relative;
}
.portlet-toggle {
position: absolute;
top: 50%;
right: 0;
margin-top: -8px;
}
.portlet-content {
padding: 0.4em;
}
.portlet-placeholder {
border: 1px dotted black;
margin: 0 1em 1em 0;
height: 50px;
}
</style>
Скрипты и таблицы стилей:
<link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
<script src="https://code.jquery.com/jquery-1.12.4.js"></script>
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
Любая помощь будет признательна за PHP. Ниже приведен скриншот текущего состояния:
Всякий раз, когда пользователь перетаскивает элемент из Первая категория в Вторая категория, это должно быть обновлено в базе данных.
Вам нужно пройти AJAX
запрос на портлет update
, Подробности на Документация по API.
Я не совсем понимаю ваш вопрос или даже то, что вы подразумеваете под состояниями, но я сделаю снимок в темноте и предположу, что вы имеете в виду, что вы хотите сохранить положение каждой ячейки относительно столбцов.
Я бы настроил его так, чтобы у каждого столбца было имя / номер, а у каждого ящика — ранг.
Таким образом, каждое поле при инициализации или изменении будет иметь ранг (от 0 до бесконечности), а его родитель, столбец, будет иметь имя
Скажем, вы перемещаете окно новостей из первой категории во вторую категорию под полкой с покупками.
Когда вы впервые посмотрите на это, Новости будут обозначены как ['First', 1]
, После переключения это будет ['Second', 1]
,