Перейти к содержимому


Фото
- - - - -

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


  • Чтобы отвечать, сперва войдите на форум
22 ответов в теме

#1 superpupervest

superpupervest
  • Пользователь
  • 15 сообщений
  • Программирование, Пользователь
  • Версия CMS:2.x
  • Откуда:Молдова

Опубликовано 13.12.2018 - 16:36

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

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



#2 Noxter

Noxter

    Simpla Developer

  • Фрилансер
  • 7 079 сообщений
  • Дизайн, Программирование, Верстка
  • Версия CMS:2.x
  • Откуда:Киев

Опубликовано 13.12.2018 - 16:42

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

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

#3 phukortsin

phukortsin
  • Фрилансер
  • 793 сообщений
  • Программирование, Пользователь
  • Версия CMS:2.x
  • Откуда:Львов

Опубликовано 13.12.2018 - 16:59

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

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

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

 

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



#4 superpupervest

superpupervest
  • Пользователь
  • 15 сообщений
  • Программирование, Пользователь
  • Версия CMS:2.x
  • Откуда:Молдова

Опубликовано 13.12.2018 - 17:30

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

Проблема еще в том, что у меня стоит модуль https://www.simpla-t...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 примерами как на том же Битриксе


#5 mishanya

mishanya
  • Фрилансер
  • 2 557 сообщений
  • Программирование, Верстка
  • Версия CMS:2.x
  • Откуда:Ukraine

Опубликовано 13.12.2018 - 17:35

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



#6 phukortsin

phukortsin
  • Фрилансер
  • 793 сообщений
  • Программирование, Пользователь
  • Версия CMS:2.x
  • Откуда:Львов

Опубликовано 13.12.2018 - 18:11


Проблема еще в том, что у меня стоит модуль https://www.simpla-t...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...



#7 Noxter

Noxter

    Simpla Developer

  • Фрилансер
  • 7 079 сообщений
  • Дизайн, Программирование, Верстка
  • Версия CMS:2.x
  • Откуда:Киев

Опубликовано 13.12.2018 - 21:34


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


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

#8 superpupervest

superpupervest
  • Пользователь
  • 15 сообщений
  • Программирование, Пользователь
  • Версия CMS:2.x
  • Откуда:Молдова

Опубликовано 13.12.2018 - 23:35

	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. Не знаю, насколько они актуальны, но не хотелось бы загрузив несколько тысяч товаров вдруг обнаружить, что что-то не работает, потому что я что-то да не учел. 

 

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

 

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



#9 Noxter

Noxter

    Simpla Developer

  • Фрилансер
  • 7 079 сообщений
  • Дизайн, Программирование, Верстка
  • Версия CMS:2.x
  • Откуда:Киев

Опубликовано 14.12.2018 - 01:22

Для особо одарённых советую https://pastebin.com/ дабы не засорять форум не нужной инфой.

#10 phukortsin

phukortsin
  • Фрилансер
  • 793 сообщений
  • Программирование, Пользователь
  • Версия CMS:2.x
  • Откуда:Львов

Опубликовано 14.12.2018 - 10:29

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

 

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



#11 Noxter

Noxter

    Simpla Developer

  • Фрилансер
  • 7 079 сообщений
  • Дизайн, Программирование, Верстка
  • Версия CMS:2.x
  • Откуда:Киев

Опубликовано 14.12.2018 - 12:03

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

К вопросу ТС рекомендуемые товары также не относятся, прошу флудерасов идти на 3 буквы.
P.S. Для не особо умных людей: парсер всегда идёт индивидуальный, парсер не бывает универсальным.

#12 phukortsin

phukortsin
  • Фрилансер
  • 793 сообщений
  • Программирование, Пользователь
  • Версия CMS:2.x
  • Откуда:Львов

Опубликовано 14.12.2018 - 13:04

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

 

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

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

 

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

