|
|
|
| Допустим, есть такие модули, которые составляют горизонтальное меню:
Главная
Архив
Вчерашние новости
О нас - > Информация
- > Контакты
Делаю в базе отдельное поле pos, которое определит позицию каждого модуля. Не могу понять, как назначается эта позиция? Чтобы потом в запросе к базе сортировать по позиции.
И как будет в том случае, если я, например, между модулями "Архив" и "Вчерашние новости" вставлю, допустим, еще один модуль "Популярное". Какую позицию ему назначить?
Расскажите механизм.
Заранее спасибо. | |
|
|
|
|
|
|
|
для: Лена
(27.06.2008 в 11:56)
| | При вставке нового модуля (и вообще при любых изменениях порядка следования) надо пересчитывать поле pos. Вот и весь механизм :) | |
|
|
|
|
|
|
|
для: Axxil
(27.06.2008 в 12:03)
| | Как пересчитывать? Объясните, пожалуйста, на примере. Я же спросила, потому что не знаю, как это делается. | |
|
|
|
|
|
|
|
для: Лена
(27.06.2008 в 12:07)
| |
name pos
Главная 1
Архив 2
Вчерашние новости 3
О нас 4
|
Вы вставляете новый модуль в меню "Гостевая" и хотите его расположить после "Архива".
name pos
Главная 1
Архив 2
Гостевая 5
Вчерашние новости 3
О нас 4
|
Сортировка по pos выдаст "Гостевую" на последнем месте, а мы хотим на третьем. Поэтому нужно поле pos пересчитать. Т.е. гостевой назначить pos = 3, а все, у которых pos >=3 увеличить на единицу. | |
|
|
|
|
|
|
|
для: Axxil
(27.06.2008 в 12:15)
| | Как вот эти два запроса записать одной строкой?
<?
$pos = 3;
$query = "UPDATE `modules` SET `pos`= $pos WHERE `name`='gostevaja';
$query = "UPDATE `modules` SET `pos`= $pos+1 WHERE `pos`>=$pos;
?>
|
Потому что когда я устанавливаю для гостевой позицию 3, у меня уже есть такая позиция у другого модуля... | |
|
|
|
|
|
|
|
для: Лена
(27.06.2008 в 12:07)
| | Нужно при каждом добавлении/удалении модуля, делать запрос:
<?
$pos = 1; //например, позция нового модуля
//заданная в интерфейсе управления модулями
mysql_query("UPDATE modules SET pos=pos+1 WHERE pid=0 AND pos > $pos-1");
//если это субмодуль, то во WHERE надо указывать id родителя
//если модуль удаляется, то соответственно SET pos=pos-1, и pos > $pos
|
| |
|
|
|