Привет!
Все таки какой замечательный этот Rules! Сегодня провел такой эксперимент:
Задача:
Автоматически заполнять поле "цена со скидкой" вычисляемым значением в зависимости от значений полей "цена" и "размер скидки в процентах".
Выполнение: Нужны модули CCK и Rules
- Созданием в типе материала соответствующие поля:
- Стоимость услуги: field_com_services_price (тип целое число)
- Размер скидки в %: field_com_services_discount (тип целое число)
- Стоимость со скидкой: field_com_services_price_dis (тип целое число) (авто заполнение по правилам в Rules)
- Идем в Rules:
- Создаем новое правило с событием "После редактирования существующего элемента"
- Условие №1: Обновленное содержимое и наш тип контента.
Условие №2: Поле было изменено 'field_com_services_discount' - Действие: Заполнить поле 'field_com_services_price_dis'
Указываем значение с помощью PHP-кода:<?php
$price = $node->field_com_services_price[0]['value'];
$discount = $node->field_com_services_discount[0]['value'];
$pricedis = $node->field_com_services_price_dis[0]['value'];
return array (
0 => array('value' => $pricedis = $price-$price*($discount/100))
);
?>
Благодарности: пользователю digital_sword за код, который я потом адаптировал под вычисление скидки.
Дальнейшие планы:
Планирую это дело прикрутить к типу материала Product Ubercart. А потом присоединять товары к акциям с изменением размера скидки и заполнением цены со скидкой, как CCK-мультиполя
UPD:
Есть пока один минус в этом решении: если убрать значение в поле "размер скидки", то Rules ставит ноль в поле "цена со скидкой". А по идее, если размер скидки не внесен, то и поле "цена со скидкой" должно быть пустым и не выводится.
Добавляем в созданное правило еще одно условие:
Поле имеет значение. Выбираем 'field_com_services_discount' (Размер скидки) и ставим чекбокс "Обратить". Т. е. теперь Rules будет выполнять правило только если поле "размер скидки" не пустое.
Вложение | Размер |
---|---|
rules_price_product_discount.png | 24.47 КБ |
Комментарии
Мощно! Спасибо! В закладки.
Вот бы еще ряд примеров для построения других вычислений (
$price-$price*($discount/100)
) для несмыслящих в php...Я порыскал по гуглу с запросом типа "вычисление процентов PHP". Нашел где-то (где не помню) примеры и адаптировал их.
Да, надо бы создать еще поле "размер скидки в рублях" и тоже засунуть вычисление с ним в Rules.
И два чекбокса "Размер скидки в %" и "Размер скидки в рублях", чтобы по Conditional Field вылазили по ним соответствующие поля для внесения размера скидки.
Так лучше будет.
Есть пока один минус в этом решении: если убрать значение в поле "размер скидки", то Rules ставит ноль в поле "цена со скидкой". А по идее, если размер скидки не внесен, то и поле "цена со скидкой" должно быть пустым и не выводится.
Добавляем в созданное правило еще одно условие:
Поле имеет значение. Выбираем 'field_com_services_discount' (Размер скидки) и ставим чекбокс "Обратить". Т. е. теперь Rules будет выполнять правило только если поле "размер скидки" не пустое.
Внес это в топик как UPD
суб
Круто!
У меня есть вебформа "заявка на тур", где юзер заполняет поля типа "хочу страну", "хочу отель" и т.п. - долго думал, как вывести примерную стоимость тура по результатам заявки.
Теперь думаю реализовать это не вебформой, а типом материала (еще один толчок к этому - отсутствие зависимых полей в вебформе (не смог их настроить, точнее)).
Вообще Rules офигенная штука, его надо изучать и проводить с ним всяческие эксперименты. Видеоуроки по использованию Rules здесь: http://xandeadx.ru/blog/drupal/363 Те, что на eng, довольно понятны, если даже знание языка не на уровне.
Вот тут топикастер вроде как сделал на webform, webform_validation, webform_conditional, webform_computed хорошенький калькулятор
О, круто! Пошел в ту тему.
Спасибо!
Хочу сделать то, что описано в топике, для Ubercert Product. Он то делается. Но мене надо, чтобы редактирование CCK полей скидок товара можно было делать в форме редактирования другого типа материала "Акция".
Уж как связать CCK поле "Размер скидки" в Акции с полем "Цена со скидкой" конкретного товара и редактирование всего этого в Акции добавляется (множится) через Multigroup - история сложная.
Есть вроде неплохой вариант - модуль Node Widget, но когда его ставишь, он напрочь отключает все Block Reference в нодах. Да и CCK Multigroup не хочет поддерживать Block Reference.
Как можно связать CCK поле в одном типе материала с материалом, которое добавляется по Node Reference? Если так можно сделать, то и в Rules, думаю, получится, чтобы при внесения значения "Размер скидки" к товару в поле материала типа Ации шел пересчет для поля "Цена со скидкой" в материале типа "Товар", который подгружается в "Акцию" по nodereference.
Подключил Node Widget 6.x-1.x-dev вместо 6.x-1.0-beta4 вроде не так страшно теперь
В общем глючный.
Попробую в сторону Display Suite копнуть, вот и видео есть к нему.
Может кто нибудь помочь в этой теме?