1. поисковик на фразу 'парсер универсальный' выдает массу результатов, например
http://web-data-extr...rsalnyy-parser/

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



#13 Noxter

Noxter

    Simpla Developer

  • Фрилансер
  • 7 079 сообщений
  • Дизайн, Программирование, Верстка
  • Версия CMS:2.x
  • Откуда:Киев

Опубликовано 14.12.2018 - 13:15

Для особо умных людей с "большими скилами":
1. поисковик на фразу 'парсер универсальный' выдает массу результатов, например
http://web-data-extr...rsalnyy-parser/
2. Вообще непонятно, каким боком Вы это к теме приплели, нигде ранее в теме 'парсер универсальный' не упоминался. Прежде чем флудить, сначала хорошо бы тему прочесть хоть с минимальным вниманием...

Ну если ты дурак и веришь всему что пишут на просторах интернета, то флаг тебе в руки, дураком и помрёшь.
Универсального парсера не бывает, не бывает такого парсера чтобы смог спарсить контент любого сайта, при чём спарсить "правильно" без излишеств и мусора...
А по поводу ТС и что ему нужно так это действительно не тебе решать, прилепил свои рекомендуемые товары ни к чему, и просто увиливаешь в сторону, в принципе не удивительно, всё в стиле мудака Корса.

#14 phukortsin

phukortsin
  • Фрилансер
  • 793 сообщений
  • Программирование, Пользователь
  • Версия CMS:2.x
  • Откуда:Львов

Опубликовано 14.12.2018 - 14:22

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

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

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

 

Или тут

http://forum.simplac...-в-фотографиях/

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



#15 Noxter

Noxter

    Simpla Developer

  • Фрилансер
  • 7 079 сообщений
  • Дизайн, Программирование, Верстка
  • Версия CMS:2.x
  • Откуда:Киев

Опубликовано 14.12.2018 - 14:27

Понял Вашу глубокую идею. Не надо верить всему, что пишут на просторах интернета. Надо верить тому, что говорит мастер Noxter.
Например, тут
http://forum.simplac...мотре-бр/page-2
уважаемый Noxter рекомендует вставлять break.  Я пробовал разными способами вставлять - ну никак правильно не работает. Должно быть, уровень скилов у меня не тот...
 
Или тут
http://forum.simplac...-в-фотографиях/
Noxter приляпал два идиотских поста ни о чем. В то время как вопрос был детский и ответ лежал на поверхности...

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

#16 superpupervest

superpupervest
  • Пользователь
  • 15 сообщений
  • Программирование, Пользователь
  • Версия CMS:2.x
  • Откуда:Молдова

Опубликовано 14.12.2018 - 17:41

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



#17 phukortsin

phukortsin
  • Фрилансер
  • 793 сообщений
  • Программирование, Пользователь
  • Версия CMS:2.x
  • Откуда:Львов

Опубликовано 14.12.2018 - 17:50

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

 

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

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

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

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

 

См

 

http://forum.simplac...веров/?p=106629


Изменено: phukortsin, 14.12.2018 - 17:53


#18 superpupervest

superpupervest
  • Пользователь
  • 15 сообщений
  • Программирование, Пользователь
  • Версия CMS:2.x
  • Откуда:Молдова

Опубликовано 14.12.2018 - 18:27

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 лет довольно не хило. Жаль, что проект заброшен. 



#19 superpupervest

superpupervest
  • Пользователь
  • 15 сообщений
  • Программирование, Пользователь
  • Версия CMS:2.x
  • Откуда:Молдова

Опубликовано 14.12.2018 - 18:29

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



#20 phukortsin

phukortsin
  • Фрилансер
  • 793 сообщений
  • Программирование, Пользователь
  • Версия CMS:2.x
  • Откуда:Львов

Опубликовано 14.12.2018 - 19:55

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

 

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

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

 

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

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






0 пользователей читают эту тему

0 пользователей, 0 гостей, 0 скрытых