3.8 Выгрузка атрибутов - это настройка позволяет выгружать атрибуты или не выгружать. Для некоторых маркетплейсов атрибуты не нужно выгружать и их можно выключить. В таком случае будет меньше нагрузки при генерации.
Этот пункт имеет подпункт Соответствие атрибутов. Когда выбираем выгружать атрибуты этот пункт доступен для настройки.
Соответствие это когда в фиде надо Атрибут "Цвет дивана" передать как просто "Цвет", тогда надо сделать соответствие Цвет дивана - Цвет. Что бы прописать надо нажать на синий плюсик ниже справа. И будет доступно два поля.
1) Атрибут магазина. Здесь надо начинать вводить название и внизу появится список из найденных атрибутов. Для выбора - обязательно кликнуть по нужному что бы в систему передалось id атрибута.
2) Атрибут в выгрузке. Здесь можно просто прописать название как оно должно быть в фиде. Как правило пишут название такое как это свойство называется на маркетплейсе.
Обратите внимание, если мы задаем соответствия то то что задано и будет выводится в фиде. Таким образом мы можем явно указать какие атрибуты выгружать и их же сразу переименовать.
Для выгрузки атрибутов на двух языках (например для розетки) из модуля Attribute Text Select достаточно добавить в пункте 4.2 код
$attr_replace = $this->db->query("SELECT * FROM " . DB_PREFIX . "unixml_replace_name WHERE feed = '" . $data['feed'] . "' AND replace_where IN(7,8)");
$data['replace_attr'] = [];
$data['replace_val'] = [];
foreach($attr_replace->rows as $replace){
if($replace['replace_where'] == 7){
$data['replace_attr'][$replace['name_from']] = $replace['name_to'];
}
if($replace['replace_where'] == 8){
$data['replace_val'][$replace['name_from']] = $replace['name_to'];
}
}
И в пункте 4.3 добавить
$product['attributes'] = [];
$result = array();
$product_id = $product['product_original_id'];
$language_id = $data['language'];
$language_id_ua = $data['lang_data']['lang_id'];
$setting_mod = $this->config->get('attribute_text_select_setting');
$separ = ' '; $delit = ''; $delit_attribs = array();
if(isset($setting_mod['separ'][0])) {$separ = $setting_mod['separ'][0].' ';}
if(isset($setting_mod['delit']) && $setting_mod['delit']) {
$delit = html_entity_decode($setting_mod['delit'], ENT_QUOTES, 'UTF-8');
if(isset($setting_mod['delit_attribs']) && trim($temp_str = preg_replace("/[^,;0-9]/", '', $setting_mod['delit_attribs']))) {$delit_attribs = array_unique(preg_split("/[\s,;]+/", $temp_str, 0, PREG_SPLIT_NO_EMPTY));}
else {$separ = $delit;}
}
$query_str = "SELECT agd.`name` AS `name_group`, tatp.`attribute_id`, ad.`name`, ad.`language_id`, tatp.`text_id`, (SELECT atl.`text` FROM `".DB_PREFIX."attribute_text_lang` AS atl WHERE tatp.`text_id` = atl.`text_id` AND atl.`language_id` = ".$language_id." LIMIT 1) AS `text`";
$query_str .= " FROM (SELECT atp.`attribute_id`, atp.`text_id` FROM `".DB_PREFIX."attribute_text_product` atp WHERE atp.`product_id` = ".(int)$product_id.") tatp ";
$query_str .= " LEFT JOIN `".DB_PREFIX."attribute` AS a ON (tatp.`attribute_id` = a.`attribute_id`)";
$query_str .= " LEFT JOIN `".DB_PREFIX."attribute_description` AS ad ON (a.`attribute_id` = ad.`attribute_id`)";
$query_str .= " LEFT JOIN `".DB_PREFIX."attribute_group` AS ag ON (a.`attribute_group_id` = ag.`attribute_group_id`)";
$query_str .= " LEFT JOIN `".DB_PREFIX."attribute_group_description` AS agd ON (ag.`attribute_group_id` = agd.`attribute_group_id`)";
$query_str .= " WHERE ad.`language_id` = ".$language_id." AND agd.`language_id` = ".$language_id." ";
$query_str .= " ORDER BY ag.`sort_order`, `name_group`, a.`sort_order`, ad.`name`";
$query_str .= ", (`text`+0), `text`";
$query_attribute_group = $this->db->query($query_str);
foreach($query_attribute_group->rows as $colum) {
$attribute_id = (int)$colum['attribute_id'];
$result[$attribute_id]['attribute_id'] = $attribute_id;
$result[$attribute_id]['name'] = $colum['name'];
$text_id = (int)$colum['text_id'];
if($text_id) {
$text = trim($colum['text']);
$text_ua = $text;
$q = $this->db->query("SELECT * FROM " . DB_PREFIX . "attribute_text_lang WHERE attribute_id = '" . (int)$attribute_id . "' AND text_id = '" . (int)$text_id . "' AND language_id = '" . (int)$language_id_ua . "'");
if($q->num_rows){
$text_ua = $q->row['text'];
}
if(!empty($result[$attribute_id]['text'])) {
$result[$attribute_id]['text'] .= (in_array($attribute_id, $delit_attribs) ? $delit : $separ).$text;
}else {
$result[$attribute_id]['text'] = $text;
}
if(!empty($result[$attribute_id]['text_ua'])) {
$result[$attribute_id]['text_ua'] .= (in_array($attribute_id, $delit_attribs) ? $delit : $separ).$text_ua;
}else {
$result[$attribute_id]['text_ua'] = $text_ua;
}
}else {
$result[$attribute_id]['text'] = '';
$result[$attribute_id]['text_ua'] = '';
}
}
foreach($result as $attr){
$attr_name = $attr['name'];
$attr_text = $attr['text'];
$attr_text_ua = $attr['text_ua'];
/*if(isset($data['replace_attr'][$attr_name])){
$attr['name'] = $data['replace_attr'][$attr_name];
}
if(isset($data['replace_val'][$attr_text])){
$attr['text'] = $data['replace_val'][$attr_text];
}
if(isset($data['replace_val'][$attr_text_ua])){
$attr['text_ua'] = $data['replace_val'][$attr_text_ua];
}*/
$attr['name'] = str_replace(array_keys($data['replace_attr']), array_values($data['replace_attr']), $attr['name']);
$attr['text'] = str_replace(array_keys($data['replace_val']), array_values($data['replace_val']), $attr['text']);
$attr['text_ua'] = str_replace(array_keys($data['replace_val']), array_values($data['replace_val']), $attr['text_ua']);
$product['attributes_full'][] = array(
'name' => 'param name="' . $attr['name'] . '"',
'text' => '<value lang="uk">' . $attr['text_ua'] . '</value><value lang="ru">' . $attr['text'] . '</value>',
'end' => 'param',
'decode' => true
);
}
В параметрах системы UniXML настройка находится в $data['attribute_status']