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

Добавление товара напрямую через php


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

Подскажите пожалуйста, пишу парсер для добавления товара. 

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

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

Подскажите пожалуйста, пишу парсер для добавления товара. 

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

Крайне не советую писать парсер и добавлять\обновлять данные на прямую.

Я пишу парсеры иначе, записываю все данные в CSV файл потом его импортирую в админке.

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

Подскажите пожалуйста, пишу парсер для добавления товара. 

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

 

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

 

Я пишу парсеры иначе, записываю все данные в CSV файл потом его импортирую в админке.

 

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

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

Спасибо за ответ, но 

Проблема еще в том, что у меня стоит модуль https://www.simpla-template.org.ua/products/varianty-tovara

Вообще я начал разбирать файл ProductAdmin.php

 

 
Вроде как после Этих строк должно уже все импортироваться
                      $product->id = $this->products->add_product($product);
                      $product = $this->products->get_product($product->id);
                    $this->design->assign('message_success', 'added');
 
Но потом идет условие
if($product->id)
                   {
И я не уверен, уже насколько все остальное важно. Думал может уже у кого-то есть своего рода готовое API c примерами как на том же Битриксе
Ссылка на сообщение
Поделиться на другие сайты

ну разный парсер разные подходы. все апи есть в папке апи) как добавлять товар/редактировать, добавлять варианты, можете посмотреть тот же импорт как там устроено добавление товара

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

 

Проблема еще в том, что у меня стоит модуль https://www.simpla-template.org.ua/products/varianty-tovara

 

Если это для Вас проблема и Вы хотите помощи по ней, то надо бы детально описывать свои затруднения...

 

Вроде как после Этих строк должно уже все импортироваться

$product->id = $this->products->add_product($product);

$product = $this->products->get_product($product->id);

$this->design->assign('message_success', 'added');

 

Но потом идет условие

if($product->id)

