jQuery拖动布局其结果保存到数据库_jquery

最近的项目中涉及到了用户个性化定制首页的需求,用户要求可以随意拖动首页模块的位置,来实现个性化的布局。本文讲解如何使用和PHP实现拖动布局并将拖动后的布局位置保存到数据库。

很多网站的拖动布局的例子都是采用浏览器的COOKIE来记录用户拖动模块的位置,也就是说拖动后各模块的排序位置信息是记录在客户端的cookie里的。当用户清空客户端的cookie或浏览器的cookie过期后,再次访问页面时,发现布局又还原成最初的状态。这种cookie记录的方式使用简单,但不适合像个人中心、管理系统主页的要求。
本例实现的效果:
通过拖动随意布局页面模块。
记录拖动后模块的位置,并记录到数据库中。
页面永久性布局,用任意浏览器在任意时候打开,页面布局不变。(除非用户再次更改模块的排序,跟cookie没有关系)。
原理
采用的拖动排序插件实现拖动效果。
将拖动后的模块的位置通过ajax传给服务端PHP程序。
PHP程序处理位置信息后,更新数据库中相应的字段内容。
XHTML

<div id="loader"></div>
<div id="module_list">
  <input type="hidden" id="orderlist" />
  <div class="modules" title="1">
   <h3 class="m_title">Module:1</h3>
   <p>1</p>
  </div>
  ...
</div>

DIV#loader用于显示提示信息,如loading...,#orderlist是一个隐藏域,用于记录模块的排序值。“...”表示循环了n个DIV.modules,具体生成的代码在后面会讲到。
CSS

