Как сделать поле Размер в Line Item ограниченным только отмеченными терминами в Коммерческом продукте с вариациями, динамически?

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

Аватар пользователя tlito tlito 10 мая 2015 в 17:06

У меня есть тип материала Товар, к которому может подключаться несколько коммерческих продуктов, которые имеют вариации по цвету и размеру. Поле цвет имеет единственный выбор, то есть для создания товаров отличающихся по цвету нужно создавать много коммерческих продуктов, каждый из которых имеет свой единственный цвет.
Поле Размер я решил упростить для добавление товара - то есть можно в любом товаре отметить сразу несколько размеров, без необходимости добавлять вариации еще и по размеру, то есть получается типа так:
Товар женская блузка, его коммерческие продукты:
1. Синяя, размеры: 42, 46, 48
2. Черная, размеры: 40, 42, 44
3. Красная, размеры: 42, 44, 48.

Теперь задача сделать правильным выбор этих атрибутов. Для цвета мне было достаточно отметить галку
Активировать это поле как поле атрибута на форме добавления в корзину. -- и тогда появилось поле выбора при отображении товара с автоматической подгрузкой нового товара, с его фоткой и ценой, а также размерами.
А вот с размером это не получается. Если нажать это же у размера:
Активировать это поле как поле атрибута на форме добавления в корзину. -- то все равно отображается просто списком терминов без возможности выбора.

Тогда я использую Line Item по совету специалистов. Я сделал типа Line Item в котором добавил размеры.
Размеры выводятся все для всех товаров. то есть
38, 40, 42, 44, 46, 48, 50, 52... выводится радиокнопками правильно, но все подряд без учета того что в поле размер в Коммерческом продукте отмечено.

Мне нужно чтобы этот набор размеров зависел от того что отмечено в каждом Коммерческом продукте, подгружаемом динамически.
Я смог следующее:
1. написал модуль , в котором нашел как называется переменная поля Line Item размеры

<?php
/*disable attributes from node page of type product_with_attributes that are not checked*/
/*line_item_fields[field_size]  should be presented with only checked items from field-available-sizes */
// size S - $node->content['field_product']['0'][] 
// sizes line item - $node->content['field_product']['0']['line_item_fields']['field_size']['und']['#options'] 
// sizes line item - $node->content['field_product']['0']['line_item_fields']['field_size']['und']['2027'] 
// hide element line item size:
// $node->content['field_product']['0']['line_item_fields']['field_size']['und']['2027'] = array('#access' => FALSE);

function commerce_product_attributes_select_node_view($node$view_mode$langcode) {
    
    if (
$node->type=="product_with_attributes"){
        if (
$view_mode == 'full') {
            
            
dpm($node->content);
            
$node->content['field_product']['0']['line_item_fields']['field_size']['und']['2027'] = array('#access' => FALSE);
        }
    }
}

?>

2. научился скрывать один из элементов выбора:
$node->content['field_product']['0']['line_item_fields']['field_size']['und']['2027'] = array('#access' => FALSE);

где 2027 - это один из размеров 48.

Но если выбрать другой цвет а потом опять этот же, то эта строка сокрытия не работает, значит надо использовать динамику. то есть скрывать элементы динамичеки при подгрузке товара. КАК?

и второй вопрос, я все-таки не нашел в этой переменно $node->content где список терминов отмеченных в Коммерческом продукте в поле Размеры. собственно как это найти или придется обращаться к базам данных?

Помогите пожалуйста. нигде не видно как упростить добавление товаров отмечая сразу несколько размеров. везде предлагается делать набор товаров, то есть в данном случае вместо 3 товаров, предлагается делать 9, то есть

1. синяя блузка 42
2. синяя блузка 46,
3. синяя блузка 48
4. черная блузка 40...

а это неудобно. вот это неудобно: https://drupalcommerce.org/user-guide/product-attributes-variations

Комментарии