Jump to content

Recommended Posts

Всем доброго времени суток стоит задача импортировать прайс лист csv формата в симплу. Что-то я адаптировал под симплу, что-то в ручную просто повставлял. В качестве адреса страницы взял артикул.


Осталась только одна проблема, в магазине есть категории с дочерними категориями, например крупнобытовая техника/холодильники, а прайс поставщика изначально подразумевает только дочернюю категории "Холодильники". Подскажите, как можно реализовать чтобы товары заносились в категорию крупонобытовая техника/холодильники, а не создавал новую "главную" категорию "холодильники" так как таких подкатегорий очень много и нужно раскидать их по главным категориям.

Думал над возможностью написания макроса в excel где будет сопоставление по названиям категорий и под категорий, типа если в ячейке "категория" написано холодильники (категория которую может предоставить поставщик) то эта ячейка заменяется на крупнобытовая техника/холодильники.

 

Возможно у вас есть свои варианты решения данной задачи? Подскажите как можно реализовать. Во вложениях прилагаю формат прайс листа который предоставляет поставщик

Edited by adeiit
Link to post
Share on other sites

 

В качестве адреса страницы взял артикул

нужно просто удалить колонку адрес, тогда адрес будет автоматически сгенерирован на основе имени товара.

 

+ вы не добавили в прайс названия колонок в первой строке

Link to post
Share on other sites

нужно просто удалить колонку адрес, тогда адрес будет автоматически сгенерирован на основе имени товара.

 

+ вы не добавили в прайс названия колонок в первой строке

Это прайс поставщика, в таком виде он его предоставляет, надо было конечно добавить что бы нагляднее было, сейчас перезалью

Link to post
Share on other sites

нужно просто удалить колонку адрес, тогда адрес будет автоматически сгенерирован на основе имени товара.

 

+ вы не добавили в прайс названия колонок в первой строке

а что можете подсказать по поводу решения задачи с подкатегориями?

Link to post
Share on other sites

 

Осталась только одна проблема, в магазине есть категории с дочерними категориями, например крупнобытовая техника/холодильники, а прайс поставщика изначально подразумевает только дочернюю категории "Холодильники". Подскажите, как можно реализовать чтобы товары заносились в категорию крупонобытовая техника/холодильники, а не создавал новую "главную" категорию "холодильники" так как таких подкатегорий очень много и нужно раскидать их по главным категориям.

все сделано на самом деле правильно, т.к. может быть две категории например Холодильники, одна корневая а другая подкатегория. 

 

есть несколько выходов из ситуации

- проставить вручную эти корневые категории в прайсе и все будет импортировать

- если у вас нет категорий с одинаковыми именами (корневой и подкатегорий) можно переделать импорт чтобы искало только по названию и в эту категорию и вставляло.

- добавлять еще в прайс айди категории и по ней цеплять товар к категории. что тоже требует изменения импорта

Link to post
Share on other sites

все сделано на самом деле правильно, т.к. может быть две категории например Холодильники, одна корневая а другая подкатегория. 

 

есть несколько выходов из ситуации

- проставить вручную эти корневые категории в прайсе и все будет импортировать

- если у вас нет категорий с одинаковыми именами (корневой и подкатегорий) можно переделать импорт чтобы искало только по названию и в эту категорию и вставляло.

- добавлять еще в прайс айди категории и по ней цеплять товар к категории. что тоже требует изменения импорта

как можно воплотить в жизнь второй вариант? нет категорий, имена которых, совпадают с подкатегориями

Link to post
Share on other sites
  • Solution

попробуйте заменить в 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 by mishanya
Link to post
Share on other sites

можно еще добавить проверку, если в импорте не одна категория а цепочка категорий через слеш, проверять стандартно вложенность.

Edited by mishanya
Link to post
Share on other sites

попробуйте заменить в 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

Брендов много, и не красиво смотрится такое количество на главной странице, а вообще как с вами можно связаться? Есть несколько задач по интернет-магазину на симпле, не могу найти проггера, естественно на платной основе

Link to post
Share on other sites

 

http://www.screencap...u/file/2e89c003

Брендов много, и не красиво смотрится такое количество на главной странице, а вообще как с вами можно связаться? Есть несколько задач по интернет-магазину на симпле, не могу найти проггера, естественно на платной основе

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

Link to post
Share on other sites

Возможно у вас есть свои варианты решения данной задачи? Подскажите как можно реализовать. Во вложениях прилагаю формат прайс листа который предоставляет поставщик

Приходилось пару раз заниматься подобными задачами. Сложился такой подход:

1. Формируется, например, текстовый файл, с правилами для подмены категорий в виде строк вида

Холодильники; крупнобытовая техника/холодильники

Телевизопы; Электроника/телевизоры

2. При импорте подменяются названия поставщика (первое название в строке) на  нужные названия (второе название в строке).

 

Плюсы подхода:

1. Изменения в скрипте импорта довольно простые и не затрагивают основной функционал.

2. Нет никаких ограничений типа уникальности имен категорий, что является недостатком предложенного ранее метода.

3. Способ позволяет более гибкую работу по преобразованию имен категорий от поставщика.

4. В частности, можно переименовывать категории поставщика.

5. В частности, можно "склеивать" две разные категории поставщика в одну категорию на своем сайте.

6. Способ позволяет не только  легко менять правила преобразования категорий, но и делать правила РАЗНЫМИ для разных поставщиков, просто создав несколько разных файлов правил и выбирая нужный файл при импорте.

Edited by Kors
Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...