|
|
|
| Здраствуйте.
Подскажите пож. как сделать смену позиций статьи, меню как в Joamla.
Т.е при нажатии "вверх" статья подымается на 1 позицию вверх и наобарот.
Надеюсь, что вы меня поняли.
Если не понятно то прикрепил имдж.
Заранее спс. | |
|
|
|
|
|
|
|
для: Xickan
(09.03.2008 в 21:20)
| | В смысле визуально, на странице редактирования, или при выводе пользователю? Во втором случае это можно сделать добавлением еще одного поля в таблицу со статьями, и при занесении статьи в БД присваивать ему значение, совпадающее с id (который указан как primary key). А для изменения порядка менять значение этого поля. То есть, например, пятую статью вывести в начале: статье №5 записываем в это поле единицу, и всем статьям с №1 по №4 прибавляем по единице в это самое поле. | |
|
|
|
|
|
|
|
для: Киналь
(10.03.2008 в 00:49)
| | Я имел виду в странице администрирования. Есть список статей и можно менять позицию статьи относительно других, тем самым изменяется и позиция на сайте.
Просто для изменения позиции одной статьи приходиться делать много запросов в бд.
Хотел узнать ваши мнения. Может кто-нибудь сталкивался с этим. | |
|
|
|
|
|
|
|
для: Xickan
(10.03.2008 в 17:01)
| | Дык, как я предлагаю - всего два запроса получается: присвоить статье с "ордером"=5 ордер=1, и увеличить на единицу ордер у всех статей с ордером >0 и <5 (исключив перемещаемую статью с пмощью id).
Звучит путано, но, надеюсь. разберетесь) | |
|
|
|
|
|
|
|
для: Киналь
(10.03.2008 в 18:00)
| | Покажу алгоритм работы на конкретном примере.
Например поднять на 1 поз. вверх.
Apples - id=5, pos=6
Banans- id=7, pos=7
-В обрабатывающий скрипт передается id статьи Apples=5;
-По иду выберается группа к которому относится данная статья -group_id=2(Fruits) ;
-Вычесляется max значение позиций группы - max=9;
-Вычисляется айди статьи, позиция которой равна pos=7, т.е id=7;
-Проверка на max значение если все ок, тогда - update pos=(6+1);
-Если первый запрос ок, тогда - update pos=(7-1) where id=7.
Вроде алгоритмом все ясно, но... | |
|
|
|
|
|
|
|
для: Киналь
(10.03.2008 в 18:00)
| | Вот и обрабатывающий скрипт:
$qur=mysql_query('SELECT * FROM item WHERE item_id='.intval($_GET['item_id']));
if($qur){
$q=mysql_fetch_array($qur);
$pid=$q['pid']; //gruppa
$p=$q['pos']+1;// new pos
$result=mysql_query('SELECT * FROM item WHERE pid='.$pid);
if($result){
$min_pos=1;
$max_pos=mysql_num_rows($result);//max
} else error();
if(mysql_query('UPDATE item SET pos=(pos-1) WHERE item_id='.intval($_GET['item_id']))){
if(mysql_query('SELECT * FROM item WHERE pos='.$p.' AND pid='.$pid)){
$r=mysql_fetch_array($query);
$k=$r['item_id'];//id stati
if(mysql_query('UPDATE item SET pos=(pos+1) WHERE item_id='.$k)){
echo "<HTML><HEAD><META HTTP-EQUIV='Refresh' CONTENT='0; URL='></HEAD></HTML>";
} else error();
} else error();
} else error();
} else error();
|
| |
|
|
|
|
|
|
|
для: Xickan
(10.03.2008 в 18:41)
| | Хм. А что вам не нравится-то, если всё работает?) | |
|
|
|
|
|
|
|
для: Киналь
(10.03.2008 в 19:15)
| | ну, в том, что она не работает...(( | |
|
|
|
|
|
|
|
для: Xickan
(10.03.2008 в 19:18)
| | Что значит "не работает"? Выдает ошибки? Или выполняет неверные действия? На каком этапе происходит сбой? Каковы при этом значения переменных, соответствуют ли они ожидаемым значениям? | |
|
|
|
|
|
|
|
для: Киналь
(10.03.2008 в 20:06)
| | неверно заполняет. к тому же почему то зацикливается. | |
|
|
|
|
|
|
|
для: Xickan
(10.03.2008 в 20:13)
| | Попробуйте выводить значения всех переменных и следите за ними - где наблюдаетмся отклонение от ожидаемого результата? | |
|
|
|