05.01.2016, 12:15
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
Какая разница кто эти списки будет готовить?
Вот как понять "опции уже в базе"? Если код списков готовятся, значит нет никаких опций в базе, есть данные для них, и вам не опции запрещать надо, а описать группу в списке, а делается это тем, на что я давал ссылку - ознакомились?
А для того чтобы это сделать, нужно соответствующие этому данные получить, структуру их, а дальше уже копейки.
|
|
07.01.2016, 03:55
|
Интересующийся
|
|
Регистрация: 04.01.2016
Сообщений: 11
|
|
laimas, Это для вас копейки, так как вы знаете что и как, а для меня ж*па...
|
|
07.01.2016, 04:12
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
Копейки, уверяю. Я не знаю как делается запрос на сервере и что возвращает, но принцип должен быть следующим - запрос должен возвращать записи, которые отсортированы по родителю. Вот пример, где объект, это возвращенный сервером запрос в базу. 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-код списка, и так же нужно было бы поступать и на сервере. И если поступать так, то чуть изменится суть, но принцип будет тот же. Сперва в строку открывающие теги списка и группы, а далее сравнение переменной с текущей группой, и если не равно, то присвоить ей текущую группы, и добавить в строку закрывающий и открывающий теги группы. А теги опций последовательно после условия. После цикла закрывающий тег группы и списка.
Это разве сложно?
|
|
08.01.2016, 00:28
|
Интересующийся
|
|
Регистрация: 04.01.2016
Сообщений: 11
|
|
Спасибо за ваш труд, но я по вашему не сделаю так как банально сойду с ума))) Там три страны, и в каждой области есть города, в каждом городе есть районы и пригороды)) Там их столько что даже страшно представить...
А вот как список строится в базе
Район
район 1
район2
район 3
Пригород
пригород 1
пригород 2
пригород 3
Район и Пригород это тоже самое что и (район 1 или пригород 1...)
И
Пригород имеет id_value в таблице cat_board_listv
И
Район имеет id_value в таблице cat_board_listv
То есть, все в куче, слезы на глазах, и сожаление что подписался на это все...
Вот и хочется как-то через id_value заблокировать выбор, или может к каждому "району" и "пригороду" приписать что-то в базе что бы нельзя было выбрать...?
|
|
08.01.2016, 07:03
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
Думаю, что вам не придет в голову вывалить один список включающий в себя все страны, в них города, а в них районы и пригороды. Такие вещи выводятся связанными списками, последовательно, а значит это не есть условие, которое не позволяет решить данную задачу. SQL же и РНР как то по барабану чего там в базе, первый будет отдавать то что просят, второй выводить что получено согласно сценария. То есть это тоже не есть проблема.
А вот если списки хранятся в базе действительно так:
Район
район 1
район2
район 3
Пригород
пригород 1
пригород 2
пригород 3
Район и Пригород это тоже самое что и (район 1 или пригород 1...)
то это не только проблема, это вообще несуразица. Какой смысл от этого списка, если каждая опция его не имеет идентификатора, вы что собираетесь в запросах клиента и к базе парсить строку эту?
Пока в базе не будет наведен порядок, и говорить о чем-то нет смысла.
|
|
09.01.2016, 13:21
|
Интересующийся
|
|
Регистрация: 04.01.2016
Сообщений: 11
|
|
а разве нельзя сделать как-то так, что бы через скрипт блокировать?
Типа, скрипт находит id опции и приписывает к ней disabled?
|
|
09.01.2016, 14:18
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
И каким образом это можно сделать, если Район и Пригород это тоже самое что и (район 1 или пригород 1...)? Конечно можно и повыпендриваться условием и подогнать под нужное, но во-первых, и не впервой повторяется, что нужно не блокировать, а выделить группы. А во-вторых нужно иметь порядок в базе, а не колотить костыли в код.
Сообщение от Alex921
|
Район и Пригород это тоже самое что и (район 1 или пригород 1...)
И
Пригород имеет id_value в таблице cat_board_listv
И
Район имеет id_value в таблице cat_board_listv
|
Может все таки не строкой в базе се описано, коли есть идентификаторы и "одно и тоже", а просто вы не можете пояснить толково что имеется в базе?
Данные в базе должны быть структурированы, и коли речь о странах, городах и их районах, то - есть таблица стран, есть таблица городов и есть таблица районов. Таблицы связаны по первичному ключу. Таблица районов (в примере table_district) содержит поле собственного идентификатора, идентификатор города, которому принадлежит район. Связь города со страной осуществляется по таблице городов. Принадлежность к пригороду или району нужно определять не идентификатором записи, а полем типа SET с двумя значениями.
Дамп таблицы:
Код:
|
-- Структура таблицы `table_district`
CREATE TABLE IF NOT EXISTS `table_district` (
`id_district` int(11) NOT NULL AUTO_INCREMENT COMMENT 'Иентификатор района',
`id_city` int(11) NOT NULL COMMENT 'Идентификатор города',
`name` varchar(150) NOT NULL COMMENT 'Наименование района'',
`district` set('Пригород','Район') NOT NULL COMMENT 'Район/Пригород',
PRIMARY KEY (`id_district`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=14 ;
-- Дамп данных таблицы `table_district`
INSERT INTO `tmp` (`id_district`, `id_city`, `name`, `district`) VALUES
(8, 2, 'Имя 1', 'Пригород'),
(9, 1, 'Имя2', 'Район'),
(10, 2, 'Имя 3', 'Район'),
(11, 2, 'Имя 4', 'Район'),
(12, 2, 'Имя 5', 'Пригород'),
(13, 2, 'Имя 6', 'Пригород'); |
Пусть запрашиваются районы/пригороды города с ID=2:
$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:
Код:
|
[
{"id_district":"8","name":"Имя 1","district":"Пригород"},
{"id_district":"12","name":"Имя 5","district":"Пригород"},
{"id_district":"13","name":"Имя 6","district":"Пригород"},
{"id_district":"10","name":"Имя 3","district":"Район"},
{"id_district":"11","name":"Имя 4","district":"Район"}
] |
Как построить список показывалось.
Последний раз редактировалось laimas, 09.01.2016 в 14:23.
|
|
10.01.2016, 05:14
|
Интересующийся
|
|
Регистрация: 04.01.2016
Сообщений: 11
|
|
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. Благодарю за то что не забили...
|
|
10.01.2016, 10:56
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
Вы что издеваетесь? Как можно запретить некий ID, а остальные пожалуйста?
Приведенное выше, это характеристики товара, а их не содержат в одном поле поле таблицы, это значит, что каждая группа характеристик, это свой уникальный ключ. Дальше пояснять?
|
|
|
|