मैं sortable
उपयोगकर्ताओं को एक आदेश सेट करने और फिर परिवर्तन पर, डेटाबेस में लिखने और इसे अपडेट करने की अनुमति देने के लिए jQuery UI फ़ंक्शन का उपयोग करना चाहता हूं । क्या कोई इस पर एक उदाहरण लिख सकता है कि यह कैसे किया जाएगा?
मैं sortable
उपयोगकर्ताओं को एक आदेश सेट करने और फिर परिवर्तन पर, डेटाबेस में लिखने और इसे अपडेट करने की अनुमति देने के लिए jQuery UI फ़ंक्शन का उपयोग करना चाहता हूं । क्या कोई इस पर एक उदाहरण लिख सकता है कि यह कैसे किया जाएगा?
जवाबों:
JQuery UI sortable
सुविधा में ऐसा serialize
करने के लिए एक विधि शामिल है । यह वास्तव में काफी सरल है। यहां एक त्वरित उदाहरण है जो किसी तत्व में परिवर्तन की स्थिति के रूप में डेटा को निर्दिष्ट URL पर भेजता है।
$('#element').sortable({
axis: 'y',
update: function (event, ui) {
var data = $(this).sortable('serialize');
// POST to server using $.post or $.ajax
$.ajax({
data: data,
type: 'POST',
url: '/your/url/here'
});
}
});
यह क्या करता है कि यह तत्वों का उपयोग करके तत्वों की एक सरणी बनाता है id
। इसलिए, मैं आमतौर पर ऐसा कुछ करता हूं:
<ul id="sortable">
<li id="item-1"></li>
<li id="item-2"></li>
...
</ul>
जब आप serialize
विकल्प का उपयोग करते हैं , तो यह इस तरह एक POST क्वेरी स्ट्रिंग बनाएगा: item[]=1&item[]=2
आदि। यदि आप उपयोग करते हैं - उदाहरण के लिए - id
विशेषता में आपका डेटाबेस आईडी , तो आप बस पोस्ट किए गए सरणी के माध्यम से पुनरावृति कर सकते हैं और तदनुसार तत्वों की स्थिति को अपडेट कर सकते हैं। ।
उदाहरण के लिए, PHP में:
$i = 0;
foreach ($_POST['item'] as $value) {
// Execute statement:
// UPDATE [Table] SET [Position] = $i WHERE [EntityId] = $value
$i++;
}
$("#element").children().uniqueId().end().sortable({...
सोचा कि यह भी मदद कर सकता है। ए) इसे प्रत्येक प्रकार के बाद, सर्वर पर वापस भेजते समय पेलोड को न्यूनतम रखने के लिए डिज़ाइन किया गया था। (हर बार सभी तत्वों को भेजने के बजाय या सर्वर द्वारा चकित हो सकने वाले कई तत्वों के माध्यम से पुनरावृत्ति करते हुए) बी) मुझे तत्व की आईडी / नाम से समझौता किए बिना कस्टम आईडी वापस भेजने की आवश्यकता थी। इस कोड को asp.net सर्वर से सूची मिल जाएगी और फिर केवल 2 मानों को छाँटने पर वापस भेजा जाएगा: सॉर्ट किए गए तत्व की db आईडी और उस तत्व की db id जिसके आगे वह गिरा था। उन 2 मूल्यों के आधार पर, सर्वर आसानी से नए आसन की पहचान कर सकता है।
<div id="planlist" style="width:1000px">
<ul style="width:1000px">
<li plid="listId1"><a href="#pl-1">List 1</a></li>
<li plid="listId2"><a href="#pl-2">List 1</a></li>
<li plid="listId3"><a href="#pl-3">List 1</a></li>
<li plid="listId4"><a href="#pl-4">List 1</a></li>
</ul>
<div id="pl-1"></div>
<div id="pl-2"></div>
<div id="pl-3"></div>
<div id="pl-4"></div>
</div>
<script type="text/javascript" language="javascript">
$(function () {
var tabs = $("#planlist").tabs();
tabs.find(".ui-tabs-nav").sortable({
axis: "x",
stop: function () {
tabs.tabs("refresh");
},
update: function (event, ui) {
//db id of the item sorted
alert(ui.item.attr('plid'));
//db id of the item next to which the dragged item was dropped
alert(ui.item.prev().attr('plid'));
//make ajax call
}
});
});
</script>
आप भाग्य में हैं, मैं अपने सीएमएस में सटीक चीज का उपयोग करता हूं
जब आप ऑर्डर स्टोर करना चाहते हैं, तो बस जावास्क्रिप्ट विधि को कॉल करें saveOrder()
। यह POST
saveorder.php के लिए एक AJAX अनुरोध करेगा, लेकिन निश्चित रूप से आप इसे हमेशा एक नियमित रूप में पोस्ट कर सकते हैं।
<script type="text/javascript">
function saveOrder() {
var articleorder="";
$("#sortable li").each(function(i) {
if (articleorder=='')
articleorder = $(this).attr('data-article-id');
else
articleorder += "," + $(this).attr('data-article-id');
});
//articleorder now contains a comma separated list of the ID's of the articles in the correct order.
$.post('/saveorder.php', { order: articleorder })
.success(function(data) {
alert('saved');
})
.error(function(data) {
alert('Error: ' + data);
});
}
</script>
<ul id="sortable">
<?php
//my way to get all the articles, but you should of course use your own method.
$articles = Page::Articles();
foreach($articles as $article) {
?>
<li data-article-id='<?=$article->Id()?>'><?=$article->Title()?></li>
<?
}
?>
</ul>
<input type='button' value='Save order' onclick='saveOrder();'/>
Saveorder.php में; ध्यान रखें मैंने सभी सत्यापन और जाँच को हटा दिया है।
<?php
$orderlist = explode(',', $_POST['order']);
foreach ($orderlist as $k=>$order) {
echo 'Id for position ' . $k . ' = ' . $order . '<br>';
}
?>
यह मेरा उदाहरण है।
https://github.com/luisnicg/jQuery-Sortable-and-PHP
आपको अपडेट ईवेंट में ऑर्डर को पकड़ना होगा
$( "#sortable" ).sortable({
placeholder: "ui-state-highlight",
update: function( event, ui ) {
var sorted = $( "#sortable" ).sortable( "serialize", { key: "sort" } );
$.post( "form/order.php",{ 'choices[]': sorted});
}
});
मैं jsFiddle पर स्वीकृत उत्तर और संबंधित उदाहरण का पालन करके पंक्तियों को बदल सकता हूं। लेकिन कुछ अज्ञात कारणों के कारण, मैं "स्टॉप या चेंज" क्रियाओं के बाद आईडी प्राप्त नहीं कर सका। लेकिन JQuery UI पृष्ठ में पोस्ट किया गया उदाहरण मेरे लिए ठीक काम करता है। आप उस लिंक को यहाँ देख सकते हैं।
इस समाधान के साथ प्रयास करें: http://phppot.com/php/sorting-mysql-row-order-using-jquery/ जहां कुछ HMTL तत्व में नया ऑर्डर सेव किया गया है। फिर आप इस डेटा के साथ फ़ॉर्म को कुछ PHP स्क्रिप्ट में सबमिट करते हैं, और इसे लूप के साथ ट्रेट करते हैं।
नोट: मुझे INT (11) का एक और db फील्ड जोड़ना था जो प्रत्येक पुनरावृत्ति पर अद्यतन (टाइमस्टैम्प'एड) है - यह स्क्रिप्ट के लिए यह जानने के लिए कार्य करता है कि कौन सी पंक्ति हाल ही में अपडेट की गई है, या फिर आप परिणाम के साथ समाप्त हो गए हैं।
toArray
सॉर्ट किए गए आईडी की एक स्ट्रिंग देगा, मुझे लगता है कि यह मददगार हो सकता है। api.jqueryui.com/sortable/#method-toArray