#module_list{margin-left:4px}
.modules{float:left; width:200px; height:140px; margin:10px; border:1px solid #acc6e9;
 background:#e8f5fe}
.m_title{height:24px; line-height:24px; background:#afc6e9}
#loader{height:24px; text-align:center}

简单,关键是要给.modules一个想左浮动的样式float:left。
jQuery

$(function(){
  $(".m_title").bind('mouseover',function(){
    $(this).css("cursor","move")
  }); 

  var $show = $("#loader");
  var $orderlist = $("#orderlist");
  var $list = $("#module_list"); 

  $list.sortable({
    opacity: 0.6, //设置拖动时候的透明度
    revert: true, //缓冲效果
    cursor: 'move', //拖动的时候鼠标样式
    handle: '.m_title', //可以拖动的部位,模块的标题部分
    update: function(){
       var new_order = [];
       $list.children(".modules").each(function() {
        new_order.push(this.title);
       });
       var newid = new_order.join(',');
       var oldid = $orderlist.val();
       $.ajax({
        type: "post",
        url: "update.php", //服务端处理程序
        data: { id: newid, order: oldid },  //id:新的排列对应的ID,order:原排列顺序
        beforeSend: function() {
           $show.html("<img src='load.gif' /> 正在更新");
        },
        success: function(msg) {
           //alert(msg);
           $show.html("");
        }
       });
    }
  });
});

拖动排序的动作都写在$list.sortable({...})里面,参数设置和方法请看代码的注释。juery ui的sortable插件提供了很多方法和参数配置,详情请查看
拖动完成要执行一个update方法,该方法需要将拖动后排序的位置通过ajax提交给后台处理。

var new_order = [];
$list.children(".modules").each(function() {
   new_order.push(this.title);
});
var newid = new_order.join(',');
var oldid = $orderlist.val();

说明:循环每个模块.modules,获取拖动排序后每个模块的属性title值,将值通过逗号连接成一个字符串。原来的未拖动之前的排序值从隐藏域orderlist中获取。
获取排序值后,就是通过ajax和后台程序交互了。
PHP
update.php接收前端ajax通过POST提交过来的两个参数,及排序前的值和排序后的值,将这连个值进行对比,如果不相等,则更新数据库中的排序字段,完成了拖动排序后的及时保存。

include_once("connect.php");//连接数据库
$order = $_POST['order'];
$itemid = trim($_POST['id']);
if (!emptyempty ($itemid)) {
  if ($order != $itemid) {
    $query = mysql_query("update sortlist set sort='$itemid' where id=1");
    if ($query) {
      echo $itemid;
    } else {
      echo "none";
    }
  }
}

首页index.php
再回到展示布局的首页index.php。index.php通过连接数据库读取模块的排序信息,并将各模块显示出来。
首先别忘了加载jquery库和jquery ui的sortable拖动排序插件。

<script type="text/javascript" src="js/jquery.js"></script>
<script type="text/javascript" src="js/jquery-ui.min.js"></script>

读取数据库的排序字段值。

include_once("connect.php"); 

$query=mysql_query("select * from sortlist where id=1");
if($rs=mysql_fetch_array($query)){
  $sort=$rs['sort'];
}
$sort_arr=explode(",",$sort);
$len=count($sort_arr);

循环显示各模块。

<div id="loader"></div>
<div id="module_list">
 <input type="hidden" id="orderlist" value="<?php echo $sort;?>" />
 <?php
   for($i=0;$i<$len;$i++){
 ?>
 <div class="modules" title="<?php echo $sort_arr[$i]; ?>">
   <h3 class="m_title">Module:<?php echo $sort_arr[$i]; ?></h3>
   <p><?php echo $sort_arr[$i]; ?></p>
 </div>
 <?php } ?>
</div>

诚然,真正的拖动排序结果的保存都跟每个用户信息相关联,所以数据库的结构设计方面大家可以自行解决,尽情发挥吧。

以上就是jQuery实现拖动布局并将排序结果保存到数据库的实现过程,希望对大家的学习有所帮助。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索jquery拖动排序
jquery拖动布局
jquery ui 拖动布局、jquery 拖动布局、jquery div拖动布局、jquery拖拽布局并保存、jquery拖拽布局与保存,以便于您获取更多的相关知识。

时间: 2024-09-22 11:29:32

jQuery拖动布局其结果保存到数据库_jquery的相关文章

jQuery拖动布局实现排序结果同步数据库

很多网站的拖动布局的例子都是采用浏览器的COOKIE来记录用户拖动模块的位置,也就是说拖动后各模块的排序位置信息是记录在客户端的cookie里的.当用户清空客户端的cookie或浏览器的cookie过期后,再次访问页面时,发现布局又还原成最初的状态.这种cookie记录的方式使用简单,但不适合像个人中心.管理系统主页的要求. 51CTO推荐专题:jQuery从入门到精通   jQuery给力插件大阅兵     本例实现的效果: 通过拖动随意布局页面模块. 记录拖动后模块的位置,并记录到数据库中.

jquery实现点击文字可编辑并修改保存至数据库_jquery

这个方法网上可以查到很多,但是好多只有点击文字编辑并保持,但是没有完整的代码写怎么保存到数据库.因为本人才疏学浅,费啦好长时间才写好把修改的内容只用一条sql语句保存到数据库,今天在这里和大家分享 这是运行图片  这是前台页面 03.aspx页面 复制代码 代码如下: <table id="MyTable" cellspacing="1" cellpadding="3"> <asp:Repeater ID="reord

jQuery拖动元素并对元素进行重新排序_jquery

本文实例讲述了jQuery拖动元素并对元素进行重新排序的实现方法,分享给大家供大家参考,具体实现内容如下 效果图: 具体内容如下: 从上图可以看出我们今天要实现的功能.当用户拖动一个图片时,就能改变图片的已有排序并更新表中的排列顺序.比如用户可以随意拖动我们网站中的布局,如谷歌iGoogle就已经实现了.这样便很好的提高了用户体验. 下边,我们一步一步来实现这个功能. <span id="show"> <div> <input id="check

jQuery 拖动层(在可视区域范围内)_jquery

复制代码 代码如下: (function($){ $.fn.extend({ mydrag:function(){ var boxX = 0; //元素在页面中的横坐标 var boxY = 0; //元素在页面中的纵坐标 var dMouseX = 0; //按下鼠标时的鼠标所在位置的横坐标 var dMouseY = 0; //按下鼠标时的鼠标所在位置的纵坐标 var mMouseX = 0; //移动鼠标时的鼠标所在位置的横坐标 var mMouseY = 0; //移动鼠标时的鼠标所在位

拖动布局之保存布局页面cookies篇_javascript技巧

我实现的方法是记录每列拥有的拖动对象,这样在初始或刷新的时候读取这列有哪些拖动对象,直接把拖动对象通过appenChild加进去就可以了,比如拖动后列的id为col2,在这一列的拖动对象的id为col1_2,col3_1,col2_1,我就把col2=col1_2|col3_1|col2_1记录下来,在刷新页面的时候就读取col2的值,循环通过document.getElementById(col2).appendChild(document.getElementById(col1_2))实现显

PHP+MySQL+jQuery随意拖动层并即时保存拖动位置实例讲解_jquery

想拖动页面上的层,完全可以用jQuery ui的Draggable方法来实现,那如何将拖动后层的位置保存下来呢?本文将给出答案.本文讲解了如何采用PHP+MySQL+jQuery,实现随意拖动层并即时保存拖动位置. 本文原理就是通过拖动将拖动后层的相对位置left,top和z-index三个参数更新到数据表中对应的记录,页面通过CSS解析每个层不同的位置.请看具体实现步骤.准备MySQL数据表 首先需要准备一张表notes,用来记录层的内容,背景色和坐标等信息. CREATE TABLE IF

谁能提供个jquery的fullcalendar使用案例,从数据库读取日程数据的。。。

问题描述 谁能提供个jquery的fullcalendar使用案例,从数据库读取日程数据的... 解决方案 http://2015.iteye.com/blog/834805 可以下载下来,将demo中js里的数据从数据库取就可以了解决方案二:下面是我改造的代码,你只要修改myInin()中的方法,把那个ajax的注释去掉换成你的路径就ok<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN""http://ww

实现php上传图片到指定位置路径保存到数据库

 本文为大家介绍下php上传图片到指定位置路径保存到数据库的具体实现,感兴趣的朋友不要错过 1.conn.php  代码如下: <?  $host="localhost"; //数据库服务器名称  $user="root"; //用户名  $pwd="1721"; //密码  $conn=mysql_connect($host,$user,$pwd);  mysql_query("SET  character_set_connec

关于fullcalendar的使用,如何添加日程保存到数据库?

问题描述 关于fullcalendar的使用,如何添加日程保存到数据库? 刚刚接触js方面的,对插件不太熟悉,谁能帮忙提供些资源信息,如何将ashx和前台页面连接起来,能帮忙讲解一下吗?谢过好心人! 解决方案 添加日程后台是你自己写,fc只是需要获取符合他要求的数据格式就行了,也没有提供添加事件保存数据库的api, 自己认真看下api:http://fullcalendar.io/docs/ demo:http://fullcalendar.io/