В последней версии 1.6.4.7 при изменении структуры в 1С на сайте структура не менялась хотя товары продолжали появляться в них при добавлении в 1С. Вчера я исправил эту ошибку, но старые категории которые Вы пометите на удаление и удалите либо исключите их в обмене, то они останутся на сайте и их нужно будет удалять вручную. А товары которые в них были, при обмене перенесутся в другие категории.
Исправление внесено в файл model/extension/exchange1c.php
Исправление под номером #FIX230414-01
/**
* ver 10
* update 2023-04-14
* Исправление #FIX230414-01
* Парсит группы в классификаторе в XML
*/
private function parseClassifierCategories($xml, $parent_id = 0, &$num_categories, $level = 0) {
foreach ($xml->Группа as $xml_category) {
if ($xml_category->Ид && $xml_category->Наименование) {
$num_categories++;
$guid = (string)$xml_category->Ид;
$category_id = isset($this->CATEGORIES[$guid]) ? $this->CATEGORIES[$guid]['category_id'] : 0;
$data = array(
'parent_id' => $parent_id,
'name' => htmlspecialchars(trim((string)$xml_category->Наименование)),
'version' => $xml_category->НомерВерсии ? (string)$xml_category->НомерВерсии : "",
'guid' => $guid,
'top' => $parent_id ? 0 : 1,
'image' => '',
'column' => 1,
'sort_order' => $num_categories,
'status' => 1,
'noindex' => 1,
'category_description' => array(
$this->LANG_ID => array(
'name' => htmlspecialchars(trim((string)$xml_category->Наименование)),
'meta_h1' => htmlspecialchars(trim((string)$xml_category->Наименование)),
'description' => '',
'description_bottom'=> '',
'meta_title' => '',
'meta_description' => '',
'meta_keyword' => ''
)
)
);
$this->log("Категория: '" . $data['name'] . "'");
// Сортировка категории (по просьбе Val)
if ($xml_category->Сортировка) {
$data['sort_order'] = (int)$xml_category->Сортировка;
}
// Картинка категории (по просьбе Val)
if ($xml_category->Картинка) {
$data['image'] = (string)$xml_category->Картинка;
}
// Если пометка удаления есть, значит будет отключен
if ((string)$xml_category->ПометкаУдаления == 'true') {
$data['status'] = 0;
} elseif ($category_id && $this->config->get('exchange1c_category_exist_status_enable') == 1) {
// Включить существующие категории
$data['status'] = 1;
}
$this->log($data, 2);
if ($category_id) {
$this->log("Обновим категорию ".$data['name']);
$this->updCategory($category_id, $data);
$this->CATEGORIES[$guid]['update'] = true;
} else {
if ($this->config->get('exchange1c_category_new_no_create') == 1) {
$this->log("Включен запрет на создание новых категорий", 2);
continue;
} else {
$this->log("Добавим новую категорию ".$data['name']);
$category_id = $this->addCategory($data);
$this->CATEGORIES[$guid] = array(
'category_id' => $category_id,
'version' => $data['version'],
'update' => true
);
}
}
} // if ($xml_category->Ид && $xml_category->Наименование)
$this->log("===");
if ($xml_category->Группы) {
$level++;
$this->parseClassifierCategories($xml_category->Группы, $category_id, $num_categories, $level);
$level--;
if ($this->ERROR) return false;
}
} // foreach
return true;
} // parseClassifierCategories()
Также были исправлена функция обновления категории updateCategory() и была переименована в updCategory().
Исправление в том же файле
Исправление #FIX2304014-02
/**
* ver 6
* update 2023-04-14
* FIX #230414-02
* Обновляет категорию
*/
private function updCategory($category_id, $data) {
// Получим старые данные
$old = $this->getCategory($category_id);
$this->log($old, 2);
$data['image'] = isset($old['image']) ? $old['image'] : '';
$data['category_description'][$this->LANG_ID]['description'] = isset($old['description']) ? $old['description'] : '';
$data['category_description'][$this->LANG_ID]['meta_title'] = isset($old['meta_title']) ? $old['meta_title'] : '';
$data['category_description'][$this->LANG_ID]['meta_keyword'] = isset($old['meta_keyword']) ? $old['meta_keyword'] : '';
$data['category_description'][$this->LANG_ID]['meta_description'] = isset($old['meta_description']) ? $old['meta_description'] : '';
$data['category_store'] = array($this->STORE_ID);
$data['keyword'] = isset($old['keyword']) ? $old['keyword'] : '';
// SEO
if ($this->config->get('exchange1c_seo_category_mode') != 'disable')
$this->seoGenerateCategory($category_id, $data['category_description'][$this->LANG_ID]);
$this->log($data, 2);
$this->load->model('catalog/category');
$this->model_catalog_category->editCategory($category_id, $data);
return true;
} // updCategory()