|
| |
|
|
| |
для: sirop
(11.07.2006 в 02:35)
| | | Действительно, всё оказалось проще, чем я думал :)
Спасибо за помощь и предложенные варианты! | |
| |
|
|
| |
|
|
| |
для: sirop
(11.07.2006 в 18:47)
| | |
id name pos
1 меню_1 1
3 меню_3 3
6 меню_6 6
|
Теперь, если нам надо поднять меню_6 на позицию выше, то мы попросту меняем значение pos с соседней строчкой:
id name pos
1 меню_1 1
3 меню_3 6
6 меню_6 3
|
И всех делов. | |
| |
|
|
| |
|
|
| |
для: sirop
(11.07.2006 в 13:31)
| | | >Я перепробовал несколько вариантов перемещения пунктов меню.
>Вариант, который предложил Lelik не подходит потому,
>что... например, вводим 7 пунктов меню, затем удалим 4,5, 6
>пункты. В поле таблицы образовалась "брешь". Теперь пункты
>меню следуют так: 1,2,3,7. Теперь, если последний пункт
>передвинуть вверх, то после одной попытки он станет номером
>6, потом 5 и т.д., пока не уберёться та "брешь". Нужно
>нажать несколько раз, чтобы всё-таки передвинуть его на
>верхгнюю позицию.
>Вручную менять можно, но хотелось бы автоматизировать как-то
>процесс одним нажатием кнопки.
>С помощью функции mysql_insert_id() тоже сомнительно.
Ну тогда при удалении из БД пунктов 4, 5, 6 и т. д. скриптом-обработчиком удаления данных пунктов меню UPDATE значения нижеидущих, после удаляемых, пунктов меню.
Например удаляем из some_table:
Сначала обновляем все
<?php
...
$query1 = "SELECT * FROM some_table WHERE id=".$_POST['id'];(или $_GET['id']);
$result = mysql_query($query1);
if($result) $pos = mysql_fetch_array($result);
$query2 = "UPDATE some_table SET pos+1 WHERE id!=$pos['id'] AND pos>$pos['pos']";
...
?>
|
Если все предыдущее с успехом происходит
Тогда удаляем
<?php
...
$query3 = "DELETE FROM some_table WHERE id = ".$_POST['id'];(или $_GET['id'])
...
?>
|
| |
| |
|
|
| |
|
|
| |
для: Loki
(11.07.2006 в 15:25)
| | | >>Наверное, это то же самое.
>Это не тоже самое. Читайте внимательнее.
Loki, прошу прощения, скорее всего я действительно не могу разобраться, но приведу пример:
по полю pos будем сортировать пункты меню.
1 меню_1
2 меню_2
3 меню_3
4 меню_4
5 меню_5
6 меню_6
Если сейчас передвигать пункты меню, то никаких сложностей не возникает.
Теперь удалим меню_5, меню_2 и меню_4. Поле pos теперь имеет такой вид:
1 меню_1
3 меню_3
6 меню_6
У нас образовалась дыра в порядке следования в поле pos.
Как избежать этого? | |
| |
|
|
| |
|
|
| |
для: sirop
(11.07.2006 в 13:31)
| | | >Наверное, это то же самое.
Это не тоже самое. Читайте внимательнее. | |
| |
|
|
| |
|
|
| |
для: sirop
(11.07.2006 в 02:35)
| | | Я перепробовал несколько вариантов перемещения пунктов меню. Вариант, который предложил Lelik не подходит потому, что... например, вводим 7 пунктов меню, затем удалим 4,5, 6 пункты. В поле таблицы образовалась "брешь". Теперь пункты меню следуют так: 1,2,3,7. Теперь, если последний пункт передвинуть вверх, то после одной попытки он станет номером 6, потом 5 и т.д., пока не уберёться та "брешь". Нужно нажать несколько раз, чтобы всё-таки передвинуть его на верхгнюю позицию.
Вручную менять можно, но хотелось бы автоматизировать как-то процесс одним нажатием кнопки.
С помощью функции mysql_insert_id() тоже сомнительно.
> Loki
>Завести еще один сполбец, где будет указан порядок сортировки меню. При сдвиге меню в какую-то сторону менять местами значения соседних строк.
Наверное, это то же самое.
Пока вижу только один способ, как указал Trianon : делать UPDATE для каждого пункта меню, где в столбце сортировки будет меняться порядок следования всех пунктов, чтобы не было "брешей" в порядке следования.
Это не лучший способ. Может есть вариант лучше? | |
| |
|
|
| |
|
|
| |
для: Trianon
(11.07.2006 в 11:29)
| | | Сходу на ум приходит только "метод пузырька"... То есть получается три запроса: убеждаемся что соседняя строчка существует и получаем ее pos, после чего изменяем обе строки. | |
| |
|
|
| |
|
|
| |
для: Loki
(11.07.2006 в 11:14)
| | | вот я тут сижу и думаю...
Допустим, меню хранится в таблице, в которой имеется поле pos
Как написать скрипт, который бы за минимум запросов перемещал строки c указаным $pid, со значиениями pos от $from по $to так, чтобы они располагались перед строкой с pos $before, либо в самый хвост, если $before > pos любой из имеющихся строк. | |
| |
|
|
| |
|
|
| |
для: sirop
(11.07.2006 в 02:35)
| | | Завести еще один сполбец, где будет указан порядок сортировки меню. При сдвиге меню в какую-то сторону менять местами значения соседних строк. | |
| |
|
|
| |
|
|
| |
для: sirop
(11.07.2006 в 02:35)
| | | Можно сделать самому функцию: то-есть каждый пункт меню по-умолчанию будет получать номера по счёту (от 1 и до последнего) и при нажатии на ссылку, например "передвинуть вверх" будет получать $pos-1($pos - это позиция пункта меню до изменения), а пункт меню находящийся над передвегаемым $pos+1. Или вводить в поля для изменения текста номера пунктов меню и вручную устанавливать номер пункта меню по принципу все у чего номер равен или ниже позиции изменяемого пункта меню получет значение $pos+1. Также ещё эту задачу можно решить с помощью функции mysql_insert_id(), только в этом способе я сам ещё не разобраля, а кто уже разобрался то про этот метод можно по-подробнее | |
| |
|
|
|