Tumoxa Posted February 9, 2017 Report Share Posted February 9, 2017 Здравствуйте, вообщем вопрос: есть товар он находится в категории телевизоры, я хочу его перенести в категорию телефоны. Делаю выгрузку, меняю там категорию на телефоны и загружаю. Итог: у товара добавилась еще одна под категория. Как я понимаю надо внести изменения в логику работы 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; } Quote Link to post Share on other sites
koteyka Posted February 10, 2017 Report Share Posted February 10, 2017 (edited) А зачем импортом? В админке отметьте товары, которые надо перенести и внизу, в выпадающем списке выберите "Перенести в категорию" Если всё же хотите импортом, то перед загрузкой категорий нужно у товара все категории удалить. Для этого замените код (примерно 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); Edited February 10, 2017 by koteyka Quote Link to post Share on other sites
ahmed Posted February 10, 2017 Report Share Posted February 10, 2017 А зачем импортом? В админке отметьте товары, которые надо перенести и внизу, в выпадающем списке выберите "Перенести в категорию" Если всё же хотите импортом, то перед загрузкой категорий нужно у товара все категории удалить. Для этого замените код (примерно 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); Вы бы проверили свой способ. Ведь грубая ошибка прямо в глаза бросается.И код, который Вы предлагаете заменить, в указанном файле отсутствует. Quote Link to post Share on other sites
koteyka Posted February 10, 2017 Report Share Posted February 10, 2017 И код, который Вы предлагаете заменить, в указанном файле отсутствует.Да. Фореч пропустил и скобки, по памяти писал. Думаю, раз человек нашел нужную функцию, то скобки он в состоянии был заметить. Найти // Добавляем категории к товару 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); } Quote Link to post Share on other sites
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.