{

И я не уверен, уже насколько все остальное важно. Думал может уже у кого-то есть своего рода готовое API c примерами как на том же Битриксе

 

Очень сомневаюсь, что после этих строк "должно уже все импортироваться". Впрочем, надо пробовать и проверять, все или не все, и решать, насколько Вам остальное важно или не важно.

 

Еще хороший пример-ориентир - simpla/ajax/import.php...

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

 

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

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

Ссылка на сообщение
Поделиться на другие сайты
	require_once('api/Simpla.php');

			$ProductAdmin = new Simpla;
			$product = new stdClass;
			
			
			
			$options = array();
			$product_categories = array();
			$variants = array();
			$images = array();
			$product_features = array();
			$related_products = array();
			
			
			
			
			
			$product->id = "";
			$product->name = "Название";
			$product->visible = 1;
			$product->featured = '';
			$product->brand_id = 0;

			$product->url = "names";
			$product->meta_title = ('meta_title');
			$product->meta_keywords = ('meta_keywords');
			$product->meta_description = ('meta_description');
			
			$product->annotation =  "Краткое описание";
			$product->body = "Полное описание";

			// Варианты товара
			
			
			$variants["id"][0]= "";
			$variants["id"][1]= "";
			$variants["name"][0]= "вариант";
			$variants["name"][1]= "вариант2";
			$variants["color_code"][0]= "#FFFFFF";
			$variants["color_code"][1]= "#FFFFFF";
			$variants["color"][0]= "Без цвета";
			$variants["color"][1]= "Без цвета";
			$variants["images_ids"][0]= "";
			$variants["images_ids"][1]= "";
			$variants["sku"][0]= "";
			$variants["sku"][1]= "";
			$variants["price"][0]= "333";
			$variants["price"][1]= "333";
			$variants["compare_price"][0]= "";
			$variants["compare_price"][1]= "";
			$variants["stock_1"][0]= "10";
			$variants["stock_1"][1]= "10";
		
			
		
			if(count($variants) > 0)
			{
				foreach($variants as $n=>$va)
				{
					foreach($va as $i=>$v)
					{
						if(empty($variants[$i]))
							$variants[$i] = new stdClass;
						$variants[$i]->$n = $v;
					}
				}
			}
			// Категории товара
			$product_categories[0] = 129;
			if(is_array($product_categories))
			{
				foreach($product_categories as $c)
				{
					$x = new stdClass;
					$x->id = $c;
					$pc[] = $x;
				}
				$product_categories = $pc;
			}

				
	  				$product->id = $ProductAdmin->products->add_product($product);
	  				$product = $ProductAdmin->products->get_product($product->id);
					$ProductAdmin->design->assign('message_success', 'added');
	  				
   	    		
	
			if($product->id)
   	    		{
	   	    		// Категории товара
	   	    		$query = $ProductAdmin->db->placehold('DELETE FROM __products_categories WHERE product_id=?', $product->id);
	   	    		$ProductAdmin->db->query($query);
	 	  		    if(is_array($product_categories))
		  		    {
		  		    	foreach($product_categories as $i=>$category)
	   	    				$ProductAdmin->categories->add_product_category($product->id, $category->id, $i);
	  	    		}
	
	   	    		// Варианты
		  		    if(is_array($variants))
		  		    { 
	 					$variants_ids = array();
						foreach($variants as $index=>&$variant)
						{
							if($variant->stock == '∞' || $variant->stock == '')
								$variant->stock = null;
								
							// Удалить файл
							if(!empty($_POST['delete_attachment'][$index]))
							{
								$ProductAdmin->variants->delete_attachment($variant->id);
							}
	
		 					// Загрузить файлы
		 					if(!empty($_FILES['attachment']['tmp_name'][$index]) && !empty($_FILES['attachment']['name'][$index]))
		 					{
			 					$attachment_tmp_name = $_FILES['attachment']['tmp_name'][$index];					
			 					$attachment_name = $_FILES['attachment']['name'][$index];
		 						move_uploaded_file($attachment_tmp_name, $ProductAdmin->config->root_dir.'/'.$ProductAdmin->config->downloads_dir.$attachment_name);
		 						$variant->attachment = $attachment_name;
		 					}
	
							if(!empty($variant->id))
								$ProductAdmin->variants->update_variant($variant->id, $variant);
							else
							{
								$variant->product_id = $product->id;
								$variant->id = $ProductAdmin->variants->add_variant($variant);
							}
							$variant = $ProductAdmin->variants->get_variant($variant->id);
							if(!empty($variant->id))
					 			$variants_ids[] = $variant->id;
						}
						
	
						// Удалить непереданные варианты
						$current_variants = $ProductAdmin->variants->get_variants(array('product_id'=>$product->id));
						foreach($current_variants as $current_variant)
							if(!in_array($current_variant->id, $variants_ids))
	 							$ProductAdmin->variants->delete_variant($current_variant->id);
	 							 					
	 					//if(!empty($))
						
						// Отсортировать  варианты
						asort($variants_ids);
						$i = 0;
						foreach($variants_ids as $variant_id)
						{ 
							$ProductAdmin->variants->update_variant($variants_ids[$i], array('position'=>$variant_id));
							$i++;
						}
					}
	
					// Удаление изображений
					$images = (array)$ProductAdmin->request->post('images');
					$current_images = $ProductAdmin->products->get_images(array('product_id'=>$product->id));
					foreach($current_images as $image)
					{
						if(!in_array($image->id, $images))
	 						$ProductAdmin->products->delete_image($image->id);
						}
	
					// Порядок изображений
					if($images = $ProductAdmin->request->post('images'))
					{
	 					$i=0;
						foreach($images as $id)
						{
							$ProductAdmin->products->update_image($id, array('position'=>$i));
							$i++;
						}
					}
	   	    		// Загрузка изображений
		  		    if($images = $ProductAdmin->request->files('images'))
		  		    {
						for($i=0; $i<count($images['name']); $i++)
						{
				 			if ($image_name = $ProductAdmin->image->upload_image($images['tmp_name'][$i], $images['name'][$i]))
				 			{
			  	   				$ProductAdmin->products->add_image($product->id, $image_name);
			  	   			}
							else
							{
								$ProductAdmin->design->assign('error', 'error uploading image');
							}
						}
					}
	   	    		// Загрузка изображений из интернета и drag-n-drop файлов
		  		    if($images = $ProductAdmin->request->post('images_urls'))
		  		    {
						foreach($images as $url)
						{
							// Если не пустой адрес и файл не локальный
							if(!empty($url) && $url != 'http://' && strstr($url,'/')!==false)
					 			$ProductAdmin->products->add_image($product->id, $url);
					 		elseif($dropped_images = $ProductAdmin->request->files('dropped_images'))
					  		{
					 			$key = array_search($url, $dropped_images['name']);
							 	if ($key!==false && $image_name = $ProductAdmin->image->upload_image($dropped_images['tmp_name'][$key], $dropped_images['name'][$key]))
						  	   				$ProductAdmin->products->add_image($product->id, $image_name);
							}
						}
					}
					$images = $ProductAdmin->products->get_images(array('product_id'=>$product->id));
	
	   	    		// Характеристики товара
	   	    		
	   	    		// Удалим все из товара
					foreach($ProductAdmin->features->get_product_options($product->id) as $po)
						$ProductAdmin->features->delete_option($product->id, $po->feature_id);
						
					// Свойства текущей категории
					$category_features = array();
					foreach($ProductAdmin->features->get_features(array('category_id'=>$product_categories[0])) as $f)
						$category_features[] = $f->id;
	
	  	    		if(is_array($options))
					foreach($options as $option)
					{
						if(in_array($option->feature_id, $category_features))
							$ProductAdmin->features->update_option($product->id, $option->feature_id, $option->value);
					}
					
					// Новые характеристики
					$new_features_names = $ProductAdmin->request->post('new_features_names');
					$new_features_values = $ProductAdmin->request->post('new_features_values');
					if(is_array($new_features_names) && is_array($new_features_values))
					{
						foreach($new_features_names as $i=>$name)
						{
							$value = trim($new_features_values[$i]);
							if(!empty($name) && !empty($value))
							{
								$query = $ProductAdmin->db->placehold("SELECT * FROM __features WHERE name=? LIMIT 1", trim($name));
								$ProductAdmin->db->query($query);
								$feature_id = $ProductAdmin->db->result('id');
								if(empty($feature_id))
								{
									$feature_id = $ProductAdmin->features->add_feature(array('name'=>trim($name)));
								}
								$ProductAdmin->features->add_feature_category($feature_id, reset($product_categories)->id);
								$ProductAdmin->features->update_option($product->id, $feature_id, $value);
							}
						}
						// Свойства товара
						$options = $ProductAdmin->features->get_product_options($product->id);
					}

					// Связанные товары
	   	    		$query = $ProductAdmin->db->placehold('DELETE FROM __related_products WHERE product_id=?', $product->id);
	   	    		$ProductAdmin->db->query($query);
	 	  		    if(is_array($related_products))
		  		    {
		  		    	$pos = 0;
		  		    	foreach($related_products  as $i=>$related_product)
	   	    				$ProductAdmin->products->add_related_product($product->id, $related_product->related_id, $pos++);
	  	    		}
  	    		}
				
				
				
				
				
				
				
		if(empty($variants))
			$variants = array(1);
			
		if(empty($product_categories))
		{
			if($category_id = $ProductAdmin->request->get('category_id'))
				$product_categories[0]->id = $category_id;		
			else
				$product_categories = array(1);
		}
		if(empty($product->brand_id) && $brand_id=$ProductAdmin->request->get('brand_id'))
		{
			$product->brand_id = $brand_id;
		}
			
		if(!empty($related_products))
		{
			foreach($related_products as &$r_p)
				$r_products[$r_p->related_id] = &$r_p;
			$temp_products = $ProductAdmin->products->get_products(array('id'=>array_keys($r_products)));
			foreach($temp_products as $temp_product)
				$r_products[$temp_product->id] = $temp_product;
		
			$related_products_images = $ProductAdmin->products->get_images(array('product_id'=>array_keys($r_products)));
			foreach($related_products_images as $image)
			{
				$r_products[$image->product_id]->images[] = $image;
			}
		}
			
		if(is_array($options))
		{
			$temp_options = array();
			foreach($options as $option)
				$temp_options[$option->feature_id] = $option;
			$options = $temp_options;
		}
			

		$ProductAdmin->design->assign('product', $product);
		$ProductAdmin->design->assign('properties', $properties);
		$ProductAdmin->design->assign('product_categories', $product_categories);
		$ProductAdmin->design->assign('product_variants', $variants);
		$ProductAdmin->design->assign('product_images', $images);
		$ProductAdmin->design->assign('options', $options);
		$ProductAdmin->design->assign('related_products', $related_products);		
		
		// Все бренды
		$brands = $ProductAdmin->brands->get_brands();
		$ProductAdmin->design->assign('brands', $brands);
		
		// Все категории
		$categories = $ProductAdmin->categories->get_categories_tree();
		$ProductAdmin->design->assign('categories', $categories);
		
		// Все свойства товара
		/*$category = reset($product_categories);
		if(!is_object($category))
			$category = reset($categories);		
		if(is_object($category))
		{
			$features = $ProductAdmin->features->get_features(array('category_id'=>$category->id));
			$ProductAdmin->design->assign('features', $features);
		}*/
		
		// Все свойства
		$features = $ProductAdmin->features->get_features();
		$ProductAdmin->design->assign('features', $features);
		
		// Связка категорий со свойствами
		$categories_features = array();
		$query = $ProductAdmin->db->placehold('SELECT category_id, feature_id FROM __categories_features');
		$ProductAdmin->db->query($query);
		$c_f = $ProductAdmin->db->results();
		foreach($c_f as $i)
		{
			$categories_features[$i->category_id][] = $i->feature_id;
		}
		$ProductAdmin->design->assign('categories_features', $categories_features);		
		

		$regions = array();
		$temps = $ProductAdmin->regions->get_regions();
		if(is_array($temps))foreach ($temps as $temp) {
			$temp->field = 'stock_'.$temp->id;
			$regions[] = $temp;
		}
		$ProductAdmin->design->assign('regions', $regions);		


 	  	return $ProductAdmin->design->fetch('product.tpl');
				

В общем вот так я сделал из файла файл ProductAdmin.php. Код в php файле в корне. Добавлял только то, что лично мне надо, те. в целом только то, что с сайта донора можно было взять. Картинку только пока не добавил. Я посмотрел товар вроде отображается, в категории присутствует. Но на выходе ряд ошибок с предупреждениями Warning. Не знаю, насколько они актуальны, но не хотелось бы загрузив несколько тысяч товаров вдруг обнаружить, что что-то не работает, потому что я что-то да не учел. 

 

Так что если кто-то более хорошо знакомый с каталогом потестит и найдет какие-либо недочеты, то буду крайне признателен. А в ответ выложу полностью рабочее решение и даже адаптирую его под проект благодетеля при необходимости. 

 

В общем ребят рассчитываю на ваши знания и опыт и благодарности моей не будет предела. 

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

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

 

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

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

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

К вопросу ТС рекомендуемые товары также не относятся, прошу флудерасов идти на 3 буквы.

P.S. Для не особо умных людей: парсер всегда идёт индивидуальный, парсер не бывает универсальным.

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

К вопросу ТС рекомендуемые товары также не относятся, прошу флудерасов идти на 3 буквы.

 

Это лишь Ваши пустые фантазии, ТС делает парсер под свои нужды и что точно ему требуется, им в теме не конкретизировано.

 

P.S. Для не особо умных людей: парсер всегда идёт индивидуальный, парсер не бывает универсальным.

 

Для особо умных людей с "большими скилами":

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

http://web-data-extractor.net/universalnyy-parser/

2. Вообще непонятно, каким боком Вы это к теме приплели, нигде ранее в теме 'парсер универсальный' не упоминался. Прежде чем флудить, сначала хорошо бы тему прочесть хоть с минимальным вниманием...

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

Для особо умных людей с "большими скилами":

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

http://web-data-extractor.net/universalnyy-parser/

2. Вообще непонятно, каким боком Вы это к теме приплели, нигде ранее в теме 'парсер универсальный' не упоминался. Прежде чем флудить, сначала хорошо бы тему прочесть хоть с минимальным вниманием...

Ну если ты дурак и веришь всему что пишут на просторах интернета, то флаг тебе в руки, дураком и помрёшь.

Универсального парсера не бывает, не бывает такого парсера чтобы смог спарсить контент любого сайта, при чём спарсить "правильно" без излишеств и мусора...

А по поводу ТС и что ему нужно так это действительно не тебе решать, прилепил свои рекомендуемые товары ни к чему, и просто увиливаешь в сторону, в принципе не удивительно, всё в стиле мудака Корса.

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

Понял Вашу глубокую идею. Не надо верить всему, что пишут на просторах интернета. Надо верить тому, что говорит мастер Noxter.

Например, тут

http://forum.simplacms.ru/topic/6179-%D0%BA%D0%B0%D0%BA-%D0%B2%D1%8B%D0%B2%D0%B5%D1%81%D1%82%D0%B8-%D0%BA%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D1%8E-%D1%82%D0%BE%D0%B2%D0%B0%D1%80%D0%B0-%D0%BF%D1%80%D0%B8-%D0%BF%D1%80%D0%BE%D1%81%D0%BC%D0%BE%D1%82%D1%80%D0%B5-%D0%B1%D1%80/page-2
уважаемый Noxter рекомендует вставлять break.  Я пробовал разными способами вставлять - ну никак правильно не работает. Должно быть, уровень скилов у меня не тот...

 

Или тут

http://forum.simplacms.ru/topic/13786-%D0%B7%D1%83%D0%BC-%D0%B2-%D1%84%D0%BE%D1%82%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%8F%D1%85/

Noxter приляпал два идиотских поста ни о чем. В то время как вопрос был детский и ответ лежал на поверхности...

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

Понял Вашу глубокую идею. Не надо верить всему, что пишут на просторах интернета. Надо верить тому, что говорит мастер Noxter.

Например, тут

http://forum.simplacms.ru/topic/6179-как-вывести-категорию-товара-при-просмотре-бр/page-2

уважаемый Noxter рекомендует вставлять break.  Я пробовал разными способами вставлять - ну никак правильно не работает. Должно быть, уровень скилов у меня не тот...

 

Или тут

http://forum.simplacms.ru/topic/13786-зум-в-фотографиях/

Noxter приляпал два идиотских поста ни о чем. В то время как вопрос был детский и ответ лежал на поверхности...

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

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

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

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

 

Код смотрите в скрипте админки.

А если что-то не работает, то разбирать надо конкретно.

Имейте в виду, Simpla не обновляется уже лет пять, многое устарело.

Например, изначально и не планировалась загрузка по адресам с httрs

 

См

 

http://forum.simplacms.ru/topic/13613-%D0%B7%D0%B0%D0%B3%D1%80%D1%83%D0%B7%D0%BA%D0%B0-%D0%B8%D0%B7%D0%BE%D0%B1%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D0%B9-%D1%81-https-%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80%D0%BE%D0%B2/?p=106629

Изменено пользователем phukortsin
Ссылка на сообщение
Поделиться на другие сайты
require_once('api/Simpla.php');

	
			
	
	
	
			$ProductAdmin = new Simpla;
			$product = new stdClass;
			
			
			
			$options = array();
			$product_categories = array();
			$variants = array();
			$images = array();
			$product_features = array();
			$related_products = array();
			
			
			
			
			
			$product->id = "";
			$product->name = "Название";
			$product->visible = 1;
			$product->featured = '';
			$product->brand_id = 0;

			$product->url = "names";
			$product->meta_title = ('meta_title');
			$product->meta_keywords = ('meta_keywords');
			$product->meta_description = ('meta_description');
			
			$product->annotation =  "Краткое описание";
			$product->body = "Полное описание";

			// Варианты товара
			
			
			$variants["id"][0]= "";
			$variants["id"][1]= "";
			$variants["name"][0]= "вариант";
			$variants["name"][1]= "вариант2";
			$variants["color_code"][0]= "#FFFFFF";
			$variants["color_code"][1]= "#FFFFFF";
			$variants["color"][0]= "Без цвета";
			$variants["color"][1]= "Без цвета";
			$variants["images_ids"][0]= "";
			$variants["images_ids"][1]= "";
			$variants["sku"][0]= "";
			$variants["sku"][1]= "";
			$variants["price"][0]= "333";
			$variants["price"][1]= "333";
			$variants["compare_price"][0]= "";
			$variants["compare_price"][1]= "";
			$variants["stock_1"][0]= "10";
			$variants["stock_1"][1]= "10";
			$_POST["images_urls"][0]=  "http://you.site/files/uploads/1.jpg";
			$_POST["images_urls"][1]=  "http://you.site/files/uploads/2.jpg";
		
		
			if(count($variants) > 0)
			{
				foreach($variants as $n=>$va)
				{
					foreach($va as $i=>$v)
					{
						if(empty($variants[$i]))
							$variants[$i] = new stdClass;
						$variants[$i]->$n = $v;
					}
				}
			}
			// Категории товара
			$product_categories[0] = 129;
			if(is_array($product_categories))
			{
				foreach($product_categories as $c)
				{
					$x = new stdClass;
					$x->id = $c;
					$pc[] = $x;
				}
				$product_categories = $pc;
			}

				
	  				$product->id = $ProductAdmin->products->add_product($product);
	  				$product = $ProductAdmin->products->get_product($product->id);
					$ProductAdmin->design->assign('message_success', 'added');
	  				
   	    		

			if($product->id)
   	    		{
	   	    		// Категории товара
	   	    		$query = $ProductAdmin->db->placehold('DELETE FROM __products_categories WHERE product_id=?', $product->id);
	   	    		$ProductAdmin->db->query($query);
	 	  		    if(is_array($product_categories))
		  		    {
		  		    	foreach($product_categories as $i=>$category)
	   	    				$ProductAdmin->categories->add_product_category($product->id, $category->id, $i);
	  	    		}
	
	   	    		// Варианты
		  		    if(is_array($variants))
		  		    { 
	 					$variants_ids = array();
						foreach($variants as $index=>&$variant)
						{
							if($variant->stock == '∞' || $variant->stock == '')
								$variant->stock = null;
								
							// Удалить файл
							if(!empty($_POST['delete_attachment'][$index]))
							{
								$ProductAdmin->variants->delete_attachment($variant->id);
							}
	
		 					// Загрузить файлы
		 					if(!empty($_FILES['attachment']['tmp_name'][$index]) && !empty($_FILES['attachment']['name'][$index]))
		 					{
			 					$attachment_tmp_name = $_FILES['attachment']['tmp_name'][$index];					
			 					$attachment_name = $_FILES['attachment']['name'][$index];
		 						move_uploaded_file($attachment_tmp_name, $ProductAdmin->config->root_dir.'/'.$ProductAdmin->config->downloads_dir.$attachment_name);
		 						$variant->attachment = $attachment_name;
		 					}
	
							if(!empty($variant->id))
								$ProductAdmin->variants->update_variant($variant->id, $variant);
							else
							{
								$variant->product_id = $product->id;
								$variant->id = $ProductAdmin->variants->add_variant($variant);
							}
							$variant = $ProductAdmin->variants->get_variant($variant->id);
							if(!empty($variant->id))
					 			$variants_ids[] = $variant->id;
						}
						
	
						// Удалить непереданные варианты
						$current_variants = $ProductAdmin->variants->get_variants(array('product_id'=>$product->id));
						foreach($current_variants as $current_variant)
							if(!in_array($current_variant->id, $variants_ids))
	 							$ProductAdmin->variants->delete_variant($current_variant->id);
	 							 					
	 					//if(!empty($))
						
						// Отсортировать  варианты
						asort($variants_ids);
						$i = 0;
						foreach($variants_ids as $variant_id)
						{ 
							$ProductAdmin->variants->update_variant($variants_ids[$i], array('position'=>$variant_id));
							$i++;
						}
					}
	
					// Удаление изображений
					$images = (array)$ProductAdmin->request->post('images');
					$current_images = $ProductAdmin->products->get_images(array('product_id'=>$product->id));
					foreach($current_images as $image)
					{
						if(!in_array($image->id, $images))
	 						$ProductAdmin->products->delete_image($image->id);
						}
	
					// Порядок изображений
					if($images = $ProductAdmin->request->post('images'))
					{
	 					$i=0;
						foreach($images as $id)
						{
							$ProductAdmin->products->update_image($id, array('position'=>$i));
							$i++;
						}
					}
	   	    		// Загрузка изображений
		  		    if($images = $ProductAdmin->request->files('images'))
		  		    {
						for($i=0; $i<count($images['name']); $i++)
						{
				 			if ($image_name = $ProductAdmin->image->upload_image($images['tmp_name'][$i], $images['name'][$i]))
				 			{
			  	   				$ProductAdmin->products->add_image($product->id, $image_name);
			  	   			}
							else
							{
								$ProductAdmin->design->assign('error', 'error uploading image');
							}
						}
					}
	   	    		// Загрузка изображений из интернета и drag-n-drop файлов
						
					 if($images = $ProductAdmin->request->post('images_urls'))
		  		    {	
						foreach($images as $url)
						{
							// Если не пустой адрес и файл не локальный
							if(!empty($url) && $url != 'http://' && strstr($url,'/')!==false)
					 			$ProductAdmin->products->add_image($product->id, $url);
					 		elseif($dropped_images = $ProductAdmin->request->files('dropped_images'))
					  		{
					 			$key = array_search($url, $dropped_images['name']);
							 	if ($key!==false && $image_name = $ProductAdmin->image->upload_image($dropped_images['tmp_name'][$key], $dropped_images['name'][$key]))
						  	   				$ProductAdmin->products->add_image($product->id, $image_name);
							}
						}
					}
					$images = $ProductAdmin->products->get_images(array('product_id'=>$product->id));
	
	   	    		// Характеристики товара
	   	    		
	   	    		// Удалим все из товара
					foreach($ProductAdmin->features->get_product_options($product->id) as $po)
						$ProductAdmin->features->delete_option($product->id, $po->feature_id);
						
					// Свойства текущей категории
					$category_features = array();
					foreach($ProductAdmin->features->get_features(array('category_id'=>$product_categories[0])) as $f)
						$category_features[] = $f->id;
	
	  	    		if(is_array($options))
					foreach($options as $option)
					{
						if(in_array($option->feature_id, $category_features))
							$ProductAdmin->features->update_option($product->id, $option->feature_id, $option->value);
					}
					
					// Новые характеристики
					$new_features_names = $ProductAdmin->request->post('new_features_names');
					$new_features_values = $ProductAdmin->request->post('new_features_values');
					if(is_array($new_features_names) && is_array($new_features_values))
					{
						foreach($new_features_names as $i=>$name)
						{
							$value = trim($new_features_values[$i]);
							if(!empty($name) && !empty($value))
							{
								$query = $ProductAdmin->db->placehold("SELECT * FROM __features WHERE name=? LIMIT 1", trim($name));
								$ProductAdmin->db->query($query);
								$feature_id = $ProductAdmin->db->result('id');
								if(empty($feature_id))
								{
									$feature_id = $ProductAdmin->features->add_feature(array('name'=>trim($name)));
								}
								$ProductAdmin->features->add_feature_category($feature_id, reset($product_categories)->id);
								$ProductAdmin->features->update_option($product->id, $feature_id, $value);
							}
						}
						// Свойства товара
						$options = $ProductAdmin->features->get_product_options($product->id);
					}

					// Связанные товары
	   	    		$query = $ProductAdmin->db->placehold('DELETE FROM __related_products WHERE product_id=?', $product->id);
	   	    		$ProductAdmin->db->query($query);
	 	  		    if(is_array($related_products))
		  		    {
		  		    	$pos = 0;
		  		    	foreach($related_products  as $i=>$related_product)
	   	    				$ProductAdmin->products->add_related_product($product->id, $related_product->related_id, $pos++);
	  	    		}
  	    		}
				
				
				
				
				
				
				
		if(empty($variants))
			$variants = array(1);
			
		if(empty($product_categories))
		{
			if($category_id = $ProductAdmin->request->get('category_id'))
				$product_categories[0]->id = $category_id;		
			else
				$product_categories = array(1);
		}
		if(empty($product->brand_id) && $brand_id=$ProductAdmin->request->get('brand_id'))
		{
			$product->brand_id = $brand_id;
		}
			
		if(!empty($related_products))
		{
			foreach($related_products as &$r_p)
				$r_products[$r_p->related_id] = &$r_p;
			$temp_products = $ProductAdmin->products->get_products(array('id'=>array_keys($r_products)));
			foreach($temp_products as $temp_product)
				$r_products[$temp_product->id] = $temp_product;
		
			$related_products_images = $ProductAdmin->products->get_images(array('product_id'=>array_keys($r_products)));
			foreach($related_products_images as $image)
			{
				$r_products[$image->product_id]->images[] = $image;
			}
		}
			
		if(is_array($options))
		{
			$temp_options = array();
			foreach($options as $option)
				$temp_options[$option->feature_id] = $option;
			$options = $temp_options;
		}
			

		$ProductAdmin->design->assign('product', $product);
		$ProductAdmin->design->assign('properties', $properties);
		$ProductAdmin->design->assign('product_categories', $product_categories);
		$ProductAdmin->design->assign('product_variants', $variants);
		$ProductAdmin->design->assign('product_images', $images);
		$ProductAdmin->design->assign('options', $options);
		$ProductAdmin->design->assign('related_products', $related_products);		
		
		// Все бренды
		$brands = $ProductAdmin->brands->get_brands();
		$ProductAdmin->design->assign('brands', $brands);
		
		// Все категории
		$categories = $ProductAdmin->categories->get_categories_tree();
		$ProductAdmin->design->assign('categories', $categories);
		
		// Все свойства товара
		/*$category = reset($product_categories);
		if(!is_object($category))
			$category = reset($categories);		
		if(is_object($category))
		{
			$features = $ProductAdmin->features->get_features(array('category_id'=>$category->id));
			$ProductAdmin->design->assign('features', $features);
		}*/
		
		// Все свойства
		$features = $ProductAdmin->features->get_features();
		$ProductAdmin->design->assign('features', $features);
		
		// Связка категорий со свойствами
		$categories_features = array();
		$query = $ProductAdmin->db->placehold('SELECT category_id, feature_id FROM __categories_features');
		$ProductAdmin->db->query($query);
		$c_f = $ProductAdmin->db->results();
		foreach($c_f as $i)
		{
			$categories_features[$i->category_id][] = $i->feature_id;
		}
		$ProductAdmin->design->assign('categories_features', $categories_features);		
		

		$regions = array();
		$temps = $ProductAdmin->regions->get_regions();
		if(is_array($temps))foreach ($temps as $temp) {
			$temp->field = 'stock_'.$temp->id;
			$regions[] = $temp;
		}
		$ProductAdmin->design->assign('regions', $regions);		


 	  	return $ProductAdmin->design->fetch('product.tpl');
				
				
				
				
	

В общем таким способом добился я загрузки по углу. Не знаю, может дело в том, что запросы на https сайты идут. Но если предварительно загрузить их к себе и указать полный адрес сайта, то загружаются вроде корректно. 

 

Но в целом осталась просьба проверить скрипт на адекватность, чтобы все работало как задумано. 

 

5 лет довольно не хило. Жаль, что проект заброшен. 

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

Но в целом осталась просьба проверить скрипт на адекватность, чтобы все работало как задумано.

 

Проверять, если как следует, а не поверхностно, - большая серьезная работа.

Если захотите это оплачивать - пишите в личку...

 

А просто созерцать код - не лучшее времяпрепровождение...

Кроме того - Ваш код - какие-то отрывки и заготовки. Как сейчас написано - он всем товарам вставляет одно и  то же название - вряд ли реально он должен так работать...

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

Ну так надо подставить данные туда, это уже дело парсера. Вам то оно зачем, главное чтобы хоть один товар заносило правильно. А данные уже каждый может подставить и свои. 

 

Просто тут вроде форум по данной CMS. Те CMS которые я хорошо знаю я могу объяснить что к чему, это много времени не требует. По крайней мере логику. Тем более тут код не большой. Для тех, кто хорошо знает как устроен данный скрипт могут и на форуме объяснить хотя бы что не учтено. А проделать большую серьезную работу изучив детально что к чему я и сам могу.

 

Вот пример на битриксе,

https://iplogic.ru/baza-znaniy/sozdanie-i-izmenenie-tovara-cherez-bitriks-api/

о чем я спрашиваю только на данной системе. Для тех кто знает, помочь не сложно, ну а для тех кто не знает, у меня и у самого руки на месте. Но в любом случае за любую подсказку буду рад. А платно пишите, я и сам сделаю  ;)

