Исправлена загрузка категорий

Версия 1.6

В последней версии 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()
Кириллов Виталий
Программист 1С, php, java, jquery. Мастер по ремонту электроники

Добавить комментарий

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.