Показать сообщение отдельно
  #28 (permalink)  
Старый 08.04.2015, 06:45
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Чем я вас загнал в угол? Вот ваш вопрос:

ну допустим тип доставки я буду доставать из БД. Как тогда при нажатии на ту или иную кнопку тут же будет меняться "общая сумма"? Я и попробовал JS, чтобы на этой же странице без перезагрузке менялась "сумма".

а) Допустим БД, а можно и нет, храня эти два значения в переменных, суть то не в этом,а в том, что задает их сервер, и знает сервер, и клиент не должен возвращать это значение как рубли. Выполнение финансовых операций в вашем магазине, это же не бухгалтер Алевтина Петровна со тетрадкой и счетами в руках, которая не пропустит "подвоха", а бездушный скрипт, и если рубли будет указывать клиент, а вы обязуете свой скрипт принять это, значит обман обеспечен.

Конечно, курьера не обманешь, но ведь и ваш магазин может разбогатеть на ботинках, появятся новые виды услуг, которые могут быть связаны с безналичными расчетами, и если их стоимость вы будете отдавать на откуп клиенту, то вы и в суде не докажите, что вас обманули. А расширение услуг их добавление/редактирование означает, что описывать их как переменные не удобно, а вот в базе удобно, храня их описания и значения в полях типа ENUM. И на текущий момент пусть у вас в базе будет только два enum значения, а цена определяется по ходу и правкой текста, типа такого в таблице конфигураций:

CREATE TABLE IF NOT EXISTS `config` (
  `delivery` enum('Наш курьер (Стоимость доставки 300 руб)','Самовывоз') NOT NULL 
  DEFAULT 'Наш курьер (Стоимость доставки 300 руб)' 
  COMMENT 'Тип доставки',
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='Конфигурации'


Понимание этого не заводит вас в тупик? Тогда далее.

б) Мне трудно отвечать конкретно по действам нажатия на ту или иную кнопку потому как сумма заказов зависит не только от каких-то ваших кнопок, но и от изменений количества товаров в корзине. Речь ведь в данном случае идет о полном представлении корзины, ее редактировании, и для операций с ней необходимости прикручивать Ajax нет. Ajax это всего лишь один из способов общения с сервером, за кнопки и действия по ним он не отвечает, поэтому описывать задачу редактирования корзины как нечто зависящее от него не стоит. Достаточно иметь js-сценарий который будет просчитывать сумму заказа при изменениях количества товаров или их удалении. Сохранение же изменений может быть принято сервером при таких действиях как Сохранить (Обновить), Очистить, Оформить заказ. При этом, в последнем случае перед оформлением заказа нужно проверить не изменялось ли состояние корзины.

Это не вызывает проблем?

в) Ну и последнее - камень преткновения, общая сумма + доставка.

Выбор доставки у вас производится на странице оформления заказа. Если тип доставки описывается полем ENUM, как показано выше, то этому описанию на странице будет соответствовать выбор посредством двух радиокнопок:
<label>
    <input type="radio" name="delivery" value="1" data-dlv="300" checked />
    Наш курьер (Стоимость доставки 300 руб)
</label>
<label>
    <input type="radio" name="delivery" value="2" data-dlv="0" />
    Самовывоз
</label>

значения которых 1 и 2, соответствуют значениям ENUM описывающем тип доставки, а атрибуты data-dlv содержат значения цены за доставку, которые будет использовать js-сценарий при расчетах.

Если ваш пользователь может выбрать тип доставки только на этой странице, а по умолчанию выбрана доставка курьером, то сервер при выводе этой страницы должен проставить в ячейке "Доставка" 300, просчитать общую сумму заказа, поместив ее в соответствующую ячейку, и с учетом доставки. Ваш серверный сценарий этого не делает, хотя всеми данными для этого обладает, а претензии вы предъявляете мне.

После вывода страницы и при смене типа доставки уже сценарий на клиенте будет получать из атрибута data-dlv стоимость выбранной доставки изменяя сумму с доставкой в ячейке таблицы. При оформлении заказа же, на сервер будет отправлено ее значение 1 или 2, которое и заносится в таблицу базы описывающей заказы.

Этого достаточно чтобы выйти из тупика?

Ну и как резюме: если вы учитесь, то учитесь не прикручивать сразу разные плюшки к своему проекту, они не есть главное. Главное научится видеть/представлять задачу целиком, ее поэтапное решение, что необходимо выполнять на каждом ее этапе, какими данными придется оперировать и что является их источником. Принцип только один - от общего к частному. Частности можно решать множественными способами, но без видения общего частности будут как кошка, которая сама по себе.

Последний раз редактировалось laimas, 08.04.2015 в 06:50.
Ответить с цитированием