3.2 Умножать товар на опцию. Этот пункт позволяет размножить один товар на его вариации, как этого требуют маркетплейсы Например у вас есть футболка, в ней есть опции Цвет (Синий/Красный) и Размер (S/M/L). Выбрав в наборах эти опции на выходе мы получим 6 разных offer:
В некоторых маркетплейсах это потом группируется в варианты товара (опции в opencart)
Ниже можно добавить Наборы опций.
Наборы опций - это некие логические блоки которые объединяют похожие по смыслу опции. Давайте на примере.
У нас есть в продаже Футболки и Штаны
Так вот нам надо будет создать два блока с опциями В первый блок добавим опции Выберите цвет футболки+Выберите цвет штанов - это будет логический блок опций обозначающий цвет. Во второй опции Выберите размер футболки+Выберите размер штанов который будет у нас идти как размер. В самом модуле уже эти блоки будут доступны как [[optionset1]] и [[optionset2]]. Это можно вставлять туда где надо вывести Значение опций.
Когда добавляем опции в наборы надо четко разграничивать опции по смыслу. Например Если у нас есть опции:
То в набор который будет группировать цвет добавляем выделенные выше.
По умолчанию offer id в фиде равен id товара, однако когда мы выбираем умножение на опции то у нас не может быть один id на все варианты товара. В таком случае модуль генерирует id в формате: (id товара) +( id опций + id значений опции). Шаблон можно поменять. Он находится в $data['product_option_id_pattern'] и в $data['option_ids_pattern'].
$data['option_ids_pattern'] - это шаблон генерации блока с id опции и id значения опции.
По умолчанию значение параметра $data['option_ids_pattern'] = '{option_id}{option_value_id}';
Где {option_id} - это id опции а {option_value_id} - это id значения опции.
Если у вас будет два блока опций (id 5 и id 7 и их значения с id 243 и 395) то эта часть будет генерировать такую приставку: 52437395.
Если мы поставим (через кастомный код) параметр $data['option_ids_pattern'] = '.{option_id}.{option_value_id}'; то будет .5.243.7.395
$data['product_option_id_pattern'] - это шаблон генерации блока id товара который состоит из самого id товара и id набора опций.
По умолчанию значение параметра $data['product_option_id_pattern'] = '{product_id}{option_ids}';
Где {product_id} - id товара, а {option_ids} - это значение из обхода блоков опций ($data['option_ids_pattern']).
Если у нас будет id товара 2435 то конечный offer id будет 2435.5.243.7.395 или 243552437395
Если поставите значение как {product_id}-{option_ids} то id будет
Если такое {option_ids}_{product_id} то 52437395_2435 или наоборот 2435_52437395
В шаблон можно прописать любые данные - главное что бы тот маркетплейс куда будете выгружаться принимал их в таком формате. Лучше конечно только цифры без точек и прочих разделителей.
Можно создать бесконечное количество наборов, однако надо понимать что не все нужно умножать, рекомендуется только Размер, Цвет, и другие модификации. С увеличением наборов в конечном XML будут увеличиваться количество offer.
Для запрета подсчета Акции в зависимости от процента акции можно в пункте 4.2 поставить $data['special_percent'] = false;
Для подсчета старой цены в зависимости от процентного соотношения можно в пункте 4.2 добавить $data['special_percent_revers'] = true;
Если вам надо опции в виде списка опций например
<options> <option name="Наволочки"> <values> <value> <name>Персональные 2 шт (перешив)</name> <quantity>500</quantity> <price>60.0000</price> <prefix>+</prefix> </value> <value> <name>70×70 - 1 шт | 50×70 - 1 шт (перешив)</name> <quantity>497</quantity> <price>30.0000</price> <prefix>+</prefix> </value> </values> </option> <option name="Размер"> <values> <value> <name>Семейный</name> <quantity>92</quantity> <price>420.0000</price> <prefix>+</prefix> </value> <value> <name>Евро макси</name> <quantity>98</quantity> <price>320.0000</price> <prefix>+</prefix> </value> <value> <name>Евро средний</name> <quantity>97</quantity> <price>250.0000</price> <prefix>+</prefix> </value> </values> </option> </options>
то в пункте 4.3 можно добавить код
$allowed = ['Наволочки','Размер']; $sql = "SELECT od.name as option_name, ovd.name as option_value, pov.quantity as option_quantity, pov.price as option_price, pov.price_prefix as option_price_prefix FROM " . DB_PREFIX . "product_option po LEFT JOIN " . DB_PREFIX . "product_option_value pov ON(po.product_option_id = pov.product_option_id) LEFT JOIN " . DB_PREFIX . "option_description od ON(po.option_id = od.option_id) LEFT JOIN " . DB_PREFIX . "option_value_description ovd ON(pov.option_value_id = ovd.option_value_id) WHERE po.product_id = '" . $product['product_id'] . "' AND od.language_id = '" . $data['language'] . "' AND ovd.language_id = '" . $data['language'] . "' "; $options_query = $this->db->query($sql); if($options_query->num_rows){ $options = []; foreach($options_query->rows as $row){ if(in_array($row['option_name'], $allowed)){ $options[$row['option_name']][$row['option_value']] = [ 'quantity' => $row['option_quantity'], 'price' => $row['option_price'], 'price_prefix' => $row['option_price_prefix'], ]; } } $opt_xml = ''; foreach($options as $option => $values){ $opt_xml .= '<option name="' . $option . '"><values>'; foreach($values as $value_name => $value){ $opt_xml .= '<value><name>' . $value_name . '</name>'; $opt_xml .= '<quantity>' . $value['quantity'] . '</quantity>'; $opt_xml .= '<price>' . $value['price'] . '</price>'; $opt_xml .= '<prefix>' . $value['price_prefix'] . '</prefix></value>'; } $opt_xml .= '</values></option>'; } if($opt_xml){ $product['attributes_full'][] = array( 'name' => 'options', 'text' => $opt_xml, 'end' => 'options', 'decode' => true, ); } }
В параметрах системы UniXML настройка находится в $data['option_multiplier_status']