【问题标题】:Ordering an Array with weights?订购带有权重的数组?
【发布时间】:2011-09-02 19:55:09
【问题描述】:

问题

现在我必须创建这个:

在我的数据库中;每个收藏夹都有自己的“权重”条目。
截至目前,它默认为“10”

假设我有一系列收藏夹,
相应的权重是这样的:

  • 1
  • 2
  • 3
  • 4

如果我要按“2”上的“向下”箭头,我必须为其权重加上 +1。
这将导致:

  • 1
  • 3
  • 3
  • 4

但我只想用最喜欢的 '3' 的重量切换最喜欢的 '2'。
我需要一种方法来确保当每个项目的权重按隐含的方式发挥作用时。 因为只是加或减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;
  }
}

我应该如何解决这个问题?

【问题讨论】:

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


    【解决方案1】:

    如果您的所有收藏的权重不同,您可以简单地将“起床”的weight 字段与“下车”的人交换,或者在减少权重时反向。不过你得弄清楚代码

    【讨论】:

    • 我认为这个想法有一些优点;我想我会试试看。
    【解决方案2】:

    因为只有很少的项目,我会将整个订单保存到数据库中,不仅是已移动的内容。:我对 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 一起发送到您的 php 更新程序。并更新您的数据库,使用收到的位置而不是权重。

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

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

    我推荐你 jquery 用于 javascript 工作,jquery 有一个不错的 sortable plugin。但是ajax stuf 也很棒。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-06-10
      • 2014-12-25
      • 1970-01-01
      • 2023-02-21
      • 2017-01-21
      • 1970-01-01
      • 2013-12-08
      • 1970-01-01
      相关资源
      最近更新 更多