Заказывать массив с весами? - PullRequest
1 голос
/ 02 сентября 2011

Проблема

Прямо сейчас я должен создать это:
Module

В моей базе данных;каждый фаворит в качестве своей записи «веса».
На данный момент по умолчанию он равен «10»

Допустим, у меня есть массив фаворитов,
веса соответственно выглядят так:

  • 1
  • 2
  • 3
  • 4

Если бы я нажалСтрелка «вниз» на «2». Мне нужно добавить +1 к его весу.
Что приведет к:

  • 1
  • 3
  • 3
  • 4

Но я просто хочу поменять любимое «2» на вес любимого «3».
Мне нужен способ, чтобы при весахдля каждой функции элемента, как они подразумеваются.Поскольку простое добавление или вычитание 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 ]

2 голосов
/ 03 сентября 2011

, если все ваши фавориты весят по-разному, вы можете просто поменять поле weight на то, что «встает», на то, которое «падает», или наоборот, при уменьшении веса.Вы должны выяснить код, хотя

1 голос
/ 03 сентября 2011

поскольку есть только небольшие элементы, я бы сохранил весь заказ в базе данных, а не только то, что было перемещено. Я не знаю много о drupal, но я думаю, что это будет легко сделать, так как drupal - это php и javascriptbased.

каждый элемент в html имеет свой собственный идентификатор / индекс (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;  

отправьте itm с ajax в вашу программу обновления php и обновите вашу базу данных, используйте полученную позицию, а не веса.

теперь ваша база данных имеет что-то вроде этого:

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

Я рекомендую вам jquery для работы с javascript, jquery имеет хороший сортируемый плагин . Но он также хорош для ajax stuf. * ​​1020 *

...