Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Изменить позицию статьи относительно остальных статей
 
 автор: Xickan   (09.03.2008 в 21:20)   письмо автору
 
 

Здраствуйте.
Подскажите пож. как сделать смену позиций статьи, меню как в Joamla.
Т.е при нажатии "вверх" статья подымается на 1 позицию вверх и наобарот.

Надеюсь, что вы меня поняли.
Если не понятно то прикрепил имдж.

Заранее спс.

   
 
 автор: Киналь   (10.03.2008 в 00:49)   письмо автору
 
   для: Xickan   (09.03.2008 в 21:20)
 

В смысле визуально, на странице редактирования, или при выводе пользователю? Во втором случае это можно сделать добавлением еще одного поля в таблицу со статьями, и при занесении статьи в БД присваивать ему значение, совпадающее с id (который указан как primary key). А для изменения порядка менять значение этого поля. То есть, например, пятую статью вывести в начале: статье №5 записываем в это поле единицу, и всем статьям с №1 по №4 прибавляем по единице в это самое поле.

   
 
 автор: Xickan   (10.03.2008 в 17:01)   письмо автору
 
   для: Киналь   (10.03.2008 в 00:49)
 

Я имел виду в странице администрирования. Есть список статей и можно менять позицию статьи относительно других, тем самым изменяется и позиция на сайте.

Просто для изменения позиции одной статьи приходиться делать много запросов в бд.
Хотел узнать ваши мнения. Может кто-нибудь сталкивался с этим.

   
 
 автор: Киналь   (10.03.2008 в 18:00)   письмо автору
 
   для: Xickan   (10.03.2008 в 17:01)
 

Дык, как я предлагаю - всего два запроса получается: присвоить статье с "ордером"=5 ордер=1, и увеличить на единицу ордер у всех статей с ордером >0 и <5 (исключив перемещаемую статью с пмощью id).
Звучит путано, но, надеюсь. разберетесь)

   
 
 автор: Xickan   (10.03.2008 в 18:29)   письмо автору
 
   для: Киналь   (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.

Вроде алгоритмом все ясно, но...

   
 
 автор: Xickan   (10.03.2008 в 18:41)   письмо автору
 
   для: Киналь   (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();

   
 
 автор: Киналь   (10.03.2008 в 19:15)   письмо автору
 
   для: Xickan   (10.03.2008 в 18:41)
 

Хм. А что вам не нравится-то, если всё работает?)

   
 
 автор: Xickan   (10.03.2008 в 19:18)   письмо автору
 
   для: Киналь   (10.03.2008 в 19:15)
 

ну, в том, что она не работает...((

   
 
 автор: Киналь   (10.03.2008 в 20:06)   письмо автору
 
   для: Xickan   (10.03.2008 в 19:18)
 

Что значит "не работает"? Выдает ошибки? Или выполняет неверные действия? На каком этапе происходит сбой? Каковы при этом значения переменных, соответствуют ли они ожидаемым значениям?

   
 
 автор: Xickan   (10.03.2008 в 20:13)   письмо автору
 
   для: Киналь   (10.03.2008 в 20:06)
 

неверно заполняет. к тому же почему то зацикливается.

   
 
 автор: Киналь   (10.03.2008 в 20:17)   письмо автору
 
   для: Xickan   (10.03.2008 в 20:13)
 

Попробуйте выводить значения всех переменных и следите за ними - где наблюдаетмся отклонение от ожидаемого результата?

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования