[УРОК] Создаём товары атрибутами и учим правильно считать

Аватар пользователя NaZg

Создание атрибутов товара в UberCart 3

Задача: создать товар, стоимость которого в зависимости от атрибутов будет меняться в ту или другую сторону.

Нам понадобится:
- Drupal 7
- Ubercart 3.1
-- включённый под-модуль uc_attribute

Термины и определения
Класс товаров - товары, объединённые в одну смысловую группу.
Атрибут – свойство товара
Опция атрибута – состояние, которое может принимать атрибут

Описание проекта.
У нас есть небольшой сайт, торгующий пепелацами. Пепелац в базовой комплектации стоит 1000 у.е. Запас гравицапы на день, неделю или месяц 500/700/1000 у.е. соответственно Скрипач умеющий играть или нет 300/500 у.е. Пачка КЦ 750 у.е. и доп-опция – выбить у пепелаца окно или два, что снизит стоимость на 300/500 у.е.

Реализация
Создадим класс товаров «пепелац» идём admin/store/products/classes и заполняем там форму

Теперь создадим атрибут «гравицапа». Идём в управление атрибутами (для этого нам и понадобился включенный под-модуль) admin/store/products/attributes и жмём «Add an attribute» admin/store/products/attributes/add
Создадим атрибут гравицапы

А теперь добавим опции для этого атрибута.

Что должно получиться

Аналогично со скрипачом.

Теперь разберёмся с выбитыми окнами

Обратите внимание на отрицательную цифру, это снижает итоговую стоимость и даёт ту самую скидку.

И в итоге

Теперь включим опцию свойства товаров, для показа итоговой цены с учётом атрибутов. Идём admin/store/settings/products пункт «Atrtribute settinngs» и устанавливам переклюк на «Display total price»

Теперь, когда мы создали класс товара и необходимые атрибуты и опции к ним, нам необходимо всё это связать. Переходим в управление классами товара admin/store/products/classes и в редактирование нашего класса «пепелац» admin/store/products/classes/pepelac/edit перейдём на вкладку атрибуты admin/store/products/classes/pepelac/attributes и добавим атрибуты для этого класса admin/store/products/classes/pepelac/attributes/add

Не обращайте внимания на то, что не отмечено галками, это от другого проекта :)

Теперь переходим в создать материал и добавляем пепелац
Вот, что у нас получилось на выходе

И в корзине

Посчитаем
Базовая стоимость 2000 минус 300 за одно выбитое окно плюс 1000 месячный запас гравицапы и плюс скрипач без музыкального слуха за 300. Итого 3000.
Получите, распишитесь.

Спасибо за внимание.

Модули и темы:
Тип материала:
Версия Drupal:
0 Спасибо

Комментарии

Аватар пользователя Fr1eNd
Fr1eNd 5 лет назад

Полезный материал, спасибо.

0 Спасибо
Аватар пользователя tshattogua
tshattogua 5 лет назад

Спасибо, пригодится!

0 Спасибо
Аватар пользователя q2_faith
q2_faith 5 лет назад

спасибо)

0 Спасибо
Аватар пользователя NaZg
NaZg 5 лет назад
q2_faith написал:
спасибо)

не за что
надеюсь, что кому-нибудь да помог

0 Спасибо
Аватар пользователя keha3912
keha3912 5 лет назад

на скриншотах пепелац иногда мутирует перелац :)

0 Спасибо
Аватар пользователя kalekin
kalekin 4 года назад

При выборе атрибута сумма пересчитывается сразу или только после того как нажата кнопка добавить в корзину?

0 Спасибо
Аватар пользователя NaZg
NaZg 4 года назад
kalekin написал:
При выборе атрибута сумма пересчитывается сразу или только после того как нажата кнопка добавить в корзину?

в корзине

0 Спасибо
Аватар пользователя kalekin
kalekin 4 года назад
NaZg написал:

Хочу сделать, чтоб цена пересчитывалась при выборе чекбокса (атрибута), не подскажете как сделать? направьте хоть в нужном направлении.
т.е. хочеца цена пепелаца вверху 1000
если человек выбрал один из атрибутов, то 1000 превращается например в 1200...

0 Спасибо
Аватар пользователя NaZg
NaZg 4 года назад
kalekin написал:
направьте хоть в нужном направлении.

ajax attribute

0 Спасибо
Аватар пользователя kalekin
kalekin 4 года назад
NaZg написал:
kalekin написал:
направьте хоть в нужном направлении.

ajax attribute

сумма ж не пересчитывается... только атрибуты.

0 Спасибо
Аватар пользователя NaZg
NaZg 4 года назад
kalekin написал:
сумма ж не пересчитывается... только атрибуты.

пересчитывается

0 Спасибо
Аватар пользователя kalekin
kalekin 4 года назад
NaZg написал:
kalekin написал:
сумма ж не пересчитывается... только атрибуты.

пересчитывается

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

0 Спасибо
Аватар пользователя NaZg
NaZg 4 года назад
ХулиGUN написал:
Для атмосферности нужны каце, а не у.е)))

у них курс плавающий (:

0 Спасибо
Аватар пользователя kalekin
kalekin 4 года назад

Ура, победил, спасибо за общение ;)

0 Спасибо
Аватар пользователя mNigma@drupal.org
mNigma@drupal.org 4 года назад

Доброй ночи!
А кто подскажет как самому в зависимости от значений полей высчитывать цену?
А то сейчас приходится темизировать кучу выводов типа:_tapir_table_alter, _uc_cart_review_table, _uc_cart_block_summary, _uc_cart_checkout_review и т.д., чтобы напрямую там каждый раз пересчитывать стоимость товара и общую сумму.

Должна ж быть какая функция или хук отвечающие за это. Не могу найти. Пробовал разобраться как работает uc_attribute, но не понял как он меняет цену на товар. Если не понятно написал, есть еще пост http://www.drupal.ru/node/101485 может яснее будет.

Буду благодарен за любую помощь!

0 Спасибо
Аватар пользователя NaZg
NaZg 4 года назад
@drupal.org">mNigma@drupal.org написал:
Пробовал разобраться как работает uc_attribute, но не понял как он меняет цену на товар

в зависимости от атрибута меняет цену, я же это достаточно подробно описывал

0 Спасибо
Аватар пользователя mNigma@drupal.org
mNigma@drupal.org 4 года назад
NaZg написал:
в зависимости от атрибута меняет цену, я же это достаточно подробно описывал

Да, спасибо, все хорошо описали для выбора из вариантов! Но у меня не выбор, а поле ввода. В это поле можно ввести число от 300 до 6000 и для каждого значения должен быть расчет. Или я что-то не дочитал?

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

Есть материал profnastil

Есть одно поле uc_attribute типа textfield.

Вот так считаю общую цену:
<?php
/* hook_uc_order (изменение общей цены)*/
function uc_mnigma_uc_order($op, $order, $arg2) {
switch ($op) {
case 'total':
$total=0;
$old_total=0;
foreach($order->products as $key=>$order_item){
$node=node_load($order_item->nid);
if($node->type=='profnastil'){
foreach($order_item->data['attributes'] as $attributes_list){
if(is_array($attributes_list))$attribut=$attributes_list[0];
else $attribut=$attributes_list;
}
$total += $order_item->price * $order_item->qty * ($attribut/1000) * ($node->field_shirina_lista['und'][0]['value']/1000);
/* в строке выше: стоимость(идет как за м кв.) * кол-во товара * ВВЕДЕННАЯ пользователем длина в мм * на ширину листа */
}else{
$total+=$order_item->price * $order_item->qty;

}
$old_total+=$order_item->price * $order_item->qty;
}
return (-$old_total+$total);
break;
}
}
?>

0 Спасибо
Аватар пользователя NaZg
NaZg 4 года назад
@drupal.org">mNigma@drupal.org написал:

Не думали через conditional_fields сделать?

0 Спасибо
Аватар пользователя mNigma@drupal.org
mNigma@drupal.org 4 года назад
NaZg написал:
Не думали через conditional_fields сделать?

Как-то с этим модулем не встречался, да и раз уже решил вопрос, доп модули не нужны. Спасибо за направление, возможности модуля посмотрю!

0 Спасибо
Аватар пользователя sandman81
sandman81 3 года назад

Можно ли создать атрибут с текстовым полем и в зависимости от числа введенного туда менялась цена?

0 Спасибо