Привязать форму к заказу на Ubercart

Главные вкладки

Аватар пользователя spad spad 29 августа 2011 в 17:29

Всем доброго дня!
Есть сайт по продаже мебели, где при заказе дивана можно выбрать ткань обивки. Все бы ничего, да ткани надо выбирать 2: обивка на посадочном месте, обивка-компаньон.
Необходимую реализацию тканей можно увидеть здесь: http://mebel-today.ru/catalog/corner-sofa/catalogue_5.html
Пытался решить поставленную задачу модулем uc_attribute, но он позволять сделать выбираемый 1 радиобаттон в одном окне. Можно сделать 2 окна, в каждом по радиобаттону. Но задача сделать именно 2 радиобаттона в одном окне.

Я успешно написал js скрипт, который копирует один радиобаттон к другому, получается то, что надо. Но потом, прикинув, что тканей будет штук 500, а подгружаются они сразу, браузер однозначно сдохнет при таком копировании. Вариант отпал.

Пробовал хакать ядро uc_attribute, безуспешно.

Вижу вариант решения следующий: пишу свой модуль для вывода тканей, картинок и радиобаттонов так, как стоит задача.
Вопрос в том, как привязать выбираемый радиобаттон к форме при добавлении в корзину? С последующей обработкой, думаю, проблем не будет.

Комментарии

Аватар пользователя Camor Camor 29 августа 2011 в 18:34

Вообще гемор. Ткани у мебели меняются раз в полгода и никто их менять не будет. Автоматом тоже врятли. Проще сделать выбор категории ткани и всё. Один хрен никто практически не заказывает ткань по названию, все звонят и спрашивают: "Где можно посмотреть?"

Я к тому, что настолько усложняя задачу по разработке, ты сильно усложнишь работу сайта потом.

Аватар пользователя spad spad 29 августа 2011 в 19:39

Вот уже как год ткани не меняюсь. Да и процессом заполнения/редактирования занимаюсь не я. И ткани как раз заказывают по названию.
Не я усложняю задачу, а клиент) Сайт успешно проработал год, вот теперь переезжаем на друпал

Аватар пользователя Orion76 Orion76 30 августа 2011 в 0:47

проще-простого-))
1. Создаете тип контента для хранения материалов-оббивок.

2. В вспомогательном модуле перехватываете хук имя_модуля_cart_item (как вызывать, можно посмотреть в функции uc_cart_add_item модуля uc_cart.module) добавляете в ней ява-скрипт, выводящий форму с выбором материала, как-то так:
$form=drupal_get_form(form_id);
drupal_add_js(array('obb_select_form'=>$form),'setting');// на страничке в js будет доступна как Drupal.settings.obb_select_form (html формы
где form_id = имя функции собирающей форму

добавляем ява-скрипт, выводящий в оверлее форму

3.пишем функцию form_id (смотреть drupal form API)

4.пишем функцию валидации с именем form_id_validate (form_id заменяем на имя функции собирающей форму)

5.пишем функцию сохранения результатов формы с именем form_id_submit (form_id заменяем на имя функции собирающей форму).
в ней подгружаем данные заказа (смотреть функции модуля uc_cart.module) у объекта_заказа есть поле-data , это сериализованный массив(т.е. так оно храниться в БД) добавляем к нему выбранный материал(nid) и сохраняем сам заказ.

6.Для вывода выбранного материала в форме просмотра заказа вызываете хук имя_модуля_order() (примеры смотрим в модулях ubercart и конкретно в модуле uc_order.module)

вот и все...-))

Аватар пользователя Xermit Xermit 30 августа 2011 в 2:30

Хмм, а зачем что-то добавлять
Создать один атрибут в котором завести все возможные типы обивок или
завести столько атрибутов сколько надо

На той странице при клике выводите заранее созданные вами статические страницы с обивками,
в которых есть javascript, который после выбора устанавливает соответствующий атрибут в форме товара в нужное значение, прямо на стороне клиента еще, в форме будет же список с значениями атрибутов который просто тупо через css можно сделать не видимым.

Когда кнопка в корзину будет нажата соответствующий атрибут уже установлен и он будет присутствовать в заказе.

Если цена зависит от этих атрибутов, то посложнее
придется придумать как соответствие сочетаний атрибутов с ценой и другими параметрами сохранить, как минимум еще артикул нужен другой.

И свой хук add_cart который вернет для данного набора атрибутов цену.

Стандартный механизм ubercart увы позволяет только артикул другого товара в соответствие установить для заданного набора значений атрибутов. Но мы же не будем для всех комбинаций атрибутов товары заводить.
При этом можно также продолжать использовать атрибуты, например, чтобы указать, что такой-то обивки нет в наличии.

Только у меня немножко по другому было, у меня при нажатие на кнопке заказа диалог jquery вываливался куда я клонировал с обработчиками эти списки.
Это позволяет сэкономить места в карточке товара, так как визуально списки видны только в момент заказа в диалоге.

В общем готового модуля я не видел пришлось свой ваять.
"Но вот и все" от orion76 сделать быстро не выйдет Smile по себе сужу

http://imm.io/8DYr

Только у вас вместо формы надо какой нибудь ajax запрос чтобы загрузить соответствующий материал, прям страницу, выдрать оттуда контент и вставить его в диалог.
потом как пользователь выбрал, просто установить соответствующее значение у поля формы, которая уже есть на странице.

Но в любом случае зело не просто.

так вот соответствие устанавливается

http://imm.io/8DXo

а так оно выводится
в виде справки у товара через темизацию, так как способ хранения соответствия известен

http://imm.io/8E0H