用权重排序数组?

时间:2011-09-02 19:55:09

标签: php mysql arrays drupal-6 drupal-modules

问题

现在我必须创建它:
Module

在我的数据库中;每个人最喜欢的作为自己的“体重”条目 截至目前,它默认为'10'

假设我有一系列收藏夹,
权重相应地如下:

  • 1
  • 2
  • 3
  • 4

如果我要按'2'上的'向下'箭头,我必须在其重量上加+1 这将导致:

  • 1
  • 3
  • 3
  • 4

但我只是想用最喜欢的'3'重量来切换最喜欢的'2' 我需要一种方法来确保每个项目的权重在隐含时起作用。 由于只是加1或减1会导致很多问题。

希望我能正确解释。

代码

写入数据库

/*
 * Write Form data to database
 */
function f25_favorites_form_submit($form, &$form_state){
  global $user;
  $listOfPaths = f25_favorites_listOfPaths();
  $selected = $form_state['values']['path'];

  $data = array(
    'uid' => $user->uid,
    'path' => $selected,
    'title' => $listOfPaths[$selected]['#title'],
    'weight' => 10,
    'timestamp' => time(),
  );

  drupal_write_record(f25_favorites, $data);
}

查询

/*
 * Fetching Specific User's Favorites Data
 */
function f25_favorites_user_favorites() {
  global $user;
  if($user->uid > 0){
    $userid = $user->uid;
    $user_paths = db_query("SELECT * FROM f25_favorites foo WHERE foo.uid = '%s' ORDER BY foo.weight DESC", $userid);
      $pathlist = array();
    while ($data = db_fetch_object($user_paths)) {
      $pathlist[] = $data;
    }
    return $pathlist;
  }
}

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:2)

如果您的所有收藏夹的权重不同,您可以简单地将“起床”的weight字段与“下降”字段交换,或者在减轻权重时将其反转。你必须弄清楚代码

答案 1 :(得分:1)

因为只有很少的项目我会将整个订单保存到数据库中,而不仅仅是被移动的内容:我不太了解drupal,但我认为它很容易实现,因为drupal是php和javascript基于

html中的每个元素都有自己的id / index(uid?)

<div id="el_1">Menu1</div>  
<div id="el_2">Menu2</div>

使用javascript获取重新排序顺序中的商品列表(例如:

itm[0]=item1;  
itm[1]=item3;  
itm[2]=item2;  
itm[3]=item4;  

将带有ajax的itm发送到你的php更新程序。并更新你的数据库,使用收到的位置,而不是权重。

现在你的数据库有这样的东西:

uid;position
1;0
3;1
2;2
4;3

我建议您使用jquery进行javascript工作,jquery有一个不错的sortable plugin。但它对ajax stuf也很棒。