adeiit Posted December 26, 2015 Report Share Posted December 26, 2015 (edited) Всем доброго времени суток стоит задача импортировать прайс лист csv формата в симплу. Что-то я адаптировал под симплу, что-то в ручную просто повставлял. В качестве адреса страницы взял артикул.Осталась только одна проблема, в магазине есть категории с дочерними категориями, например крупнобытовая техника/холодильники, а прайс поставщика изначально подразумевает только дочернюю категории "Холодильники". Подскажите, как можно реализовать чтобы товары заносились в категорию крупонобытовая техника/холодильники, а не создавал новую "главную" категорию "холодильники" так как таких подкатегорий очень много и нужно раскидать их по главным категориям.Думал над возможностью написания макроса в excel где будет сопоставление по названиям категорий и под категорий, типа если в ячейке "категория" написано холодильники (категория которую может предоставить поставщик) то эта ячейка заменяется на крупнобытовая техника/холодильники. Возможно у вас есть свои варианты решения данной задачи? Подскажите как можно реализовать. Во вложениях прилагаю формат прайс листа который предоставляет поставщик Edited December 26, 2015 by adeiit Quote Link to post Share on other sites
mishanya Posted December 26, 2015 Report Share Posted December 26, 2015 В качестве адреса страницы взял артикулнужно просто удалить колонку адрес, тогда адрес будет автоматически сгенерирован на основе имени товара. + вы не добавили в прайс названия колонок в первой строке Quote Link to post Share on other sites
adeiit Posted December 26, 2015 Author Report Share Posted December 26, 2015 нужно просто удалить колонку адрес, тогда адрес будет автоматически сгенерирован на основе имени товара. + вы не добавили в прайс названия колонок в первой строкеЭто прайс поставщика, в таком виде он его предоставляет, надо было конечно добавить что бы нагляднее было, сейчас перезалью Quote Link to post Share on other sites
adeiit Posted December 26, 2015 Author Report Share Posted December 26, 2015 нужно просто удалить колонку адрес, тогда адрес будет автоматически сгенерирован на основе имени товара. + вы не добавили в прайс названия колонок в первой строкеа что можете подсказать по поводу решения задачи с подкатегориями? Quote Link to post Share on other sites
mishanya Posted December 26, 2015 Report Share Posted December 26, 2015 Осталась только одна проблема, в магазине есть категории с дочерними категориями, например крупнобытовая техника/холодильники, а прайс поставщика изначально подразумевает только дочернюю категории "Холодильники". Подскажите, как можно реализовать чтобы товары заносились в категорию крупонобытовая техника/холодильники, а не создавал новую "главную" категорию "холодильники" так как таких подкатегорий очень много и нужно раскидать их по главным категориям.все сделано на самом деле правильно, т.к. может быть две категории например Холодильники, одна корневая а другая подкатегория. есть несколько выходов из ситуации- проставить вручную эти корневые категории в прайсе и все будет импортировать- если у вас нет категорий с одинаковыми именами (корневой и подкатегорий) можно переделать импорт чтобы искало только по названию и в эту категорию и вставляло.- добавлять еще в прайс айди категории и по ней цеплять товар к категории. что тоже требует изменения импорта Quote Link to post Share on other sites
adeiit Posted December 26, 2015 Author Report Share Posted December 26, 2015 все сделано на самом деле правильно, т.к. может быть две категории например Холодильники, одна корневая а другая подкатегория. есть несколько выходов из ситуации- проставить вручную эти корневые категории в прайсе и все будет импортировать- если у вас нет категорий с одинаковыми именами (корневой и подкатегорий) можно переделать импорт чтобы искало только по названию и в эту категорию и вставляло.- добавлять еще в прайс айди категории и по ней цеплять товар к категории. что тоже требует изменения импортакак можно воплотить в жизнь второй вариант? нет категорий, имена которых, совпадают с подкатегориями Quote Link to post Share on other sites
Solution mishanya Posted December 26, 2015 Solution Report Share Posted December 26, 2015 (edited) попробуйте заменить в simpla/ajax/import.php функцию private function import_category($category)на мою: 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; // получаем последнюю категорию товара в цепочке и ищем ее в каталоге $last_cat = end($names); $this->db->query('SELECT id FROM __categories WHERE name=?', $last_cat); $id = $this->db->result('id'); // если мы нашли категорию, сразу возвращаем ее айди, если нет, добавляем категорию по иерархии if(empty($id)) { // Для каждой категории 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; } работает так: выбирает последнюю категорию в цепочке (если указана главная и субкатегории), если такая категория найдена по имени, возвращает сразу айди этой категории и вставляет туда товар. если категория не найдена, она добавляется с учетом указанной иерархии в импорте (так как по умолчанию). тоесть, если у вас указано у товара1 категория Коляски/Аксессуары, а у товара2 просто Аксессуары оба тавара добавит в категорию Коляски/Аксессуары, учтите, одинаковых имен быть не должно, иначе добавит в первую что найдена. Edited December 26, 2015 by mishanya Quote Link to post Share on other sites
mishanya Posted December 26, 2015 Report Share Posted December 26, 2015 (edited) можно еще добавить проверку, если в импорте не одна категория а цепочка категорий через слеш, проверять стандартно вложенность. Edited December 26, 2015 by mishanya Quote Link to post Share on other sites
adeiit Posted December 26, 2015 Author Report Share Posted December 26, 2015 попробуйте заменить в simpla/ajax/import.php функцию private function import_category($category)на мою: 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; // получаем последнюю категорию товара в цепочке и ищем ее в каталоге $last_cat = end($names); $this->db->query('SELECT id FROM __categories WHERE name=?', $last_cat); $id = $this->db->result('id'); // если мы нашли категорию, сразу возвращаем ее айди, если нет, добавляем категорию по иерархии if(empty($id)) { // Для каждой категории 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; } работает так: выбирает последнюю категорию в цепочке (если указана главная и субкатегории), если такая категория найдена по имени, возвращает сразу айди этой категории и вставляет туда товар. если категория не найдена, она добавляется с учетом указанной иерархии в импорте (так как по умолчанию).Показатьтоесть, если у вас указано у товара1 категория Коляски/Аксессуары, а у товара2 просто Аксессуары оба тавара добавит в категорию Коляски/Аксессуары, учтите, одинаковых имен быть не должно, иначе добавит в первую что найдена.огромнейшее спасибо, испытал моральный оргазм после того как увидел что товары сели сразу в дочернюю категорию и не стали создавать новую)Пользуясь случаем хотел спросить, возможно есть решение по данной проблеме http://www.screencapture.ru/file/2e89c003Брендов много, и не красиво смотрится такое количество на главной странице, а вообще как с вами можно связаться? Есть несколько задач по интернет-магазину на симпле, не могу найти проггера, естественно на платной основе Quote Link to post Share on other sites
mishanya Posted December 26, 2015 Report Share Posted December 26, 2015 http://www.screencap...u/file/2e89c003Брендов много, и не красиво смотрится такое количество на главной странице, а вообще как с вами можно связаться? Есть несколько задач по интернет-магазину на симпле, не могу найти проггера, естественно на платной основену бренды это уже другая задача. пишите в личку что нужно сделать, обсудим. Quote Link to post Share on other sites
Kors Posted December 27, 2015 Report Share Posted December 27, 2015 (edited) Возможно у вас есть свои варианты решения данной задачи? Подскажите как можно реализовать. Во вложениях прилагаю формат прайс листа который предоставляет поставщикПриходилось пару раз заниматься подобными задачами. Сложился такой подход:1. Формируется, например, текстовый файл, с правилами для подмены категорий в виде строк видаХолодильники; крупнобытовая техника/холодильникиТелевизопы; Электроника/телевизоры2. При импорте подменяются названия поставщика (первое название в строке) на нужные названия (второе название в строке). Плюсы подхода:1. Изменения в скрипте импорта довольно простые и не затрагивают основной функционал.2. Нет никаких ограничений типа уникальности имен категорий, что является недостатком предложенного ранее метода.3. Способ позволяет более гибкую работу по преобразованию имен категорий от поставщика.4. В частности, можно переименовывать категории поставщика.5. В частности, можно "склеивать" две разные категории поставщика в одну категорию на своем сайте.6. Способ позволяет не только легко менять правила преобразования категорий, но и делать правила РАЗНЫМИ для разных поставщиков, просто создав несколько разных файлов правил и выбирая нужный файл при импорте. Edited December 27, 2015 by Kors 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.