Вывожу в ноде несколько товаров с помощью Views. Все хорошо, до тех пор пока не надо считать скидку. Она рассчитывается только для первого в списке товара. Однако, при добавлении в корзину, скидка учитывается.
Сама скидка указывается как альтернативная цена в товаре и подменяется с помощью Rules.
<?php
{ "rules_sale" : {
"LABEL" : "Sale",
"PLUGIN" : "reaction rule",
"REQUIRES" : [ "rules", "commerce_line_item", "commerce_product_reference" ],
"ON" : [ "commerce_product_calculate_sell_price" ],
"IF" : [
{ "entity_has_field" : { "entity" : [ "commerce-line-item" ], "field" : "commerce_product" } },
{ "entity_has_field" : {
"entity" : [ "commerce-line-item:commerce-product" ],
"field" : "field_sale"
}
},
{ "NOT data_is_empty" : { "data" : [ "commerce-line-item:commerce-product:field-sale" ] } }
],
"DO" : [
{ "commerce_line_item_unit_price_amount" : {
"commerce_line_item" : [ "commerce_line_item" ],
"amount" : [ "commerce-line-item:commerce-product:field-sale:amount" ],
"component_name" : "discount",
"round_mode" : "1"
}
}
]
}
}
?>
Как сделать, чтобы скидка выводилась для всех товаров?
Вложение | Размер |
---|---|
![]() | 11.68 КБ |
![]() | 88.42 КБ |
Комментарии
Кастылем таки удалось решить проблему. Опишу в двух словах. Если кому-то надо понадобиться, распишу подробно.
Вместо простого поля «Commerce Product: Price» было использовано «Commerce Product: Rendered Commerce Product». Чтобы не выводились лишние поля, добавлен отедльный «View mode».
<?php
function tools_entity_info_alter(&$info) {
if (isset($info['commerce_product'])) {
$info['commerce_product']['view modes']['price_only'] = array(
'label' => t('Price only'),
'custom settings' => FALSE,
);
}
}
?>
Форматер поля тоже свой, но он не влияет на описываемую пролему.