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']