03.09.2015, 14:00
|
Профессор
|
|
Регистрация: 19.06.2010
Сообщений: 279
|
|
Насколько надежна parseInt?
Извиняюсь за глупый вопрос. Но очень важно.
Не хочется потом 200 кб скрипта переделывать.
В таблице заказа товаров выводятся значения в текстовом выражении.
Прежде чем поместить в корзину надо считать несколько числовых значений из строки.
Вижу два варианта:
1. Использовать, скажем, span и parseint 10.
2. В таблице использовать input-ы и с помощью css сделать их невидимыми, а следовательно, использовать $('#abc).val().
Что выбрать? Реально, не хочется потом все переделывать.
Спасибо.
|
|
03.09.2015, 14:44
|
|
Профессор
|
|
Регистрация: 16.07.2014
Сообщений: 267
|
|
Эдди,
parseInt работает только если строка начинается с числа. Если вы делаете что-то типа:
parseInt($('span').text());
и в span окажется например в начале, то всё посыпется. Инпут понадёжней как по мне.
|
|
03.09.2015, 14:46
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
Таблица Заказа, это по логике уже и должна быть Корзина, то что вне Корзины, это не заказы, это всего лишь предложения, список товаров.
Выбор товара, это либо 1, либо можно набирать любое произвольное его количество. При этом как сервис на клиенте можно сразу рассчитывать цену набранного, которую удобно держать под рукой, непосредственно в поле ввода, в котором набирается количество товара. Держать ради этого скрытые поля в формах не выгодно и накладно. При этом parseInt может и не потребоваться - "2" * "2" = 4, а вот "2" + "2" = "22"
Серверу же для помещения товаров в Корзину совсем не нужна его цена, он и без клиента ее знает, ему нужен идентификатор товара и его количество.
|
|
03.09.2015, 15:18
|
Профессор
|
|
Регистрация: 19.06.2010
Сообщений: 279
|
|
Сообщение от laimas
|
Таблица Заказа, это по логике уже и должна быть Корзина, то что вне Корзины, это не заказы, это всего лишь предложения, список товаров.
Выбор товара, это либо 1, либо можно набирать любое произвольное его количество. При этом как сервис на клиенте можно сразу рассчитывать цену набранного, которую удобно держать под рукой, непосредственно в поле ввода, в котором набирается количество товара. Держать ради этого скрытые поля в формах не выгодно и накладно. При этом parseInt может и не потребоваться - "2" * "2" = 4, а вот "2" + "2" = "22"
Серверу же для помещения товаров в Корзину совсем не нужна его цена, он и без клиента ее знает, ему нужен идентификатор товара и его количество.
|
У меня все сложнее. Это не товары. Это услуги. Есть основные услуги, есть дополнительные.
Сначала клиент выбирает одну основную услугу (которая в строке таблицы), плюс к тому выбирает доп. услугу, если она нужна.
При клике на стоимости основной услуги я должен положить заказ в корзину (в БД - сессии не подходят).
Потом к этой услуге клиент может добавить другую услугу, и это добавится в один и тот же заказ, если услуги совпадают.
|
|
03.09.2015, 15:21
|
Профессор
|
|
Регистрация: 19.06.2010
Сообщений: 279
|
|
Но дело не в этом.
Я уже решил, что сделаю как сделал.
Сначала предложение услуг. При выборе - записываю в БД.
Вопрос в том, как извлечь из строки таблицы числа, которые являются id заказа, данные для записи этих id в БД.
К тому же потом я дам возможность клиенту редактировать в корзине основные и дополнительные услуги.
Потому и файл js будет около пол мегабайта.
Кстати, еще вопрос, чем его сжать, поскольку обильно снабжен комментариями.
Пробовал уже не помню что - перестал работать.
Вы что используете?
|
|
03.09.2015, 15:54
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
Сообщение от Эдди
|
Сначала предложение услуг. При выборе - записываю в БД.
Вопрос в том, как извлечь из строки таблицы числа, которые являются id заказа, данные для записи этих id в БД.
К тому же потом я дам возможность клиенту редактировать в корзине основные и дополнительные услуги.
Потому и файл js будет около пол мегабайта.
|
Что можно сказать. Это как раз тот момент, когда неудачное представление данных порождает невероятных размеров код.
|
|
03.09.2015, 15:59
|
|
Профессор
|
|
Регистрация: 16.07.2014
Сообщений: 267
|
|
Сообщение от Эдди
|
Кстати, еще вопрос, чем его сжать, поскольку обильно снабжен комментариями.
|
Gulp + uglify https://www.npmjs.com/package/gulp-uglify
|
|
03.09.2015, 20:12
|
Профессор
|
|
Регистрация: 19.06.2010
Сообщений: 279
|
|
Я все понимаю. Только однозначно можете мне посоветовать?
Инпуты сделать или выдергивать из span значения полей?
КОд я начал писать, когда еще в JS вообще не разбирался.
Сейчас для начала надо запустить работу. А потому буду лакировать и уменьшать код.
И я уже знаю, как.
|
|
03.09.2015, 20:41
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
Сообщение от Эдди
|
Только однозначно можете мне посоветовать?
|
Что именно?
Есть три типа корзин, в зависимости от того где ее данные хранятся:
1) в сессии - просто, и в случае если пользователь откажется и покинет магазин, о мусоре можно не беспокоится, он будет удален сборщиком мусора. В базу данные корзины переписываются только при оформлении заказа.
2) куки, тоже самое что и в сессии, но время жизни такой корзины может быть большим.
3) хранение в базе - такую корзину можно организовать только для регистрированных пользователей, и на ограниченное время.
В любом случае, корзина позволяет редактировать товары в ней, удаляя, добавляя, или вообще аннулируя все товары в ней. Другими словами какого-то промежуточного этапа между выбором товара или услуги и помещением его в корзину надобности нет. Выбор всегда можно оценить и в корзине, просчитать цену. Вы в реальном магазине выбирая товар не раскладываете же его предварительно на полках, и только потом в корзину.
Что касается Сначала предложение услуг. а потом При выборе - записываю в БД., а потом уже в корзину, то это вообще что-то непонятное. Если к примеру на страницах много товаров и различных, то как сервис я могу организовать закладки, а это не обязательно в базу писать, выковыривая потом этот мусор, ведь закладка это всего лишь запомнить идентификаторы выбора, а показать набранное в закладку, это вывести товары этих идентификаторов. Да если и не делать вторичный выбор, то можно и запомнить все содержание об этих товарах у клиента, и это никак не большой объем скрипта.
Но это хранение никоим образом не имеет отношения к корзине как таковой, это только намерения пользователя, а предложения, так это и есть все товары/услуги на страницах.
А данные необходимые серверу для того чтобы понять, что выбрано, так это типа:
<input name="product[12]" data-price="200" value=""> - и сервер получит в массиве под ключом 12, что является идентификатором товара, его количество. Цену 200 ему не надо, он ее как и все остальные данные о товаре может получить в базе. Эта цена нужна на клиенте, для расчета при наборе товара.
Тоже самое и в корзине, только помещая товара в корзину, в нее сразу помещают и цену, чтобы лишний раз не дергать базу.
|
|
04.09.2015, 11:46
|
Профессор
|
|
Регистрация: 19.06.2010
Сообщений: 279
|
|
Это все понятно. Но Вы говорите об обычных магазинах с конкретными товарами.
У меня же немного другая ситуация. Можно сравнить ее с заказом автомобиля у производителя. С выборами опций.
Сначала клиент выбирает марку авто, помечая опции галками в чекбоксах.
Не регистрируясь.
Именно это мне надо, чтобы клиент проделал сначала все без всяких заморочек. А когда он накидал в корзину все, что ему нужно.
Просмотрел корзину, удалил лишнее, добавил необходимое, то он уже проделал работу.
И вот тогда он кликает на Заказать. И вот только тогда ему предлагается зарегистрироваться.
И он зарегистрируется именно потому, что уже проделал всю работу, и чтобы эта работа была проделана не зря.
А сессия к тому времени может и протухнуть.
Кстати, подумываю писать его ай-пи адрес также в бд.
Чтобы даже закрыв браузер, а потом снова его открыв и зайдя на страницу поиска, в корзине были выбранные им товары или услуги.
По себе знаю, что при выборе товара, когда вылазиит форма регистрации, в большинстве случаев я ухожу от заказа.
Насчет того, что писать надо только id товаров и услуг вопрос спорный.
Привожу аргументы:
Если не писать в БД стоимость, а она у поставщика изменится, то клиент будет неприятно удивлен, купив, скажем, айфон за 200 долларов, а когда войдет в личный кабинет, то этот айфон оказывается стоит уже 300 долларов.
Это тоже, как я считаю, ошибка интернет-магазинов.
Цену надо обязательно писать с предупреждением, что она действительна в течение стольких только часов или дней.
А потом по крону автоматически корректировать цену.
В чем здесь я ошибаюсь?
И последнее. Насколько я понял, еще недостаточно изучив JS, сессии - это не стезя этого языка. Это php. А мне надо, чтобы за весь период выбора услуг/товаров и опций к ним страница ни разу не перезагружалась. Можно, конечно аяксом присобачить сессию. Но я уже сказал выше, что пройдет 25 минут, и она протухнет. Или клиент закроет браузер, или свет у него отключится.
|
|
|
|