Какая разница кто эти списки будет готовить?
Вот как понять "опции уже в базе"? Если код списков готовятся, значит нет никаких опций в базе, есть данные для них, и вам не опции запрещать надо, а описать группу в списке, а делается это тем, на что я давал ссылку - ознакомились? А для того чтобы это сделать, нужно соответствующие этому данные получить, структуру их, а дальше уже копейки. |
laimas, Это для вас копейки, так как вы знаете что и как, а для меня ж*па...
|
:D
Копейки, уверяю. Я не знаю как делается запрос на сервере и что возвращает, но принцип должен быть следующим - запрос должен возвращать записи, которые отсортированы по родителю. Вот пример, где объект, это возвращенный сервером запрос в базу. name_group - это имя группы (в ответе может быть и id группы, если нужен, в дальнейшем можно и по нему расклад делать, но это не столь важно), два остальных параметра, это параметры опций. Ну и собственно само построение списка: <html> <head> <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script> <script> var s = [ { name_group : 'name 1', id_option : 2, name_option : 'option 1' }, { name_group : 'name 1', id_option : 3, name_option : 'option 2' }, { name_group : 'name 1', id_option : 4, name_option : 'option 3' }, { name_group : 'name 2', id_option : 5, name_option : 'option 4' }, { name_group : 'name 2', id_option : 6, name_option : 'option 5' }, { name_group : 'name 2', id_option : 7, name_option : 'option 6' } ], sel, grp, name; $(function() { sel = $('<select/>').appendTo('body'); $.each(s, function() { if(this.name_group != name) { name = this.name_group; grp = $('<optgroup label="'+name+'"/>').appendTo(sel); } grp.append('<option value="'+this.id_option+'">'+this.name_option+'</option>') }); }); </script> </head> <body> </body> </html> Здесь работа с DOM, правда в среде jQuery, собственно и просто на JS будет тоже самое, суть, ну чуть больше строк кода будет. Ваш же код подготавливает строку описывающую html-код списка, и так же нужно было бы поступать и на сервере. И если поступать так, то чуть изменится суть, но принцип будет тот же. Сперва в строку открывающие теги списка и группы, а далее сравнение переменной с текущей группой, и если не равно, то присвоить ей текущую группы, и добавить в строку закрывающий и открывающий теги группы. А теги опций последовательно после условия. После цикла закрывающий тег группы и списка. Это разве сложно? :) |
Спасибо за ваш труд, но я по вашему не сделаю так как банально сойду с ума))) Там три страны, и в каждой области есть города, в каждом городе есть районы и пригороды)) Там их столько что даже страшно представить...
А вот как список строится в базе Район район 1 район2 район 3 Пригород пригород 1 пригород 2 пригород 3 Район и Пригород это тоже самое что и (район 1 или пригород 1...) И Пригород имеет id_value в таблице cat_board_listv И Район имеет id_value в таблице cat_board_listv То есть, все в куче, слезы на глазах, и сожаление что подписался на это все... Вот и хочется как-то через id_value заблокировать выбор, или может к каждому "району" и "пригороду" приписать что-то в базе что бы нельзя было выбрать...? |
Думаю, что вам не придет в голову вывалить один список включающий в себя все страны, в них города, а в них районы и пригороды. Такие вещи выводятся связанными списками, последовательно, а значит это не есть условие, которое не позволяет решить данную задачу. SQL же и РНР как то по барабану чего там в базе, первый будет отдавать то что просят, второй выводить что получено согласно сценария. То есть это тоже не есть проблема.
А вот если списки хранятся в базе действительно так: Район район 1 район2 район 3 Пригород пригород 1 пригород 2 пригород 3 Район и Пригород это тоже самое что и (район 1 или пригород 1...) то это не только проблема, это вообще несуразица. Какой смысл от этого списка, если каждая опция его не имеет идентификатора, вы что собираетесь в запросах клиента и к базе парсить строку эту? Пока в базе не будет наведен порядок, и говорить о чем-то нет смысла. |
а разве нельзя сделать как-то так, что бы через скрипт блокировать?
Типа, скрипт находит id опции и приписывает к ней disabled? |
И каким образом это можно сделать, если Район и Пригород это тоже самое что и (район 1 или пригород 1...)? Конечно можно и повыпендриваться условием и подогнать под нужное, но во-первых, и не впервой повторяется, что нужно не блокировать, а выделить группы. А во-вторых нужно иметь порядок в базе, а не колотить костыли в код.
Цитата:
Данные в базе должны быть структурированы, и коли речь о странах, городах и их районах, то - есть таблица стран, есть таблица городов и есть таблица районов. Таблицы связаны по первичному ключу. Таблица районов (в примере table_district) содержит поле собственного идентификатора, идентификатор города, которому принадлежит район. Связь города со страной осуществляется по таблице городов. Принадлежность к пригороду или району нужно определять не идентификатором записи, а полем типа SET с двумя значениями. Дамп таблицы: Код:
-- Структура таблицы `table_district` $q = mysql_query('SELECT id_district, name, district FROM table_district WHERE id_city=2 ORDER BY district'); while($r = mysql_fetch_assoc($q)) $json[] = $r; exit(json_encode($json, JSON_UNESCAPED_UNICODE)); Клиент получит JSON: Код:
[ |
laimas,
Я действительно тупо объяснил, попробую по другому, не будем рассматривать районы и пригороды как таковые. Возьмем другие значения Имеем select Утюги Опций для построение списка для "Утюги" Тип подошвы (id=1) тип 1 (id=2) тип 2 (id=3) тип 3 (id=4) Материал корпуса (id=5) Материал 1 (id=6) Материал 2 (id=7) Материал 3 (id=8) Задача таже: запретить выбор в списке "Тип подошвы" и "Материал корпуса" все остальное выбирать в списке можно... Разделять список на "Тип подошвы" и "Материал корпуса" нельзя, так как там такое кол-во этих свойств что просто ужас... P.S. Благодарю за то что не забили... |
Вы что издеваетесь? Как можно запретить некий ID, а остальные пожалуйста?
Приведенное выше, это характеристики товара, а их не содержат в одном поле поле таблицы, это значит, что каждая группа характеристик, это свой уникальный ключ. Дальше пояснять? |
Часовой пояс GMT +3, время: 07:32. |