Изменено пользователем superpupervest
Ссылка на сообщение
Поделиться на другие сайты

главное чтобы хоть один товар заносило правильно.

 

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

 

Вот пример на битриксе,

https://iplogic.ru/baza-znaniy/sozdanie-i-izmenenie-tovara-cherez-bitriks-api/

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

 

А объяснения из Вашего примера мало отличаются от того, что Вы можете видеть в Simpla, например, в файле simplа/ProductAdmin.php или simplа/ajax/import.php

 

Помочь не сложно, когда задан точный вопрос, на который можно ответить кратно в 1-2 строки.  А когда вопрос в виде "вот я что-то натворил, проанализируйте и сообщите о результатах", тут можно целую статью писать про типовые ошибки...

 

 

Например, в Вашем коде сколько вариантов надо добавить к товару? Видимо, два.

А сколько попыток делается в цикле

foreach($variants as $index=>&$variant){

.......

},

знаете?  Оказывается, 11 (одиннадцать) !!!

Что делают остальные? порождают кучу ошибок...

 

 

А проделать большую серьезную работу изучив детально что к чему я и сам могу.

 

Вот и проделайте эту работу хотя бы по своему коду. А то сейчас он выглядит как результат копирования без особого понимания...  Посмотрите на статью, которую Вы привели для образца, и напишите хотя бы краткие комментарии к своему коду, как в той статье - скорее поймете...

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

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

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

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

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

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

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

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

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

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