За последние 24 часа нас посетили 20282 программиста и 1706 роботов. Сейчас ищут 1588 программистов ...

Сортировка с помощью динамического Select-a

Тема в разделе "JavaScript и AJAX", создана пользователем lencic, 16 мар 2010.

  1. lencic

    lencic Активный пользователь

    С нами с:
    19 ноя 2009
    Сообщения:
    26
    Симпатии:
    0
    Доброго времени суток.

    У меня появилась маленькая проблемка которая я так поняла можно сделать с помощью JS..
    Так вот я подумала может вы мне поможете, а то я в JS не очень разбираюсь.
    Объясняю в чем мой вопрос:
    Так вот, у меня есть две таблицы (categorii и pag).В обеих таблицах есть поле sortirovka. С помощью динамического Select-a я сделала так чтобы когда я выбираю из первого Select-a категорию то во втором Select-е появляется подкатегории выбранной категории. Я нашла JS код который с помощью кнопок передвигает выбранную категорию или подкатегорию вверх и вниз в списке. Так вот мне нужен код который создаст номер сортировки и отправит этот номер в базу данных. То есть, если я выбираю 1 категорию и у нее есть 3 подкатегории то вот номера сортировки для второй таблицы должны быть 11,12,13
    а если 2-ю категорию и у нее есть 4 подкатегории то номера сортировки для второй таблицы должны быть 21,22,23,24. А для категории остается простой номер (1,2,3,4...)
    Я так поняла что эти номера тоже динамичные ведь когда меняется номер сортировки категории автоматически должны менятся номера для подкатегории.
    Надеюсь вы поняли что я имею ввиду.

    Если надо я напишу код PHP и JS с Select-ом

    PHP:
    1.  
    2. <head>
    3. <title>Dynamic Dropdown</title>
    4. <script language="JavaScript" type="text/javascript" src="function.js"></script>
    5. </head>
    6. <script language="javascript">
    7. function setOptions(chosen) {
    8.   var selbox = document.menu.list2;
    9.    
    10.   selbox.options.length = 0;
    11.   if (chosen == "0") {
    12.     selbox.options[selbox.options.length] = new Option('Выбирайте категорию','0');
    13.    
    14.   }
    15.   <?
    16.  
    17.   $cat_result = mysql_query("SELECT * FROM categorii ") or die(mysql_error());
    18.   while($c = mysql_fetch_array($cat_result))
    19.   {
    20.   ?>
    21.     if (chosen == <?=$c['id'];?>) {
    22.      
    23.     <?
    24.     $c_id = $c['id'];
    25.     $mod_result = mysql_query("SELECT * FROM pag WHERE idc='$c_id' ") or die(mysql_error());
    26.     while($m=mysql_fetch_array($mod_result))
    27.     {
    28.     ?>
    29.       selbox.options[selbox.options.length] = new
    30.       Option('<?=$m['title'];?>',<?=$m['idp'];?>);
    31.     <?
    32.     }
    33.     ?>
    34.     }
    35.   <?
    36.   }
    37.   ?>
    38. }
    39. </script>
    40. </head>
    41. <body>
    42.  
    43.  
    44.  
    45. <form name="menu" method=POST action="select2.php" onSubmit="">
    46. <div align="center">
    47.  
    48. <select name="list1" id="list1" size="10"
    49. onchange="setOptions(document.menu.list1.options
    50. [document.menu.list1.selectedIndex].value);">
    51.  
    52. <?
    53. $result = mysql_query("SELECT * FROM categorii ORDER BY sortirovka") or die(mysql_error());
    54. while(@($r=mysql_fetch_array($result)))
    55. {
    56. ?>
    57.   <option value="<?=$r['id'];?>"><?=$r['title'];?></option>
    58. <?
    59. }
    60. ?>
    61. </select><br><br>
    62. <select name="list2" size="5">
    63. <option value=" " selected>Выбирайте категорию</option>
    64. </select><br><br>
    65. <input class="navBut" type="button" value="/\"   onclick="Move(document.menu,-1)"><br>
    66.         <input class="navBut" type="button" value="\/"   onclick="Move(document.menu,1) "><br>
    67.        
    68. </div></form>
    69.     <div align="center"><br>
    70.           <input name=menu type=hidden>
    71.           <input type=submit class="" name="submit" value=Apply>
    72.  
    function.js это код который перемещает элементы списка.

    Вот это первая таблица
    [sql]CREATE TABLE IF NOT EXISTS `categorii` (
    `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
    `body` text NOT NULL,
    `title` varchar(255) NOT NULL DEFAULT '',
    `sortirovka` int(11) NOT NULL DEFAULT '0',
    PRIMARY KEY (`id`)
    ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=6 ;[/sql]

    а это вторая таблица
    [sql]CREATE TABLE IF NOT EXISTS `pag` (
    `idp` int(10) unsigned NOT NULL AUTO_INCREMENT,
    `idc` int(10) NOT NULL,
    `body` text NOT NULL,
    `title` varchar(255) NOT NULL DEFAULT '',
    `sortirovka` int(11) NOT NULL DEFAULT '0',
    PRIMARY KEY (`idp`)
    ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=7 ;
    [/sql]

    ID и IDC это связь между таблицами

    Очень надеюсь на вашу помощь
     
  2. lexa

    lexa Активный пользователь

    С нами с:
    22 июл 2007
    Сообщения:
    1.746
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    Выборка не динамическая. Да, на взгляд (конечного пользователя, выбирающего менюшки в браузере) она динамическая, но это обман.

    У тебя выбираются все категории. Пользователь загружает страницу и все категории уже выбраны, манипулировать сортировкой динамически ты не сможешь.

    Как я понял. Не факт, что верно. Тебе просто следует делать сортировку при селекте из pag:
    [sql]SELECT * FROM pag WHERE idc='$c_id' " order by `sortirovka`[/sql]

    Тогда они сразу будут выбраны в отсортерованном тобой порядке.
     
  3. lencic

    lencic Активный пользователь

    С нами с:
    19 ноя 2009
    Сообщения:
    26
    Симпатии:
    0
    Ну так я это делаю .. Но ведь так я должна менять номера в sortirovka прямо в базе данных но мне надо через интерфейс. Разве этого нельзя сделать?

    А почему выборка не динамическая?
    Разве этот запрос не запрашивает из второй таблицы только те элементы которые соответсвует запросу IF?
    Вот здесь где IF:
    PHP:
    1. <?
    2.  
    3.   $cat_result = mysql_query("SELECT * FROM categorii ") or die(mysql_error());
    4.   while($c = mysql_fetch_array($cat_result))
    5.   {
    6.   ?>
    7.     if (chosen == <?=$c['id'];?>) {
    8.      
    9.     <?
    10.     $c_id = $c['id'];
    11.     $mod_result = mysql_query("SELECT * FROM pag WHERE idc='$c_id' ") or die(mysql_error());
     
  4. lexa

    lexa Активный пользователь

    С нами с:
    22 июл 2007
    Сообщения:
    1.746
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    У изначально ошибка с сортировкой. Во-первых, нафига тебе поле sortirovka, если не для сортировки? Во-вторых, как ты себе представляешь сортировку типа 21, 22, 23, 24, если поля не отсортированы при селекте? Ладно, можно сделать сортировку самого массива, но MySQl выводит строки по порядку: начинает с первой, заканчивает последней. В твоём примере первая - 1, последняя - 4. Массив не отсортируется потому что он уже так отсортирован.

    Короче, ты хочешь то, что не имеет смысла.

    JavaScript выполняется на стороне клиента (в браузере), а PHP на сервере. Система такая:
    пользователь вводит УРЛ, браузер шлёт заголовки серверу, запускается PHP, обрабатывается, браузер парсит HTML, браузер обрабатывает JavaScript. В реальности всё чуть сложнее, но примерно так.

    Код (Text):
    1. if (chosen == <?=$c['id'];?>) {
    Открой исходнй текст в браузере и увидишь что-то вроде:
    Код (Text):
    1. if (chosen == 2) {
    PHP обработался уже, а JavaScript ждёт, когда будут активированы селекты и тогда приступит к выполнению.
     
  5. Volt(220)

    Volt(220) Активный пользователь

    С нами с:
    11 июн 2009
    Сообщения:
    1.640
    Симпатии:
    1
    AJAX?

    Я так понял, что подкатегории хранятся в другой таблице и имеют ссылки на родительские категории.
    1)Имеет ли смысл сортировка всех подкатегорий? Т.е. почему бы не сортровать подкатегории внутри категории:
    категория 1 - подкатегория 1, подкатегория 2, подкатегория 3
    категория 2 - подкатегория 1, подкатегория 2, подкатегория 3
    Хотя если мы хотим выбрать все и сразу может иметь смысл именно Ваша организация...

    2)Мне приходит в голову два способа изменения сортировки:
    а)На каждое нажатие кнопки посылать ajax'ом id и направление перемещения.
    далее уже через sql делать соответствующие update'ы.
    б)Сделать кнопку "Подтвердить". При нажатии на эту кнопку на сервер отправляются массивы с id и новым значением сортировки. Далее посылается запрос для приведения информации в БД в соответствие массивам.

    3)Да и динамический select можно на ajax перевести...
     
  6. lencic

    lencic Активный пользователь

    С нами с:
    19 ноя 2009
    Сообщения:
    26
    Симпатии:
    0
    Volt(220)

    а как делается через AJAX? Можно по подробнее?
     
  7. Volt(220)

    Volt(220) Активный пользователь

    С нами с:
    11 июн 2009
    Сообщения:
    1.640
    Симпатии:
    1
    По подробнее это книга на 549 страниц =))

    Самый простой способ (которым, каюсь, пользуюсь я) это взять js framework и использовать его возможности.
    Одним из самых популярных является JQuery.
    Конкретно методы работы с ajax и на русском:
    http://jquery-docs.ru/Ajax/
    http://anton.shevchuk.name/javascript/j ... ners-ajax/
    Советую посмотреть в сторону getJSON.
     
  8. lencic

    lencic Активный пользователь

    С нами с:
    19 ноя 2009
    Сообщения:
    26
    Симпатии:
    0
    ок. спасибо большое