Перейти к содержанию
Официальный форум поддержки Simpla

Как Изменить Категорию Товара Через Csv?


Рекомендуемые сообщения

Здравствуйте, вообщем вопрос: есть товар он находится в категории телевизоры, я хочу его перенести в категорию телефоны. Делаю выгрузку, меняю там категорию на телефоны и загружаю. Итог: у товара добавилась еще одна под категория. Как я понимаю надо внести изменения в логику работы import.php - чтобы значение перезаписывалось, а если пусто оставалось прежнем.

 

Кто может что-то подсказать? Интересно почему так сделано изначально.



// Отдельная функция для импорта категории
    private function import_category($category)
    {            
        // Поле "категория" может состоять из нескольких имен, разделенных subcategory_delimiter-ом
        // Только неэкранированный subcategory_delimiter может разделять категории
        $delimiter = $this->subcategory_delimiter;
        $regex = "/\\DELIMITER((?:[^\\\\\DELIMITER]|\\\\.)*)/";
        $regex = str_replace('DELIMITER', $delimiter, $regex);
        $names = preg_split($regex, $category, 0, PREG_SPLIT_DELIM_CAPTURE);
        $id = null;   
        $parent = 0; 
        
        // Для каждой категории
        foreach($names as $name)
        {
            // Заменяем \/ на /
            $name = trim(str_replace("\\$delimiter", $delimiter, $name));
            if(!empty($name))
            {
                // Найдем категорию по имени
                $this->db->query('SELECT id FROM __categories WHERE name=? AND parent_id=?', $name, $parent);
                $id = $this->db->result('id');
                
                // Если не найдена - добавим ее
                if(empty($id))
                    $id = $this->categories->add_category(array('name'=>$name, 'parent_id'=>$parent, 'meta_title'=>$name,  'meta_keywords'=>$name,  'meta_description'=>$name, 'url'=>$this->translit($name)));
 
                $parent = $id;
            }    
        }
        return $id;
    }
Ссылка на сообщение
Поделиться на другие сайты

А зачем импортом? В админке отметьте товары, которые надо перенести и внизу, в выпадающем списке выберите "Перенести в категорию"

 

Если всё же хотите импортом, то перед загрузкой категорий нужно у товара все категории удалить. Для этого замените код (примерно 266 строка) в simpla/ajax/import.php

		// Добавляем категорию к товару
		if(!empty($category_id))
			$this->categories->add_product_category($product_id, $category_id);

на этот

		// Добавляем категорию к товару
		if(!empty($category_id))
			$this->db->query('DELETE FROM __products_categories WHERE product_id = ?', $product_id);
			$this->categories->add_product_category($product_id, $category_id);
Изменено пользователем koteyka
Ссылка на сообщение
Поделиться на другие сайты

 

А зачем импортом? В админке отметьте товары, которые надо перенести и внизу, в выпадающем списке выберите "Перенести в категорию"

 

Если всё же хотите импортом, то перед загрузкой категорий нужно у товара все категории удалить. Для этого замените код (примерно 266 строка) в simpla/ajax/import.php

		// Добавляем категорию к товару
		if(!empty($category_id))
			$this->categories->add_product_category($product_id, $category_id);

на этот

		// Добавляем категорию к товару
		if(!empty($category_id))
			$this->db->query('DELETE FROM __products_categories WHERE product_id = ?', $product_id);
			$this->categories->add_product_category($product_id, $category_id);

 

Вы бы проверили свой способ. Ведь грубая ошибка прямо в глаза бросается.

И код, который Вы предлагаете заменить, в указанном файле отсутствует.

Ссылка на сообщение
Поделиться на другие сайты

И код, который Вы предлагаете заменить, в указанном файле отсутствует.

Да. Фореч пропустил и скобки, по памяти писал. Думаю, раз человек нашел нужную функцию, то скобки он в состоянии был заметить.

 

Найти

			// Добавляем категории к товару
			if(!empty($categories_ids))
				foreach($categories_ids as $c_id)
					$this->categories->add_product_category($product_id, $c_id);

заменить на


			// Добавляем категории к товару
			if(!empty($categories_ids))
                        {
                                $this->db->query('DELETE FROM __products_categories WHERE product_id = ?', $product_id);
				foreach($categories_ids as $c_id)
					$this->categories->add_product_category($product_id, $c_id);
                        }
Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
×
×
  • Создать...