Просмотр полной версии : Связать два select
Доброго времени суток!
Есть форма с двумя select'ами: в первом свойства, а во втором значения свойств, при чём значения во второй список тянутся из базы в зависимости от выбора свойства. Таких пар select'ов может быть не ограниченно, есть кнопка, которая их добавляет в форму.
Как связать эти пары, чтобы каждый select знал где его пара.
P.S. Как подтягивать значения с базы ajax'ом я знаю.
Достаточно в общем то и индекса элемента в наборе, но сервер то понимает, что от него просят, а как? Ключ. Ну так и свяжите по ключам.
Достаточно в общем то и индекса элемента в наборе, но сервер то понимает, что от него просят, а как? Ключ. Ну так и свяжите по ключам.
Блин, как я сам не догадался. Спасибо!
А почему пары?
Я правильно понимаю - есть описанные свойства: A, B, C, D. Каждое из свойств обладает набором значений. Получается всего два списка.
Или речь о группах свойств?
А почему пары?
Я правильно понимаю - есть описанные свойства: A, B, C, D. Каждое из свойств обладает набором значений. Получается всего два списка.
Или речь о группах свойств?
Например, у объекта есть свойства "Форма" и "Цвет". При выборе в в одном селекте свойства "Форма" в списке значений парного селекта должны быть "Круг", "Квадрат" и т.д., а при выборе "Цвет" - "Красный", "Зелёный".
Вот и получаются пары селектов.
Ну так это все равно не пары же. Есть список свойств и если в каждом свойстве нужно выбрать значение, то это первый список + списки значений выбранных свойств, добавляемые динамически
warren buffet
16.09.2016, 12:25
парного
Тебе говорят не бывает таких пар как option - select.
Тебе говорят не бывает таких пар как option - select.
Зачем мне это говорить? Я этого не утверждал и не спрашивал об этом.
Ну так это все равно не пары же. Есть список свойств и если в каждом свойстве нужно выбрать значение, то это первый список + списки значений выбранных свойств, добавляемые динамически
Почему не пары? Есть две колонки селектов, в первой колонке селекты о свойствами, во второй селекты со значениями свойств. Получаются пары селектов.
https://i.gyazo.com/512a6d68367af60082f2d8398dcae929.png
Получаются пары селектов
Пусть есть объект в котором некие свойства разделены на группы, тогда еще да, пользователю будет удобно делать выбор если интерфейс также разделяет списки по этим наборам.
Но если есть свойства А, B, C, D, то для того чтобы выбрать в каждом из них совсем не обязательно иметь четыре дубликата списка свойств.
warren buffet
17.09.2016, 18:12
селекты о свойствами, во второй селекты со значениями свойств.
Тебя и не понимают, потому что так не делается. Семантика управления выбором свойств через тучу селектов в чем заключается? Какие свойства можно объединить в этом селекте, какие в том, и почему их нельзя перечислить в единственном?
Допустим есть такие свойства
Оттенок
Светлота
Насыщенность
Нормально, объединить можно
В другом будет
Яркость
Контрастность
Цветность
Ок.
И что это дает? Юзер все равно не увидит сопоставления вроде
Оттенок - 12
Светлота - 186
Насыщенность - 45
Поскольку всегда будет видно только 1 свойство и только 1 значение в паре.
Короче, хочешь делать пары - парься. Техническая проблема в чем была?
Связь свойство - список значений реализовать?
В первой колонке, где селекты со свойствами, все селекты одинаковы. В зависимости от выбора свойства в правой колонке, где селекты со значениями свойств, будут подгружаться связанные значения свойств.
По умолчанию выводится один селект со свойствами и рядом пустой селект со значениями. Есть кнопка, которой можно добавить неограниченное кол-во таких пар селектов.
Например, в левой колонке все селекты будут содержать Форма и Цвет. В зависимости от того, выбран Форма или Цвет, в левом селекте будет выбор Круглый, Квадрат и Прямоугольник или Красный, Зелёный и Синий. После выбора по нажатию на кнопку Сохранить данные заносятся в базу. При выборе определённого объекта можно увидеть, что он круглый красного цвета.
Вот как в этом примере http://programilla.com/blog/siteconstruction/231.html
Но у меня пар селектов может быть бесконечно много. Каждый имеет имя name = "characteristic[]" и name = "characteristic_value[]", т.к. при отправке формы в php это будут массивы. Я думал в js также, но видимо не так.
Как мне указать что при выборе свойства в левом селекте, данные выгружались в селект, который слева от него.
Shurik,
если в базе есть свойства с возможностью их добавления/редактирования, то обычно это отдельная таблица, а значения этих свойств, это таблица связанная по первичному ключу таблицы свойств.
Если нужно выбрать значения этих свойств, то серверу в конечном итоге необходимо получить только результат выбора значений, самого списка свойств, а тем более кучи их дубликатов (по числу выбранных значений) совсем не требуется.
И так, пусть есть свойства в базе под ID 11, 22, 33, 44, и связанными с ними по этому ключу значениями. В примере это описано объектом.
Выбор каждого свойства строит список связанный в имени его по ключу выбранного свойства. Список свойств вообще не имеет имени, ибо серверу он не нужен, и при каждом выборе свойства выбранная опция удаляется из списка свойств. Она ведь уже не нужна, список ее значений уже сформирован у клиента. А если выбраны все свойства в списке, то его можно вообще удалить из формы.
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
<script>
var lst = {
'11' : {'111' : 'Aa', '112' : 'Ab', '113' : 'Ac'},
'22' : {'221' : 'Ba', '222' : 'Bb', '223' : 'Bc'},
'33' : {'331' : 'Ca', '332' : 'Cb', '333' : 'Cc'},
'44' : {'441' : 'Da', '442' : 'Db', '443' : 'Dc'}
};
$(function() {
$('#chc').change(function() {
if(this.length==2) $(this).remove();
if(this.value) {
var i = $(this).find(':selected');
$('#opt').append( '<label>Своство '+i.text()+
'</label><select name="opt['+this.value+']"><option value="">Выберите значение...</option>' +
$.map(lst[this.value], function(v, k) {
return '<option value="' + k + '">' + v + '</option>'
}).join() + '</select>');
i.remove()
}
})
});
</script>
</head>
<body>
<select id="chc">
<option value="">Выберите свойство...</option>
<option value="11">A</option>
<option value="22">B</option>
<option value="33">C</option>
<option value="44">D</option>
</select>
<div id="opt"></div>
</body>
</html>
При отправке формы сервер получит массив, в котором ключи есть идентификаторы свойств из таблицы свойств, а значения, это идентификаторы их значений из таблицы значений. Серверу не сложно по ключу получить имя свойства, а по ключу и значению имя значения. Зачем куча списков?
warren buffet
19.09.2016, 09:33
В первой колонке, где селекты со свойствами, все селекты одинаковы.
Так не делают. Но ты делай, тебе можно.
Это круто, спасибо.
Есть один вопрос. Я так понял, что эта строка
if(this.length==2) $(this).remove();
сбрасывает выбор свойства, но почему 2?
Эта строка не сбрасывает выбор свойства, эта строка удаляет список свойств из формы если в нем выбирается последняя опция. С первой опцией чисто информативной на этот момент список будет содержать 2 опции, так как при выборе свойства выбранная опция удаляется из списка свойств - i.remove().
PS. Можно и не удалять выбранные опции свойств, но при этом прежде чем запрашивать сервер нужно проверять был ли уже запрос по этой опции, то есть имеется ли список ее у клиента. И сам список свойств не удалять, просто не именовать его.
Эта строка не сбрасывает выбор свойства, эта строка удаляет список свойств из формы если в нем выбирается последняя опция. С первой опцией чисто информативной на этот момент список будет содержать 2 опции, так как при выборе свойства выбранная опция удаляется из списка свойств - i.remove().
PS. Можно и не удалять выбранные опции свойств, но при этом прежде чем запрашивать сервер нужно проверять был ли уже запрос по этой опции, то есть имеется ли список ее у клиента. И сам список свойств не удалять, просто не именовать его.
Понял, спасибо.
Ребят, уже 3 день пытаюсь реализовать идею и она очень схожа с названием темы. В краце ситуация следующая:
Пишу на Python с фреймворком Django сайт- тестовый.
И столкнулся с такой проблемой.
Есть страница с таблицей(5 полей).
В нее по форме можно добавлять значение на этой же странице.
С помощью Jquery и Java Script, сделал автодобавление форм(чтобы добавить допустим сразу 6 значений за раз). Это все отрабатывает и формы появляются по кнопке "Добавить поле".
Теперь задача связать в каждой форме первое поле селект с зависимым вторым c Id=Title.
Грубо говоря первое поле Марка, а второе поле Модели(они подгружаются из базы жава скриптом).
На данный момент проблема в том, что при добавлении форм, все поля ее добавляются автоматический с id="id_form-0-buy_tabako_brand" name="form-0-buy_tabako_brand", естественно они инкременты.
Как мне написать Java-script, который будет следить за точным названием ид, и при его изменении(Смена Марки), подгрузить в нужную зависимую форму все Модели..
Сейчас это работает только с первой формой, а остальные формы, подгружаются лишь по Марке первой формы.
Код:
<div class="item row">
<div class="large-2 columns">
<label>Бренд</label>
<select id="id_form-0-buy_tabako_brand" name="form-0-buy_tabako_brand">
<option value="" selected="selected">---------</option>
<option value="1">Alfakher</option>
<option value="2">Habibi</option>
</select>
</div>
<div class="large-2 columns">
<label>Тип</label>
<select id="title">
<option value="" selected="selected">---------</option>
</select>
</div>
</div>
<div class="item row">
<div class="large-2 columns">
<label>Бренд</label>
<select id="id_form-1-buy_tabako_brand" name="form-1-buy_tabako_brand">
<option value="" selected="selected">---------</option>
<option value="1">Alfakher</option>
<option value="2">Habibi</option>
</select>
</div>
<div class="large-2 columns">
<label>Тип</label>
<select id="title">
<option value="" selected="selected">---------</option>
</select>
</div>
</div>
Сейчас есть вот такой код, который отслеживает состояние:
$(document).ready(function() {
$("#id_form-0-buy_tabako_brand").on('change', function title() {
var id = $(this).val();
$.ajax({
data: {'id': id},
url: '/tabako/add_cart/brand/',
type: 'get',
success: function (data) {
var html = ""
for (var i = 0; i < data.length; i++) {
html += '<option value="'+i+'">' + data[i].fields.tabako_titles_title + '</option>'
}
$('#title').html(html);
}
});
});
})
И проблема здесь, как указать id_form-0-buy_tabako_brand, чтобы скрипт автоматический отслеживал инкремент первого поля селекта, и подгружал второй селект необходимой формы..
warren buffet
19.09.2016, 13:41
Amnesia, тебя просто судьба пригнала в тему изобретателей велосипедов в треугольными колесами.
Так тоже не делают. Процедура добавления товара в корзину состоит в добавлении пары id-qty в куки. А вывод делается уже из куков. Все элементарно.
warren buffet
19.09.2016, 13:51
Как делают "Пары" селектов. Вообще элементарно.
<ul>
<li id="col">Цвет</li>
<li id="shp">Форма</li>
<li id="pat">Дизайн</li>
<li id="mat">Материал</li>
</ul>
Стилями каждый раздел оформляется красиво, на корень, на <ul> вешается листенер и вперде. Юзер жмет, скрипт находит цель, берет id, делает запрос на сервер, с сервера приходят опции, unordered список которых рендерится внутри цели.
Можно сразу все отрендерить, а с сервера получать лишь возможные варианты выбора данной опции в условиях предыдущего выбора и просто дизаблить то, что выбрать нельзя.
На огромном числе сайтов фильтры товарных характеристик устроены именно так, или в основе своей так, но Шурик не таков. Чтобы не маяться с хтмлем, он нахерачит 24 одинаковых селекта и будет мараковать как обмануть природу.
warren buffet
19.09.2016, 14:03
Amnesia, не нужны никакие формы в таблице вообще. Она же никуда не отгружается, эта форма. У тебя же заказа уже в куках. На сервер поступает команда - сделай чек. Сервер берет куки и делает чек. Форма тут лишняя сущность и тавтология. Или у тебя военный сайт с корзиной в адресной строке, чтобы все работало и во время атомной бомбардировки без печенек?
На таблицу вешай листенер на клик и кейап, чтобы отслеживать нажатие кнопок в input type="num" и ручной ввод. Вот смотри как может быть устроен такой роутер
route=function(e){
var el=e.target,
c=el.getAttribute('c'),
r=el.closest('tr');
if(!c || !r) return;
var id=r.getAttribute('pd');
switch(c) {
case 'i': image_zoom(el); break;
case 'v': if(el.value<=0) el.value=1; shCart.update(id,el.value,false); break;
case 'd': remove_item(id,r); break;
case 'r': Confirm('Список заказов будет очищен.',remove_all);
return false;
}
},
Для сегрегации полей без беготни к заголовкам в 100500 раз проще отрендерить призаки в каждой строке и, чтобы вот так чпок - c=el.getAttribute('c') - и роуть.
при добавлении форм
Зачем добавлять на страницу несколько форм?
указать id_form-0-buy_tabako_brand, чтобы скрипт автоматический отслеживал инкремент первого поля селекта, и подгружал второй селект необходимой формы
Зачем следить за инкрементом чего-то, если: а) связать элементы можно даже и по их индексам в наборе; б) форме как и серверу важны не id, а именование полей?
Ребят, спасибо за первые ответы. Постараюсь понять о чем вы =))
Как и написал выше, изначально изучаю вообще Питон с Джанго. Просто понял, что его средствами это не сделать, начал искать готовые решения по добавлению и т.п. Понял, что нужен Jquery и т.п. Который подгружает список(Говорят, грузить весь список сразу это не по фен шую, чтобы боты не парсили, учимся сразу делать хорошо)..
Повторюсь, так какя понял, смысл всего этого слегка не понятен вам.. Это не магазин, как таковой. А мини СРМ система, вместо XLS.
Я к примеру закупаю товар -> захожу добавить покупку.
Открывается страничка. В ней сразу сформирован номер(ид корзины) будущей в названии и заголовке страницы.
И пустая таблица, чтобы ее наполнить - > создал форму одну, в ней как и говорил, выбирается Бренд(руками), далее подгружается(на данный момент работает) список моделей этого бренда и другая информация(всего 5 полей) и есть кнопка Сохранить, которая добавляет значение в базу и обновляет страницу. Все работает.
Но представим ситуацию, что у меня 20 купленных вещей и мне надо их внести в таблицу.
Я нашел готовый скрипт:
$(document).ready(function() {
function updateElementIndex(el, prefix, ndx) {
var id_regex = new RegExp('(' + prefix + '-\\d+-)');
var replacement = prefix + '-' + ndx + '-';
if ($(el).attr("for")) $(el).attr("for", $(el).attr("for").replace(id_regex,
replacement));
if (el.id) el.id = el.id.replace(id_regex, replacement);
if (el.name) el.name = el.name.replace(id_regex, replacement);
}
function deleteForm(btn, prefix) {
var formCount = parseInt($('#id_' + prefix + '-TOTAL_FORMS').val());
if (formCount > 1) {
// Delete the item/form
$(btn).parents('.item').remove();
var forms = $('.item'); // Get all the forms
// Update the total number of forms (1 less than before)
$('#id_' + prefix + '-TOTAL_FORMS').val(forms.length);
var i = 0;
// Go through the forms and set their indices, names and IDs
for (formCount = forms.length; i < formCount; i++) {
$(forms.get(i)).children().children().each(functio n() {
updateElementIndex(this, prefix, i);
});
}
} // End if
else {
alert("Вы не можете удалить единственную форму");
}
return false;
}
function addForm(btn, prefix) {
var formCount = parseInt($('#id_' + prefix + '-TOTAL_FORMS').val());
// You can only submit a maximum of 10 todo items
if (formCount < 10) {
// Clone a form (without event handlers) from the first form
var row = $(".item:first").clone(false).get(0);
// Insert it after the last form
$(row).removeAttr('id').hide().insertAfter(".item:last").slideDown(300);
// Remove the bits we don't want in the new row/form
// e.g. error messages
$(".errorlist", row).remove();
$(row).children().removeClass('error');
// Relabel/rename all the relevant bits
$(row).children().children().each(function() {
updateElementIndex(this, prefix, formCount);
if ( $(this).attr('type') == 'text' )
$(this).val('');
});
// Add an event handler for the delete item/form link
$(row).find('.delete').click(function() {
return deleteForm(this, prefix);
});
// Update the total form count
$('#id_' + prefix + '-TOTAL_FORMS').val(formCount + 1);
} // End if
else {
alert("Sorry, you can only enter a maximum of ten items.");
}
return false;
}
// Register the click event handlers
$("#add").click(function() {
return addForm(this, 'form');
});
$(".delete").click(function() {
return deleteForm(this, 'form');
});
});
Который добавляет(пока максимум до 10) формы, по кнопке Добавить. И все этого естественно так же сохраняется по кнопке Сохранить.
Теперь осталось единственное, чтобы вот этого скрипт,
$(document).ready(function() {
$("#id_form-0-buy_tabako_brand").on('change', function title() {
var id = $(this).val();
$.ajax({
data: {'id': id},
url: '/tabako/add_cart/brand/',
type: 'get',
success: function (data) {
var html = ""
for (var i = 0; i < data.length; i++) {
html += '<option value="'+i+'">' + data[i].fields.tabako_titles_title + '</option>'
}
$('#title').html(html);
}
});
});
})который работает с с первой формой, а именно отслеживает изменение поле Бренд(id_form-0-buy_tabako_brand). И при выборе другого подгружает другие модели в этой же форме.
Как сделать так, чтобы в других формах, скрипт видел ID"id_form-Инкремент-buy_tabako_brand" или Имя поле"id_form-инкремент-buy_tabako_brand" и менял значение модели соответствующего поля. Эти имена задает скрипт, который я указал первый в этом сообщении.
Как сделать по другому через куки(как вы говорите), если здесь вроде бы все должно строго соответствовать??
Спасибо
Постараюсь понять о чем вы
Постараюсь пояснить, и речь не обязательно о марках и брендах. Главным должна быть цель, назначение.
Есть в базе N записей, при этом по первичному ключу она может принять еще всего лишь с десяток. Дабы предотвратить "переполнение" на клиенте можно организовать нумерацию добавляемых элементов, значения которых будут переданы серверу для записи. То есть добавлять сверх Nmax не разрешено, а связывать по этому номеру или нет, это уже вопрос вторичный.
Что есть ваша задача - также что-то добавляем, отправляем, но при этом каждое из добавляемых есть форма. Естественно возникает вопрос - отправить серверу каждое можно только индивидуально, а зачем, если это не выгодно?
Добавление новой формы в вашем случае есть дублирование каждой из форм, а значит нужно добавлять не формы с полями, а добавлять новый набор элементов в одну форму, именование которых есть вложенные массивы - name="field_name[]" и никаких номеров за которыми надо следить не требуется. А добавление элементов и обращение к ним, так если таблица, то помещается в TD, какие тут могут быть проблемы.
Я понял о чем вы говорите, ну вот в Джанго есть такое понятие как FormSet, группа форм. Я его и использую, а внутри него каждое поле(у которого несколько значений), имеется свой ID.
При продумывании данного добавления, была возможность реализовать появление сразу таблицы с 10 рядами по 5 полей, но мне показалось это не красиво и не всегда нужно. Если к примеру нужно лишь добавить 1-2 элемента..
Так вот возвращаясь к вопросу:
<div class="item row">
<div class="large-2 columns">
<label>Бренд</label>
<select id="id_form-2-buy_tabako_brand" name="form-2-buy_tabako_brand">
<option value="" selected="selected">---------</option>
<option value="1">Alfakher</option>
<option value="2">Habibi</option>
</select>
</div>
<div class="large-2 columns">
<label>Тип</label>
<select id="title">
<option value="" selected="selected">---------</option>
</select>
</div>
<div class="large-2 columns">
Фасовка:<select id="id_form-2-buy_tabako_type" name="form-2-buy_tabako_type">
<option value="50" selected="selected">50 грамм</option>
<option value="250">250 грамм</option>
<option value="500">500 грамм</option>
<option value="1000">1 килограмм</option>
</select>
</div>
<div class="large-2 columns">
Количество:<input id="id_form-2-buy_tabako_quantity" name="form-2-buy_tabako_quantity" type="number">
</div>
<div class="large-2 columns">
Цена:<input id="id_form-2-buy_tabako_price" name="form-2-buy_tabako_price" type="number">
</div>
</div>
Что нужно добавить,
<select id="title">
<option value="" selected="selected">---------</option>
</select>
В селект, какой-нибудь может тоже инкрементный ключ, чтобы например меняя первое поле
<div class="large-2 columns">
<label>Бренд</label>
<select id="id_form-2-buy_tabako_brand" name="form-2-buy_tabako_brand">
<option value="" selected="selected">---------</option>
</div>
, менялось и второе.
Неужели нет какого-то простого решения?
name="form-2-buy_tabako_brand" - то есть вот такую абракадабру серверу обрабатывать само то?
Что значит "чтобы например меняя первое поле, менялось и второе" я не понял. Если речь ведется о связанных списках марка-модель, то выбирая в первом строят второй зависимый. Суть этой темы свелась к тому, что необходимости дублирования первичного списка необходимости нет.
В вашем же случае все зависит от удобства пользователю - либо пары списков, либо первичный один, но перемещаемый.
И если "чтобы например меняя первое поле, менялось и второе", это выбор в первичном списке и получение зависимого списка, то нумерация, это худшее что может быть, ибо обработчик в данном случае будет один, а он ну никак не может оперировать запросом к серверу вот таким бредом form-2-buy_tabako_brand , а если оперирует, то стоит только пожалеть сервер и базу данных, в которой не понять каким образом содержаться зависимые записи.
На огромном числе сайтов фильтры товарных характеристик устроены именно так, или в основе своей так, но Шурик не таков. Чтобы не маяться с хтмлем, он нахерачит 24 одинаковых селекта и будет мараковать как обмануть природу.
Я не знал как правильно делается, поэтому и спросил, мне нормальный человек (не ты), объяснил как делать. Ты, видимо, родился со знанием как правильно сайты делать и никогда не допускал ошибок.
warren buffet
20.09.2016, 11:05
Shurik, типа у тебя нет инета чтобы посмотреть как сайты делают, а как ты тогда без инета сюда пришел? Ладно, крутись на пупе дальше.
warren buffet
20.09.2016, 11:11
ну вот в Джанго
При чем тут жанго-манго и питон-шмитон, если у тебя нет технического задания и даже нет моделей.
Поэтому ты на форуме задаешь глупые вопросы как сделать наоборот, типа как отталкиваясь от питона к джанго реализовать неизвестную никому модель.
Если бы у тебя была модель, у тебя было бы ТЗ, а по ТЗ любой дурак на любом языке все напишет и даже сами компы уже давно умеют писать коды программ по документации.
Ты никогда не решишь свою проблему, потому что у тебя нет проблемы. А затыки с жангами - это другая проблема.
warren buffet
20.09.2016, 11:23
Так вот возвращаясь к вопросу:
Это веб? Значит хтмл, цсс, жс. Все остальное нахер.
Так вот веб-страница динамического сайта - это интерфейс базы данных.
В зависимости от запроса ты получаешь выборку в виде списка токенов - рекордсета, или один токен - запись.
Списки называются листингами. Управления выборкой и отображением списка может быть каким угодно. Шурик например хотел сделать фильтры, а еще могут быть пресеты, поиск и сортировка.
Так вот твоя "страница" где выбираешь бренд-шменд - это листинг. То есть результат выборки из БД из которой в свою очередь можно выбрать токен. И только выбрав токен ты можешь его "купить" или запомнить где-то.
Запомнив где-то кучу рандомных токенов ты можешь вывести их как листинг, блеать прямо через то же самый интерфейс вывода листингов вообще. Например пресловутые wish list выводятся через тот же самый рендер, просто добавить уже добавленное нельзя.
Понял? Выборка может быть какой угодно и в том числе рандомной (действия пользователя фундаментально случайные).
Когда сумеешь в своей голове разделять получение данных и вывод данных, тогда сам увидишь какую ты нес ахинею.
warren buffet
20.09.2016, 11:37
В ней сразу сформирован номер(ид корзины) будущей
Ну вот она ахинея. Сущность напялена на другую сущность и получается типа формула, в которой одна из переменных - результат вычисления этой же формулы. Ты теорему несуществования доказать решил? Ты доказал.
select * from tablename where brand='Конь тыгыдымский'
Получил листинг. Там еще могут быть опции сокращения выборки. Понажимал, получил. Теперь хочешь запомнить какую-то запись из списка. Где ее запомнить? Где угодно, главное, чтобы была привязка к юзеру. Автоматическую привязку обеспечивают куки, поскольку они доступны и на сервере. Без куков можно обойтись только принудив юзера регистрироваться, поскольку тебе нужен его ID, привязка к его сущности.
Юзер тычет "сохранить" скрипт запоминает в куках или в бд. Юзер тычет "оформить" или там "корзина", скрипт достает список запомненного и выводит.
select * from tablename where product_id in(join(',',$saved_id_list));
Все нах.
warren buffet
20.09.2016, 11:49
Данные из БД - рид-онли. А все юзерские списки - едитабле. Виш-лист, избранное, лайки, корзина - это юзерские списки. Виш-лист это просто идешники, лайки это пара идешник - оценка, корзина это пара идешник - количество. Что ты еще можешь изобрести сверх этих архаичных сущностей? Капец блин, захерачат сами себе могучий Маня-мир и мудохаются в нем с уродской аксиоматикой. Ты и попал сюда из Маня-мира. Если бы ты изучал реальный мир, тебя бы сдесь не было. Давно бы уже написал все, ну максиумм бы пришел пожаловаться почему == сравнивает блеать без типа.
Ты, видимо, родился со знанием как правильно сайты делать
:D Нет, я как и все родился без штанишек.
Не берите на веру, что фореймворки есть де-юре Закон, а следовательно в них все безупречно. Сперва рассмотрим вот это:
var id_regex = new RegExp('(' + prefix + '-\\d+-)');
var replacement = prefix + '-' + ndx + '-';
Уже плохо, так как используется разбор рег. выражением, что уже накладно. А ведь если и требуется нумерация, можно ведь поступать так же как в жизни - ул. Академическая 1, ул. Академическая 2, ... Знакомо? Да и от программирования весьма далеко, но ведь просто.
Если это взять на вооружение, то в первичный список в атрибут data-num помещать номер, а связанный с ним список получает ID как например s1, s2, s3, ... Для обращения к связанному списку получаем номер из атрибута и соединяем его с "s" и получаем ID элемента к которому нужно обратиться.
Но что самое ужасное, так это именование полей так же дремуче как и ID элементов. Что придется делать на сервере - сервер получает вот такой набор ключей form-1-buy_tabako_brand, form-2-buy_tabako_brand, form-3-buy_tabako_brand и т.д. Для простоты опустим факт того, что серверный сценарий должен проверять наличие ожидаемых им ключей, и пусть "берем на веру, что все гут", а данные присланные для одного адресата. Тут можно не интересоваться именами ключей, а получить их значения и далее по условию.
Но если даже веровать, то ситуация резко усугубится, если данные будут присланы для двух адресатов, и второй набор будет таким form-1-buy_bibika_brand, form-2-buy_bibika_brand, form-3-buy_bibika_brand и т.д. Просто взять значения каждого из наборов и далее оперировать ими уже не получится. Серверный сценарий вынужден будет производить разбор каждого ключа, что просто сводит на нет все удобства работы с массивом. Ладно если ключей раз, два и все, а если представить, что таким же образом именовать поля формы где либо в административном разделе, с большим числом записей предполагающих пакетное обновление? Это будет кошмар.
vBulletin® v3.6.7, Copyright ©2000-2025, Jelsoft Enterprises Ltd. Перевод: zCarot