Jump to content

Recommended Posts

Интеграция с МойСклад


Интеграция с МойСклад


Модуль синхронизации товаров из сервиса МойСклад в OpenCart 2.3

 

Доступный функционал:

- Синхронизация категорий

- Синхронизация остатков

- Синхронизация заказов

- Синхронизация модификаций

- Синхронизации статусов заказа из OpenCart в МойСклад (при условии создании в МойСклад таких же статусов как и в OpenCart)

- Приветственное СМС при регистрации в магазине (SMSInt)

- Отправка СМС сообщения пользователям, у которых не было покупок в течении 30 дней

 

Чтобы СМС сообщения работали надо аккаунт на сервисе SMSInt

 

 

Пожелания по улучшению пишите в теме поддержке.


  • Добавил
  • Добавлено
    25.05.2018
  • Категория
  • Системные требования
  • Сайт разработчика
  • Старая цена
  • Метод активации
    Без активации
  • Ioncube Loader
    Нет
  • OpenCart
    2.3
  • ocStore
    2.3
  • OpenCart.Pro, ocShop

 

Share this post


Link to post
Share on other sites

с локальным сервером не работает. openserver php 5.6 

Share this post


Link to post
Share on other sites

Можете посодействовать в установке - версия opencart 2.03. Нужно чтобы был обмен остатками 9253028609

Share this post


Link to post
Share on other sites

работает по api?

Share this post


Link to post
Share on other sites

Мне кажется или в модуле не хватает файлов?

Share this post


Link to post
Share on other sites

Добрый день, подскажите,

1) авто обновление товаров не работает прописали, как сказано в документации.. и крон ежедневно, выполняет операции

2) После обновления в ручную у товаров не происходит замена наименование старые товары остались с тем же наименованием что и было загружено ранее а новые позиции наименованы правильно 

 

image.png

Share this post


Link to post
Share on other sites

Для работы модуля сначала нужно удалить лицензию admin\controller\extension\module\ms.php

 

<?php  
class ControllerExtensionModuleMS extends Controller {
	private $error = array();

	public function index() {
		$this->load->language('extension/module/ms'); //подключаем любой языковой файл

		 $request_data = [
		 	'host' => $_SERVER['HTTP_HOST'],
		 	'secret' => 'zerrnoco'
		 ];

		 if (true) {

			$this->document->addScript('view/javascript/ms/ms.js');
			$this->document->addStyle('view/stylesheet/ms/ms.css');

			$this->document->setTitle($this->language->get('heading_title'));

			// регистрируем модуль
			$this->load->model('setting/setting');

			if (($this->request->server['REQUEST_METHOD'] == 'POST') && $this->validate()) {
			    $this->model_setting_setting->editSetting('ms', $this->request->post);
			    $this->session->data['success'] = $this->language->get('text_success');
			    $data['success'] = $this->session->data['success'] ;

			    //создаем таблицы в БД
				$this->load->model('extension/module/ms');    		
	    		$this->model_extension_module_ms->createTable();

			    $this->response->redirect($this->url->link('extension/module/ms', 'token=' . $this->session->data['token'] . '&type=module', true));
			}

			if (!empty($this->config->get('ms_name')) && !empty($this->config->get('ms_password'))) {

				$sklad = new Sklad ($this->config->get('ms_name'), $this->config->get('ms_password'));

				$ms_organizations = $sklad->getOrganizations();


				if (isset($ms_organizations['errors'])) {
					foreach ($ms_organizations['errors'] as $error) {
						$data['errors'][] = $error['error'];
					}
				} else {
					foreach ($ms_organizations['rows'] as $row) {
						$data['organizations'][] = [
							'id' => $row['id'],
							'name' => $row['name'],
						];
					}
				}
			}

			$data['ms_name'] = $this->config->get('ms_name');
			$data['ms_pasword'] = $this->config->get('ms_password');

			$data['heading_title'] = $this->language->get('heading_title'); //объявляем переменную heading_title с данными из языкового файла

			$data['entry_status'] = $this->language->get('entry_status'); 
			$data['entry_name'] = $this->language->get('entry_name'); 
			$data['entry_password'] = $this->language->get('entry_password'); 
			$data['entry_organization'] = $this->language->get('entry_organization'); 
			$data['entry_category'] = $this->language->get('entry_category'); 
			$data['entry_stock'] = $this->language->get('entry_stock'); 
			$data['entry_sms'] = $this->language->get('entry_sms'); 
			$data['entry_order'] = $this->language->get('entry_order'); 
			$data['entry_opt'] = $this->language->get('entry_opt'); 
			$data['entry_sms_template'] = $this->language->get('entry_sms_template'); 
			$data['entry_name_sms'] = $this->language->get('entry_name_sms'); 
			$data['entry_password_sms'] = $this->language->get('entry_password_sms'); 
			$data['entry_values'] = $this->language->get('entry_values'); 
			$data['help_ms_sms'] = $this->language->get('help_ms_sms'); 
			$data['help_sms_tpl'] = $this->language->get('help_sms_tpl'); 
			$data['help_sms_tpl_30'] = $this->language->get('help_sms_tpl_30'); 

			$data['button_save'] = $this->language->get('button_save');
			$data['button_cancel'] = $this->language->get('button_cancel');
			$data['text_enabled'] = $this->language->get('text_enabled'); 
			$data['text_disabled'] = $this->language->get('text_disabled'); 
			$data['text_edit'] = $this->language->get('text_edit'); 
			$data['text_sync'] = $this->language->get('text_sync'); 
			$data['text_yes'] = $this->language->get('text_yes'); 
			$data['text_no'] = $this->language->get('text_no');  

			$data['token'] = $this->session->data['token'];
			$data['loader'] = HTTPS_SERVER . 'view/image/ms/loader.gif';

			if (isset($this->error['warning'])) {
			 $data['error_warning'] = $this->error['warning'];
			} else {
			 $data['error_warning'] = '';
			}

			$data['breadcrumbs'] = array();
			 // Добавляем по одной крошке, сначала ссылка на главную страницу
			 $data['breadcrumbs'][] = array(
			  'text' => $this->language->get('text_home'), // text_home по всей видимости доступен отовсюду
			  'href' => $this->url->link('common/dashboard', 'token=' . $this->session->data['token'], 'SSL')
			  );
			// добавляем ссылку на список с модулями, прописано в своем языковом файле
			 $data['breadcrumbs'][] = array(
			  'text' => $this->language->get('text_module'),
			  'href' => $this->url->link('extension/module', 'token=' . $this->session->data['token'], 'SSL')
			);

			// кнопки		
			$data['action'] = $this->url->link('extension/module/ms', 'token=' . $this->session->data['token'], 'SSL');
			$data['cancel'] = $this->url->link('extension/extension', 'token=' . $this->session->data['token'], 'SSL');
			
			if (!empty($this->config->get('ms_name')) && !empty($this->config->get('ms_password'))) {
				$data['sync'] = $this->url->link('extension/module/ms/sync', 'token=' . $this->session->data['token'], 'SSL');
			} else {
				$data['sync'] ='';
			}

			if (isset($this->request->post['ms_status'])) {//статус модуля
			 $data['ms_status'] = $this->request->post['ms_status'];
			} else {
			 $data['ms_status'] = $this->config->get('ms_status');
			}

			if ($data['ms_status'] != 1) {//если модуль отключен удалить все данные из него
				$this->model_setting_setting->deleteSetting('ms');
			}

			if (isset($this->request->post['ms_name'])) {
			 $data['ms_name'] = $this->request->post['ms_name'];
			} else {
			 $data['ms_name'] = $this->config->get('ms_name');
			}

			if (isset($this->request->post['ms_password'])) {
			 $data['ms_password'] = $this->request->post['ms_password'];
			} else {
			 $data['ms_password'] = $this->config->get('ms_password');
			}

			if (isset($this->request->post['ms_category'])) {
			 $data['ms_category'] = $this->request->post['ms_category'];
			} else {
			 $data['ms_category'] = $this->config->get('ms_category');
			}

			if (isset($this->request->post['ms_stock'])) {
			 $data['ms_stock'] = $this->request->post['ms_stock'];
			} else {
			 $data['ms_stock'] = $this->config->get('ms_stock');
			}

			if (isset($this->request->post['ms_org'])) {
			 $data['ms_org'] = $this->request->post['ms_org'];
			} else {
			 $data['ms_org'] = $this->config->get('ms_org');
			}

			if (isset($this->request->post['ms_sms'])) {
			 $data['ms_sms'] = $this->request->post['ms_sms'];
			} else {
			 $data['ms_sms'] = $this->config->get('ms_sms');
			}

			if (isset($this->request->post['ms_order'])) {
			 $data['ms_order'] = $this->request->post['ms_order'];
			} else {
			 $data['ms_order'] = $this->config->get('ms_order');
			}

			if (isset($this->request->post['ms_opt'])) {
			 $data['ms_opt'] = $this->request->post['ms_opt'];
			} else {
			 $data['ms_opt'] = $this->config->get('ms_opt');
			}

			if (isset($this->request->post['ms_sms_tpl'])) {
			 $data['ms_sms_tpl'] = $this->request->post['ms_sms_tpl'];
			} else {
			 $data['ms_sms_tpl'] = $this->config->get('ms_sms_tpl');
			}

			if (isset($this->request->post['ms_sms_login'])) {
			 $data['ms_sms_login'] = $this->request->post['ms_sms_login'];
			} else {
			 $data['ms_sms_login'] = $this->config->get('ms_sms_login');
			}

			if (isset($this->request->post['ms_sms_password'])) {
			 $data['ms_sms_password'] = $this->request->post['ms_sms_password'];
			} else {
			 $data['ms_sms_password'] = $this->config->get('ms_sms_password');
			}

			if (isset($this->request->post['ms_sms_tpl_30'])) {
			 $data['ms_sms_tpl_30'] = $this->request->post['ms_sms_tpl_30'];
			} else {
			 $data['ms_sms_tpl_30'] = $this->config->get('ms_sms_tpl_30');
			}


			$data['header'] = $this->load->controller('common/header');
			$data['column_left'] = $this->load->controller('common/column_left');
			$data['footer'] = $this->load->controller('common/footer');

			// передаем данные на отрисовку
			$this->response->setOutput($this->load->view('extension/module/ms.tpl', $data));
		 } else {
		 	// $this->response->setOutput($this->load->view('extension/extension', $data));
//		 	$this->session->data['license_error'] = $this->language->get('license_error');
//		     $data['license_error'] = $this->session->data['license_error'];
		    
		 	$this->response->redirect($this->url->link('extension/extension', '&token=' . $this->session->data['token'], 'SSL'));
		 }
	}

	protected function validate() {
		if (!$this->user->hasPermission('modify', 'extension/module/ms')) {
			$this->error['warning'] = $this->language->get('error_permission');
		}

		return !$this->error;
	}

//	protected function license($request_data) {
//		$url = 'http://www.api.zerrno.com/?apiLicense.validateLicense={"host":"'.$request_data['host'].'","secret":"'.$request_data['secret'].'"}';
//		$process = curl_init($url);
//		curl_setopt($process, CURLOPT_HEADER, false);
//		curl_setopt($process, CURLOPT_TIMEOUT, 30);
//		curl_setopt($process, CURLOPT_RETURNTRANSFER, true);
//		$return = curl_exec($process) or die(curl_error($process));
//		$return = (array)(json_decode($return));
//
//		curl_close($process);
//
//		return $return['response']->license;
//	}


	public function sync() {
		$this->load->language('extension/module/ms');
		set_time_limit(900);

		$request_data = [
			'host' => $_SERVER['HTTP_HOST']
		];

		if (true) {
			$this->load->model('extension/module/ms');
			$this->load->model('catalog/category');
			$this->load->model('catalog/product');
			$this->load->model('catalog/option');

			$json = [];

			if (!empty($this->config->get('ms_name')) && !empty($this->config->get('ms_password'))) {
				$login = $this->config->get('ms_name');
				$password = $this->config->get('ms_password');
			} else {
				return false;
			}

			$sklad = new Sklad($login, $password);
			
			$products = $sklad->getAllProducts();
			$sklad->response = [];

			$stocks = $sklad->getAllStocks();//остаток
			$sklad->response = [];

			$ms_product_ids = $this->model_extension_module_ms->getMSProductIds();
			$ms_category_ids = $this->model_extension_module_ms->getMSCategoryIds();
			
			foreach ($products as $product) {
				if (isset($ms_product_ids) && !empty($ms_product_ids)) {
					for ($i = 0; $i < count((array)$ms_product_ids); $i++) {//находим id товаров которые нужно удалить из опенкарт
						if ($ms_product_ids[$i]['ms_product_id'] == $product['id']) {
							unset($ms_product_ids[$i]);
							sort($ms_product_ids);
						}
					}
				}

				$product_oc = $this->model_catalog_product->getProduct($this->model_extension_module_ms->getProductIdByMSId($product['id']));

				if (!empty($product_oc)) {// если продукт уже существует в опенкарт, нужно обновить его

					if (isset($product['name'])) {
						$name = $product['name'];
					} else {
						$name = '';
					}

					// $name = $product['name'] ?? '';

					if (isset($product['code'])) {
						$model = $product['code'];
					} else {
						$model = '';	
					}

					// $model = $product['code'] ?? '';

					if (isset($product['description'])) {
						$description = $product['description'];
					} else {
						$description = '';	
					}

					// $description = $product['description'] ?? '';

					if (isset($product['article'])) {
						$sku = $product['article'];
					} else {
						$sku = '';
					}

					// $sku = $product['article'] ?? '';

					if (isset($product['image'])) { 
						$image = $sklad->getProductImage($product['image']['meta']['href']);
					} else {
						$image = '';
					}

					// $image = isset($product['image']) ? $sklad->getProductImage($product['image']['meta']['href']) : ''; 

					// if (isset($product['attributes'])) {
					// 	foreach ($product['attributes'] as $field) {
					// 		switch ($field['name']) {
					// 			case 'SEO URL':
					// 				$keyword = $field['value'];
					// 				break;

					// 			case 'Мета-тег Description':
					// 				$meta_desc = $field['value'];
					// 				break;
								
					// 			default:
					// 				$value = '';
					// 				break;
					// 		}
					// 	}
					// }

					if (isset($product['salePrices'])) {
						foreach ($product['salePrices'] as $prices) {
							if ($prices['priceType'] == 'Цена продажи') {
								$price = $prices['value']/100;
							}
						}
					}

					if ($this->config->get('ms_category')) {
						if (isset($product['productFolder']) && $product['pathName'] != '') {//добавляем категорию в опенкарт
							$categories = [];
							$path = explode('/', $product['pathName']);

							$i = 0;
							for ($i = 0; $i < count($path); $i++) {
								$category_info = $this->model_extension_module_ms->getSyncCategory($path[$i]);
								
								$j = 0;
								if (isset($ms_category_ids)) {
									for ($j = 0; $j < count((array)$ms_category_ids); $j++) {
										$ms_category_name = $this->model_extension_module_ms->getSyncCategoryById($ms_category_ids[$j]['category_id']);

										if ($ms_category_name[0]['category_name'] == $path[$i]) {
											unset($ms_category_ids[$j]);
											sort($ms_category_ids);
										}
									}
								}

								if (empty($category_info)) {
									$data_category = [
										'category_description' => [
											'1' => [
												'name' => $path[$i],
												'description' => $path[$i],
												'meta_title' => $path[$i],
												'meta_h1' => $path[$i],
												'meta_description' => $path[$i],
												'meta_keyword' => $path[$i],
											]
										],
										'category_store' => [
											'0' => 0
										],
										'status' => 1,
										'image' => '',
										'top' => 1,
										'column' => 1,
		    							'sort_order' => 0,
		    							'keyword' => '',
		    							'parent_id' => '',
									];

								if (isset($path[$i - 1])) {
									$parent_category_id = $this->model_extension_module_ms->getSyncCategory($path[$i - 1]);
									$data_category['parent_id'] = $parent_category_id[0]['category_id'];
								}
								
									$category_id = $this->model_catalog_category->addCategory($data_category);
									$this->model_extension_module_ms->setSyncCategory($category_id, $path[$i]);
									$categories[] = $category_id;
								} else {
									if (isset($path[$i - 1])) {
										$parent_category_id = $this->model_extension_module_ms->getSyncCategory($path[$i - 1]);
										$edit_category_data = [
											'category_description' => [
												'1' => [
													'name' => $path[$i],
													'description' => $path[$i],
													'meta_title' => $path[$i],
													'meta_h1' => $path[$i],
													'meta_description' => $path[$i],
													'meta_keyword' => $path[$i],
												]
											],
											'category_store' => [
												'0' => 0
											],
											'status' => 1,
											'image' => '',
											'top' => 1,
											'column' => 1,
			    							'sort_order' => 0,
			    							'keyword' => '',
											'parent_id' => $parent_category_id[0]['category_id'],
										];
										$this->model_catalog_category->editCategory($category_info[0]['category_id'], $edit_category_data);	
									}
									$categories[] = $category_info[0]['category_id'];
								}
							}

							// echo '<pre>';
							// print_r($data_category);
							// echo '</pre>';

							$main_category_id = $this->model_extension_module_ms->getSyncCategory(array_pop($path));
						}
					}

					$quantity = 0;
					if ($this->config->get('ms_stock')) {
						if (!empty($stocks) && isset($product['code'])) {//синхронизация остатков
							foreach ($stocks as $stock) {
								if (isset($product['code'])) {
									if ($stock['code'] == $product['code']) {
										$quantity += $stock['quantity'];
									}
								}
							}
						}
					}

					if ($this->config->get('ms_opt')) {
						if ($product['modificationsCount'] > 0) {//добавить модификации в опенкарт
							$variants = $sklad->getVariantsById($product['id']);
							$product_options = [];
							$product_option_values = [];

							if (isset($variants['errors'])) {
								$this->error += $variants['errors'];
							} else {
								foreach ($variants as $variant) {
									foreach ($variant['characteristics'] as $options => $option) {
										$option_oc = $this->model_extension_module_ms->getOptionByName($option['name']);

										$product_options[] = $option['name'];//////////////////////////////////array_unique()собираем в массив опции данного товара
										$product_option_values[] = $option['value'];//////////////////////////////////array_unique() -=- значения опций

										if (empty($option_oc)) {

											$data_option = [
												'option_description' => [
													'1' => [
														'name' => $option['name'],
													],
												],
												'type' => 'select',
											    'sort_order' => '',
											    'option_value' => [
											    	'0' => [
											    		'option_value_id' => '',
			                    						'option_value_description' => [
			                    							'1' => [
			                    								'name' => $option['value'],
			                    							],
			                    						],
			                    						'image' => '',
			                    						'sort_order' => '',
											    	],
											    ],
											];
											$option_id_oc = $this->model_catalog_option->addOption($data_option);
											$this->model_extension_module_ms->setSyncOption($option_id_oc, $option['name']);	
										} else {
											$option_values_oc = $this->model_catalog_option->getOptionValues($option_oc[0]['option_id']);

											$option_value = [];

											$find = false;

											foreach ($option_values_oc as $option_values) {

												$option_value[] = [
													'option_value_id' => $option_values['option_value_id'],
			                						'option_value_description' => [
			                							'1' => [
			                								'name' => $option_values['name'],
			                							],
			                						],
			                						'image' => '',
			                						'sort_order' => '',
												];

												if ($option_values['name'] == $option['value']) {
													$find = true;
												}
											}

											if (!$find) {
												$option_value[] = [
													'option_value_id' => '',
			                						'option_value_description' => [
			                							'1' => [
			                								'name' => $option['value'],
			                							],
			                						],
			                						'image' => '',
			                						'sort_order' => '',
												];
											}

											$edit_option_data = [
												'option_description' => [
													'1' => [
														'name' => $option['name']
													] 
												],
												'type' => 'select',
									    		'sort_order' => '',
									    		'option_value' => isset($option_value) ? $option_value : [],
											];

											$this->model_catalog_option->editOption($option_oc[0]['option_id'], $edit_option_data);
										}
									}
								}
								//

								// echo "<pre>";
								// print_r(array_unique($product_option_values));
								// echo "</pre>";
								// die();
								if (!empty($product_options)) {//добавляем опции к товарам 

									$product_options = array_unique($product_options);//удаляем повторяющиеся эллементы массива с опциями 

									foreach ($product_options as $key => $option_name) {
										$oc_option_id = $this->model_extension_module_ms->getOptionByName($option_name);
										if (!empty($oc_option_id)) {
											$oc_option = $this->model_catalog_option->getOption($oc_option_id[0]['option_id']);


											$product_option = [
												'product_option_id' => '',
							                    'name' => $oc_option['name'],
							                    'option_id' => $oc_option['option_id'],
							                    'type' => $oc_option['type'],
							                    'required' => '1',
											];
										}

										//по аналогии с опциями нужно собрать массив значений опций данного товара
										if (!empty($product_option_values)) {
											
											$product_option_values = array_unique($product_option_values);//удаляем повторяющиеся эллементы массива
											
											foreach ($product_option_values as $value) {//перебираем значения модификации данного товара
												$product_option_values_oc = $this->model_catalog_option->getOptionValues($oc_option_id[0]['option_id']);//получаем значения данной опции из опенкарт
												foreach ($product_option_values_oc as $values) {//перебираем значения опций опенкарт 
													if ($values['name'] == $value) {//если значение опции опенкарт == значению модификации мойсклад -> добавляем значение этой опции к товару
														$product_option['product_option_value'][] = [
															'option_value_id' => $values['option_value_id'],
						                                    'product_option_value_id' => '',
						                                    'quantity' => '',
						                                    'subtract' => 0,
						                                    'price_prefix' => '+',
						                                    'price' => '',
						                                    'points_prefix' => '+',
						                                    'points' => '',
						                                    'weight_prefix' => '+',
						                                    'weight' => '',
														];
													}
												}
											}
										}
										$product_option_arr[] = $product_option; 
									}
								}
							}
							// echo "<pre>";
							// print_r($product_option_arr);	
							// echo "</pre>";
							// print_r("END------------------");
						}
					}
					//


					$product_data = [
						'product_description' => [
							'1' => [
								'name' => $name,
			                    'description' => $description,
			                    'meta_title' => $name,
			                    'meta_h1' => $name,
			                    'meta_description' => $name,
			                    'meta_keyword' => $name,
			                    'tag' => $name
							]
						],
						'model' => $model,
						'sku' => $sku,
					    'upc' => '',
					    'ean' => '',
					    'jan' => '',
					    'isbn' => '',
					    'mpn' => '',
					    'location' => '',
						'image' => $image,
						'keyword' => '',
						'length' => '',
		    			'width'=> '',
		    			'height' => '',
					    'status' => 1,
					    'price' => isset($price) ? $price : 1,
					    'tax_class_id' => 0,
					    'minimum' => 1,
					    'shipping' => 1,
					    'product_store' => [
					    	'0' => 0
					    ],
					    'quantity' => $quantity,
					    'subtract' => 1,
					    'manufacturer_id' => 0,
					    'sort_order' => 1,
					    'weight_class_id' => 1,
					    'weight' => '',
					    'length_class_id' => 1,
					    'location' => '', 
			   		    'product_category' => isset($categories) ? $categories : [],
					    'stock_status_id' => ($quantity == 0) ? 5 : 7,
					    'date_available' => date('Y-m-d', time()),
					    'points' => '',
					    'main_category_id' => isset($main_category_id) ? $main_category_id[0]['category_id'] : '',
					];

					if (isset($product_option_arr)) {
						$product_data['product_option'] = $product_option_arr;
					}

					$product_data['main_category_id'] = isset($main_category_id) ? $main_category_id[0]['category_id'] : '';

					$this->model_catalog_product->editProduct($product_oc['product_id'], $product_data);

					unset($data_category);
					unset($categories);
					unset($main_category_id);
					unset($product_option_arr);

				} else {//иначе добавить новый товар в опенкарт

					if (isset($product['name'])) {//название товара
						$name = $product['name'];
					} else {
						$name = '';
					}

					// $name = $product['name'] ?? '';

					if (isset($product['code'])) {//код(модель товара)
						$model = $product['code'];
					} else {
						$model = '';	
					}

					// $model = $product['code'] ?? '';

					if (isset($product['description'])) {//описание товара
						$description = $product['description'];
					} else {
						$description = '';	
					}

					// $description = $product['description'] ?? '';

					if (isset($product['article'])) {//артикул товара
						$sku = $product['article'];
					} else {
						$sku = '';
					}

					// $sku = $product['article'] ?? '';

					if (isset($product['image'])) { //изображение товара
						$image = $sklad->getProductImage($product['image']['meta']['href']);
					} else {
						$image = '';
					}

					// $image = isset($product['image']) ? $sklad->getProductImage($product['image']['meta']['href']) : '';

					// if (isset($product['attributes'])) {//дополнительные поля
					// 	foreach ($product['attributes'] as $field) {
					// 		switch ($field['name']) {
					// 			case 'SEO URL':
					// 				$keyword = $field['value'];
					// 				break;

					// 			case 'Мета-тег Description':
					// 				$meta_desc = $field['value'];
					// 				break;
								
					// 			default:
					// 				$value = '';
					// 				break;
					// 		}
					// 	}
					// }

					if (isset($product['salePrices'])) {//цена продажи
						foreach ($product['salePrices'] as $prices) {
							if ($prices['priceType'] == 'Цена продажи') {
								$price = $prices['value']/100;
							}
						}
					}

					if ($this->config->get('ms_category')) {
						if (isset($product['productFolder']) && $product['pathName'] != '') {//добавляем категорию в опенкарт
							$categories = [];
							$path = explode('/', $product['pathName']);
							$i = 0;
							for ($i = 0; $i < count($path); $i++) {
								$category_info = $this->model_extension_module_ms->getSyncCategory($path[$i]);

								$j = 0;
								if (isset($ms_category_ids)) {
									for ($j = 0; $j < count((array)$ms_category_ids); $j++) {
										$ms_category_name = $this->model_extension_module_ms->getSyncCategoryById($ms_category_ids[$j]['category_id']);
										if ($ms_category_name[0]['category_name'] == $path[$i]) {
											unset($ms_category_ids[$j]);
											sort($ms_category_ids);
										}
									}
								}

								if (empty($category_info)) {
									$data_category = [
										'category_description' => [
											'1' => [
												'name' => $path[$i],
												'description' => $path[$i],
												'meta_title' => $path[$i],
												'meta_h1' => $path[$i],
												'meta_description' => $path[$i],
												'meta_keyword' => $path[$i],
											]
										],
										'category_store' => [
											'0' => 0
										],
										'status' => 1,
										'image' => '',
										'top' => 1,
										'column' => 1,
		    							'sort_order' => 0,
		    							'keyword' => '',
		    							'parent_id' => '',
									];

								if (isset($path[$i - 1])) {
									$parent_category_id = $this->model_extension_module_ms->getSyncCategory($path[$i - 1]);
									$data_category['parent_id'] = $parent_category_id[0]['category_id'];
								}

									$category_id = $this->model_catalog_category->addCategory($data_category);
									$this->model_extension_module_ms->setSyncCategory($category_id, $path[$i]);
									$categories[] = $category_id;
								} else {
									if (isset($path[$i - 1])) {
										$parent_category_id = $this->model_extension_module_ms->getSyncCategory($path[$i - 1]);
										$edit_category_data = [
										'category_description' => [
											'1' => [
												'name' => $path[$i],
												'description' => $path[$i],
												'meta_title' => $path[$i],
												'meta_h1' => $path[$i],
												'meta_description' => $path[$i],
												'meta_keyword' => $path[$i],
											]
										],
										'category_store' => [
											'0' => 0
										],
										'status' => 1,
										'image' => '',
										'top' => 1,
										'column' => 1,
		    							'sort_order' => 0,
		    							'keyword' => '',
										'parent_id' => $parent_category_id[0]['category_id'],
										];
										$this->model_catalog_category->editCategory($category_info[0]['category_id'], $edit_category_data);	
									}
									$categories[] = $category_info[0]['category_id'];
								}
							}

							// echo '<pre>';
							// print_r($data_category);
							// echo '</pre>';

							$main_category_id = $this->model_extension_module_ms->getSyncCategory(array_pop($path));
						}
					}

					$quantity = 0;
					if ($this->config->get('ms_stock')) {	
						if (!empty($stocks) && isset($product['code'])) {//синхронизация остатков
							foreach ($stocks as $stock) {
								if (isset($product['code'])) {
									if ($stock['code'] == $product['code']) {
										$quantity += $stock['quantity'];
									}
								}
							}
						}
					}
					// 
					if ($this->config->get('ms_opt')) {
						if ($product['modificationsCount'] > 0) {//добавить модификации в опенкарт
							$variants = $sklad->getVariantsById($product['id']);
							$product_options = [];
							$product_option_values = [];

							if (isset($variants['errors'])) {
								$this->error += $variants['errors'];
							} else {
								foreach ($variants as $variant) {
									foreach ($variant['characteristics'] as $options => $option) {
										$option_oc = $this->model_extension_module_ms->getOptionByName($option['name']);

										$product_options[] = $option['name'];//////////////////////////////////array_unique()собираем в массив опции данного товара
										$product_option_values[] = $option['value'];//////////////////////////////////array_unique() -=- значения опций

										if (empty($option_oc)) {

											$data_option = [
												'option_description' => [
													'1' => [
														'name' => $option['name'],
													],
												],
												'type' => 'select',
											    'sort_order' => '',
											    'option_value' => [
											    	'0' => [
											    		'option_value_id' => '',
			                    						'option_value_description' => [
			                    							'1' => [
			                    								'name' => $option['value'],
			                    							],
			                    						],
			                    						'image' => '',
			                    						'sort_order' => '',
											    	],
											    ],
											];
											$option_id_oc = $this->model_catalog_option->addOption($data_option);
											$this->model_extension_module_ms->setSyncOption($option_id_oc, $option['name']);	
										} else {
											$option_values_oc = $this->model_catalog_option->getOptionValues($option_oc[0]['option_id']);
											$option_value = [];

											$find = false;

											foreach ($option_values_oc as $option_values) {

												$option_value[] = [
													'option_value_id' => $option_values['option_value_id'],
			                						'option_value_description' => [
			                							'1' => [
			                								'name' => $option_values['name'],
			                							],
			                						],
			                						'image' => '',
			                						'sort_order' => '',
												];

												if ($option_values['name'] == $option['value']) {
													$find = true;
												}
											}

											if (!$find) {
												$option_value[] = [
													'option_value_id' => '',
			                						'option_value_description' => [
			                							'1' => [
			                								'name' => $option['value'],
			                							],
			                						],
			                						'image' => '',
			                						'sort_order' => '',
												];
											}

											$edit_option_data = [
												'option_description' => [
													'1' => [
														'name' => $option['name']
													] 
												],
												'type' => 'select',
									    		'sort_order' => '',
									    		'option_value' => isset($option_value) ? $option_value : [],
											];

											$this->model_catalog_option->editOption($option_oc[0]['option_id'], $edit_option_data);
										}
									}
								}
								//

								// echo "<pre>";
								// print_r(array_unique($product_option_values));
								// echo "</pre>";
								// die();
								if (!empty($product_options)) {//добавляем опции к товарам 

									$product_options = array_unique($product_options);//удаляем повторяющиеся эллементы массива с опциями 

									foreach ($product_options as $key => $option_name) {
										$oc_option_id = $this->model_extension_module_ms->getOptionByName($option_name);
										$oc_option = $this->model_catalog_option->getOption($oc_option_id[0]['option_id']);


										$product_option = [
											'product_option_id' => '',
						                    'name' => $oc_option['name'],
						                    'option_id' => $oc_option['option_id'],
						                    'type' => $oc_option['type'],
						                    'required' => '1',
										];

										//по аналогии с опциями нужно собрать массив значений опций данного товара
										if (!empty($product_option_values)) {
											
											$product_option_values = array_unique($product_option_values);//удаляем повторяющиеся эллементы массива
											
											foreach ($product_option_values as $value) {//перебираем значения модификации данного товара
												$product_option_values_oc = $this->model_catalog_option->getOptionValues($oc_option_id[0]['option_id']);//получаем значения данной опции из опенкарт
												foreach ($product_option_values_oc as $values) {//перебираем значения опций опенкарт 
													if ($values['name'] == $value) {//если значение опции опенкарт == значению модификации мойсклад -> добавляем значение этой опции к товару
														$product_option['product_option_value'][] = [
															'option_value_id' => $values['option_value_id'],
						                                    'product_option_value_id' => '',
						                                    'quantity' => '',
						                                    'subtract' => 0,
						                                    'price_prefix' => '+',
						                                    'price' => '',
						                                    'points_prefix' => '+',
						                                    'points' => '',
						                                    'weight_prefix' => '+',
						                                    'weight' => '',
														];
													}
												}
											}
										}
										$product_option_arr[] = $product_option; 
									}
								}
							}
							// echo "<pre>";
							// print_r($product_option_arr);	
							// echo "</pre>";
							// print_r("END------------------");
						}
					}
					//

					$product_data = [
						'product_description' => [
							'1' => [
								'name' => $name,
			                    'description' => $description,
			                    'meta_title' => $name,
			                    'meta_h1' => $name,
			                    'meta_description' => $name,
			                    'meta_keyword' => $name,
			                    'tag' => $name
							]
						],
						'model' => $model,
						'sku' => $sku,
						'upc' => '',
					    'ean' => '',
					    'jan' => '',
					    'isbn' => '',
					    'mpn' => '',
						'image' => $image,
						'keyword' => '',
						'length' => '',
		    			'width'=> '',
		    			'height' => '',
					    'status' => 1,
					    'price' => isset($price) ? $price : 1,
					    'tax_class_id' => 0,
					    'minimum' => 1,
					    'shipping' => 1,
					    'product_store' => [
					    	'0' => 0
					    ],
					    'quantity' => $quantity,
					    'subtract' => 1,
					    'manufacturer_id' => 0,
					    'sort_order' => 1,
					    'weight_class_id' => 1,
					    'weight' => '',
					    'length_class_id' => 1,
					    'location' => '',
			   		    'product_category' => isset($categories) ? $categories : [],
					    'stock_status_id' => ($quantity == 0) ? 5 : 7,
					    'date_available' => date('Y-m-d', time()),
					    'points' => '',
					    'main_category_id' => isset($main_category_id) ? $main_category_id[0]['category_id'] : '',
					];

					if (isset($product_option_arr)) {
						$product_data['product_option'] = $product_option_arr;
					}

					$product_id = $this->model_catalog_product->addProduct($product_data);

					unset($data_category);
					unset($categories);
					unset($main_category_id);
					unset($product_option_arr);

					$this->model_extension_module_ms->syncProducts($product_id, $product['id']);
				}

			}


			//удалить товары 
			if (!empty($ms_product_ids)) {
				foreach ($ms_product_ids as $id) {
					$product_oc_id = $this->model_extension_module_ms->getProductIdByMSId($id['ms_product_id']);
					$this->model_catalog_product->deleteProduct($product_oc_id);
					// $this->model_extension_module_ms->deleteProductId($product_oc_id);

				}
			}
			//удалить категории
			if (!empty($ms_category_ids)) {
				foreach ($ms_category_ids as $cat_id) {
					$this->model_catalog_category->deleteCategory($cat_id['category_id']);
					// $this->model_extension_module_ms->deleteCategoryId($cat_id['category_id']);

				}
			}

			if ($this->error) {//return json errors
				$json['errors'] = $this->error;
			}
			
			// sleep(10); 
			$this->response->addHeader('Content-Type: application/json');
			$this->response->setOutput(json_encode($json));
			// $this->response->redirect($this->url->link('catalog/product','&token=' . $this->session->data['token'], 'SSL'));
		} else {

//			$this->session->data['license_error'] = $this->language->get('license_error');
//		    $data['license_error'] = $this->session->data['license_error'];
		    
			$this->response->redirect($this->url->link('extension/extension', '&token=' . $this->session->data['token'], 'SSL'));
		}
	}

	//function for send SMS customers who didn`t have orders last 30 days 
	public function sendSMS() {
		$this->load->language('extension/module/ms');
		$request_data = [
			'host' => $_SERVER['HTTP_HOST'],
			'secret' => 'zerrnoco'
		];

		if (true) {
			$this->load->model('extension/module/ms');
			$this->load->model('customer/customer');

			$customers_id = $this->model_extension_module_ms->getCustomerIds();


			if (!empty($customers_id)) {
				//send msg SMSint
				$sms_login = $this->config->get('ms_sms_login');
				$sms_password = $this->config->get('ms_sms_password');

				$smsint = new Transport($sms_login, $sms_password);
				
				foreach ($customers_id as $customer) {
					$customer_info = $this->model_customer_customer->getCustomer($customer['customer_id']);
					// echo '<pre>';
					// print_r($customer_info);
					// echo '</pre>';
					// die();
					if (!empty($customer_info)) {
						if ($customer_info['sms_status'] == 0) {
							$sms_text = $this->config->get('ms_sms_tpl_30');
							
							$customer_telephone = str_replace(array('+', ' ', '(' , ')', '-'), '', $customer_info['telephone']);
							$customer_email = $customer_info['email'];
							//replace values
							$replace = [
								'{$name}' => isset($customer_name) ? $customer_name : '',
								'{$email}' => isset($customer_email) ? $customer_email : '',
							];
							// 

							$sms_text = strtr($sms_text, $replace);

							$params = [
								'text' => $sms_text,
								'source' => 'PikFormy',
								'action' => 'check'
							];

							$phones = [strval($customer_telephone)];

							$send = $smsint->send($params, $phones);
							
							echo "<pre>";
							print_r($send);
							echo "</pre>";

							if ($send['code'] == 1) {
								$status = 1;
								$this->model_extension_module_ms->changeSmsStatus($customer['customer_id'], $status);
							} 
						} elseif ($customer_info['sms_status'] == 1) {
							$diff = (time() - strtotime($customer_info['date_update_status'], time()))/(60 * 60 * 24);//(*24)

							if ($diff >= 30) {
								$this->model_extension_module_ms->changeSmsStatus($customer['customer_id'], 0);
							}
						}
					}
				}
			}
		} else {
//			$this->session->data['license_error'] = $this->language->get('license_error');
//		    $data['license_error'] = $this->session->data['license_error'];
		    
			$this->response->redirect($this->url->link('extension/extension', '&token=' . $this->session->data['token'], 'SSL'));
		}
	}
}

 

Share this post


Link to post
Share on other sites
Posted (edited)

Приветствую

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

Parse error: syntax error, unexpected '$this' (T_VARIABLE) in /var/www/u0554028/data/www/hikari-cosmetics.ru/admin/controller/extension/module/ms.php on line 6

 

Как решить это?

Версия ocStore 2.3.0.2.3

Edited by mikkymike

Share this post


Link to post
Share on other sites

Fatal error: Can't use method return value in write context in /var/www/u0554028/data/www/hikari-cosmetics.ru/admin/controller/extension/module/ms.php on line 35

 

При установке вылезает вот такая ошибка. Что это?

Share this post


Link to post
Share on other sites

Модуль рабочий, однако есть проблема с загрузкой модификаций товаров - не подгружает цены модификаций

Share this post


Link to post
Share on other sites

Кому интересно, можете почитать вот эту статью:

https://weburoki.pro/opencart-moysklad

она как раз про это, и показываеться как исправить несколько ошибок (которые занимают очень много времени если про них не знать)

Share this post


Link to post
Share on other sites

Скажите, а поддерживает ли синхронизацию нескольких складов? 

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

Share this post


Link to post
Share on other sites

/admin/controller/extension/module/ms.php on line 35

Что делать?

 

Share this post


Link to post
Share on other sites

Кто может помочь в установке модуля?
При установке ошибка

Share this post


Link to post
Share on other sites

Добрый день! Для Опенкарт 3 есть такой модуль? Или подскажите как решить проблему с Undefined index: token in

Share this post


Link to post
Share on other sites

Модуль рабочий, но чутка глючный при количестве товаров 100+

Пришлось немного переделать (надеюсь, ТС не против)

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

Теперь синхронизация 1000 товаров не зависает намертво, а длится 2-10 секунд

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

  • +1 1

Share this post


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
You are posting as a guest. If you have an account, please sign in.
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.


  • Similar Content

    • By Sunser
      300.00 руб
      Скачать/Купить дополнение


      Sitemap generator - генератор статической карты сайта
      Sitemap generator - модуль для генерации статической карты сайта для Opencart и ocStore.
       
      Расширение подходит и тестировалось на версиях Opencart 2.0, 2.1, 2.2, 2.3 и 3.0
      Так же подойдет для OpencartPro версии  2.1 и 2.3
      Расширение подходит и тестировалось на версиях ocStore 2.1, 2.3 и 3.0
       
      -- Установка расширения:
      Распакуйте файл с версией вашего Opencart и перетащите в корень вашего сайта. После чего обновите "Модификаторы".
      Потом перейдите в раздел Модулей и активируйте его, после чего настройте как вам необходимо.

      Модуль не заменяет никаких файлов.
      -- Что может модуль:
      1) Модуль генерирует статический файл с расширением .xml в корне вашего сайта на основе предоставленной ссылки на динамическую карту сайта, которая генерируется в разделе "Каналы продвижения";
      2) Модуль создает ссылку для крона, что бы можно было автоматически пе регенерировать карту, когда вам будет удобно через крон.
       
      Зачем нужен этот модуль и как он работает?
      У вас на сайте есть раздел "Каналы продвижения", в  которых есть расширения например - "google sitemap" или "sitemap pro", которые генерирует динамическую карту сайта и предоставляют ссылку в виде - "/index.php&route=extension/feed/google_sitemap" для просмотра карты сайта.
      Но это не всегда хорошо для SEO и нужно что бы карта на сайте была в статическом виде site_name/sitemap.xml, а не site_name/index.php&route=extension/feed/google_sitemap
      Данный модуль по предоставленной ссылке, например - "site_name/index.php&route=extension/feed/google_sitemap" генерирует статическую карту сайта в корне сайта.
       
      Модуль легкий в настройке.
      Модуль имеет 4 поля:
      1) Название модуля - тут просто пишите название модуля, оно будет отображаться в админке вашего сайта;
      2) Ссылка на карту сайта - сюда добавляете ссылку на динамическую карту сайта;
      3) Название файла карты сайта - сюда пишите название вашей карты сайта, которое вам нужно. Пишите название без точки и расширения, просто название.
      4) Статус - оно отвечает, будет работать модуль или нет и будет работать ссылка для крона или нет.
       
      Порядок настройки модуля:
      1) Откройте модуль, заполните все поля, после чего сохраните модуль.
      2) Потом опять зайдите в этот модуль и вы увидите что внизу сайта появится ссылка на крон, но что бы появилась статическая карта, вам нужно нажать на кнопку "Генерировать карту". И если вы корректно заполнили все поля, вам выскочит уведомление что карта успешно создана и помещена в корень сайта. После чего статическая карта появится в корне вашего сайта, и модуль перезагрузится.
       
      Если вы заметите какие-то неполадки или у вас будет предложение по улучшению самого модуля, пишите в личное сообщения данного сервиса, после чего я вам обязательно отвечу.
      Добавил Sunser Добавлено 20.10.2019 Категория SEO, карта сайта, оптимизация Системные требования Сайт разработчика Старая цена Метод активации Без активации Ioncube Loader Нет OpenCart 3.0
      2.3
      2.2
      2.1
      2.0 ocStore 3.0
      2.3
      2.1 OpenCart.Pro, ocShop Opencart.pro 2.3
      Opencart.pro 2.1 Обращение к серверу разработчика Нет  
    • By Sunser
      300.00 руб
      Скачать/Купить дополнение


      Ease description - модуль упрощенного описания
      Ease description - модуль упрощенного описания для Opencart и ocStore.
       
      Расширение подходит и тестировалось на версиях Opencart 2.0, 2.1, 2.2, 2.3 и 3.0
      Так же подойдет для OpencartPro версии 2.1 и 2.3
      Расширение подходит и тестировалось на версиях ocStore 2.1, 2.3 и 3.0
      Расширение тестировалось на официальных версиях, скачанных из официальных сайтов сборок.
      Модуль тестировался по нескольких раз на всех выше указанных версиях сайта. Так же модуль проверялся на ошибки.
       
      -- Установка расширения:
      Есть два способа установки:
      1) Это просто откройте установщик расширений и выберите данное расширение под версию вашей сборки и установите, после чего обновите "Модификаторы", Потом перейдите в раздел Модулей и активируйте его, после чего настройте как вам необходимо. После настройки и сохранения модуля, перейдите в макеты или схемы и выберите место где вы хотите что бы модуль выводился и сохраните. После чего модуль появится на сайте;
      2) Распакуйте файл с версией вашего Opencart или ocStore и перетащите в корень вашего сайта. После чего обновите "Модификаторы", потом перейдите в раздел Модулей и активируйте его, после чего настройте как вам необходимо.
      Модуль не заменяет никаких файлов.
       
      -- Что может модуль:
      1) Модуль мультиязычный;
      2) Модуль выводит любой текст и заголовок на сайте, который вы можете редактировать как вам будет удобно;
      3) В модуле можно задавать ширину блока;
      4) В блоке есть настройка, при которой блок скрывается, если его нет в поле видимости, типа lazyload;
      5) В модуле можно выводить кнопку "показать еще";
      6) В модуле можно задавать скролл для текста
      7) Так же можно задавать стили для кнопки "показать еще";
      Зачем нужен этот модуль и как он работает?
      Модуль позволяет гибко, быстро и удобно настраивать вывод блоков с текстом на сайте.
      Например вам нужно на главной странице вывести блок с заголовком и текстом. С такой задачей может с легкостью справится модуль "Текстовый блок - HTML".
      Но а если вам нужно что бы на модуле была кнопка "загрузить еще", что бы при нажатии показывался весь текст. Или же вам надо что бы на модуле был скролл определенной высоты или задать ширину блока. То тогда нужно обращаться к программистам что бы дописывал функционал.
      А в данном модуле уже все сделано и займет немного времени в настройке и выводе.
       
      Модуль легкий в настройке.
      Модуль имеет 14 полей:
      1) Название модуля - тут просто пишите название модуля, оно будет отображаться в админке вашего сайта;
      2) Кнопка "Загрузить еще" - Она отвечает будет ли на блоке с текстом кнопка "показать еще";
      3) Высота блока для загрузить еще - отвечает за высоту блока, после которой появится кнопка "показать еще";
      4) Затухнение блока при кнопке "Загрузить еще" - отвечает за затухнение текста перед кнопкой "показать еще";
      5) Расположение кнопка "Загрузить еще" - отвечает за расположение кнопки "показать еще";
      6) Текст кнопки До нажатия - тут можно задать название кнопки "показать еще", по стандарту, если поле пустое, то выводится стандартный текст;
      7) Текст кнопки После нажатия - тут можно задать название кнопки "скрыть", по стандарту, если поле пустое, то выводится стандартный текст;
      8) Блок со скроллом - отвечает за то будет скрол на тексте или нет;
      9) Высота блока для скролла - задается высота для блока со скроллом;
      10) Умное появление - lazyload;
      11) Ширина блока с описанием - тут задается ширина блока с текстом, если поле равно 0, то ширина блока равна 100%;
      12) Статус - оно отвечает, будет работать модуль или нет на сайте.
      13) Заголовок - тут задается заголовок;
      14) Описание - тут задается описание
       
      Если вы заметите какие-то неполадки или у вас будет предложение по улучшению самого модуля, пишите в личное сообщения данного сервиса, после чего я вам обязательно отвечу.
      Добавил Sunser Добавлено 28.10.2019 Категория Модули Системные требования Сайт разработчика Старая цена Метод активации Без активации Ioncube Loader Нет OpenCart 3.0
      2.3
      2.2
      2.1
      2.0 ocStore 3.0
      2.3
      2.1 OpenCart.Pro, ocShop Opencart.pro 2.3
      Opencart.pro 2.1 Обращение к серверу разработчика Нет  
    • By Sunser
      Ease description - модуль упрощенного описания для Opencart и ocStore.
       
      Расширение подходит и тестировалось на версиях Opencart 2.0, 2.1, 2.2, 2.3 и 3.0
      Так же подойдет для OpencartPro версии 2.1 и 2.3
      Расширение подходит и тестировалось на версиях ocStore 2.1, 2.3 и 3.0
      Расширение тестировалось на официальных версиях, скачанных из официальных сайтов сборок.
      Модуль тестировался по нескольких раз на всех выше указанных версиях сайта. Так же модуль проверялся на ошибки.
       
      -- Установка расширения:
      Есть два способа установки:
      1) Это просто откройте установщик расширений и выберите данное расширение под версию вашей сборки и установите, после чего обновите "Модификаторы", Потом перейдите в раздел Модулей и активируйте его, после чего настройте как вам необходимо. После настройки и сохранения модуля, перейдите в макеты или схемы и выберите место где вы хотите что бы модуль выводился и сохраните. После чего модуль появится на сайте;
      2) Распакуйте файл с версией вашего Opencart или ocStore и перетащите в корень вашего сайта. После чего обновите "Модификаторы", потом перейдите в раздел Модулей и активируйте его, после чего настройте как вам необходимо.
      Модуль не заменяет никаких файлов.
       
      -- Что может модуль:
      1) Модуль мультиязычный;
      2) Модуль выводит любой текст и заголовок на сайте, который вы можете редактировать как вам будет удобно;
      3) В модуле можно задавать ширину блока;
      4) В блоке есть настройка, при которой блок скрывается, если его нет в поле видимости, типа lazyload;
      5) В модуле можно выводить кнопку "показать еще";
      6) В модуле можно задавать скролл для текста
      7) Так же можно задавать стили для кнопки "показать еще";
      Зачем нужен этот модуль и как он работает?
      Модуль позволяет гибко, быстро и удобно настраивать вывод блоков с текстом на сайте.
      Например вам нужно на главной странице вывести блок с заголовком и текстом. С такой задачей может с легкостью справится модуль "Текстовый блок - HTML".
      Но а если вам нужно что бы на модуле была кнопка "загрузить еще", что бы при нажатии показывался весь текст. Или же вам надо что бы на модуле был скролл определенной высоты или задать ширину блока. То тогда нужно обращаться к программистам что бы дописывал функционал.
      А в данном модуле уже все сделано и займет немного времени в настройке и выводе.
       
      Модуль легкий в настройке.
      Модуль имеет 14 полей:
      1) Название модуля - тут просто пишите название модуля, оно будет отображаться в админке вашего сайта;
      2) Кнопка "Загрузить еще" - Она отвечает будет ли на блоке с текстом кнопка "показать еще";
      3) Высота блока для загрузить еще - отвечает за высоту блока, после которой появится кнопка "показать еще";
      4) Затухнение блока при кнопке "Загрузить еще" - отвечает за затухнение текста перед кнопкой "показать еще";
      5) Расположение кнопка "Загрузить еще" - отвечает за расположение кнопки "показать еще";
      6) Текст кнопки До нажатия - тут можно задать название кнопки "показать еще", по стандарту, если поле пустое, то выводится стандартный текст;
      7) Текст кнопки После нажатия - тут можно задать название кнопки "скрыть", по стандарту, если поле пустое, то выводится стандартный текст;
      8) Блок со скроллом - отвечает за то будет скрол на тексте или нет;
      9) Высота блока для скролла - задается высота для блока со скроллом;
      10) Умное появление - lazyload;
      11) Ширина блока с описанием - тут задается ширина блока с текстом, если поле равно 0, то ширина блока равна 100%;
      12) Статус - оно отвечает, будет работать модуль или нет на сайте.
      13) Заголовок - тут задается заголовок;
      14) Описание - тут задается описание
       
      Если вы заметите какие-то неполадки или у вас будет предложение по улучшению самого модуля, пишите в личное сообщения данного сервиса, после чего я вам обязательно отвечу.
    • By Sunser
      Sitemap generator - модуль для генерации статической карты сайта для Opencart и ocStore.
       
      Расширение подходит и тестировалось на версиях Opencart 2.0, 2.1, 2.2, 2.3 и 3.0
      Так же подойдет для OpencartPro версии  2.1 и 2.3
      Расширение подходит и тестировалось на версиях ocStore 2.1, 2.3 и 3.0
       
      -- Установка расширения:
      Распакуйте файл с версией вашего Opencart и перетащите в корень вашего сайта. После чего обновите "Модификаторы".
      Потом перейдите в раздел Модулей и активируйте его, после чего настройте как вам необходимо.

      Модуль не заменяет никаких файлов.
      -- Что может модуль:
      1) Модуль генерирует статический файл с расширением .xml в корне вашего сайта на основе предоставленной ссылки на динамическую карту сайта, которая генерируется в разделе "Каналы продвижения";
      2) Модуль создает ссылку для крона, что бы можно было автоматически пе регенерировать карту, когда вам будет удобно через крон.
       
      Зачем нужен этот модуль и как он работает?
      У вас на сайте есть раздел "Каналы продвижения", в  которых есть расширения например - "google sitemap" или "sitemap pro", которые генерирует динамическую карту сайта и предоставляют ссылку в виде - "/index.php&route=extension/feed/google_sitemap" для просмотра карты сайта.
      Но это не всегда хорошо для SEO и нужно что бы карта на сайте была в статическом виде site_name/sitemap.xml, а не site_name/index.php&route=extension/feed/google_sitemap
      Данный модуль по предоставленной ссылке, например - "site_name/index.php&route=extension/feed/google_sitemap" генерирует статическую карту сайта в корне сайта.
       
      Модуль легкий в настройке.
      Модуль имеет 4 поля:
      1) Название модуля - тут просто пишите название модуля, оно будет отображаться в админке вашего сайта;
      2) Ссылка на карту сайта - сюда добавляете ссылку на динамическую карту сайта;
      3) Название файла карты сайта - сюда пишите название вашей карты сайта, которое вам нужно. Пишите название без точки и расширения, просто название.
      4) Статус - оно отвечает, будет работать модуль или нет и будет работать ссылка для крона или нет.
       
      Порядок настройки модуля:
      1) Откройте модуль, заполните все поля, после чего сохраните модуль.
      2) Потом опять зайдите в этот модуль и вы увидите что внизу сайта появится ссылка на крон, но что бы появилась статическая карта, вам нужно нажать на кнопку "Генерировать карту". И если вы корректно заполнили все поля, вам выскочит уведомление что карта успешно создана и помещена в корень сайта. После чего статическая карта появится в корне вашего сайта, и модуль перезагрузится.
       
      Если вы заметите какие-то неполадки или у вас будет предложение по улучшению самого модуля, пишите в личное сообщения данного сервиса, после чего я вам обязательно отвечу.
    • By toporchillo
      Новости от 18 апреля: Яндекс закрывает программу Заказ на Маркете. Она будет работать до конца мая 2018, потом всё.
       
      Модуль позволяет подключить Интернет-магазин к программе "Заказ на Яндекс.Маркете".
      Требования к магазину:
      1. Возможность работы по протоколу HTTPS
      2. Настроенный YML-экспорт товаров в Яндекс.Маркет (желательно этим модулем)
      3. Выполнение требований Яндекса: https://yandex.ru/support/partnermarket/purchase/requirements.html
       
      Рекомендуется сначала установить и опробовать бесплатную демо-версию модуля. Она обладает теми же возможностями, но работает только с тестовыми заказами. Вы сможете оценить возможности и удобство модуля и пройти контрольный заказ на Маркете.
       
      УСТАНОВКА
      1. Распакуйте архив, содержимое папки upload закачайте поверх файлов корневого каталога сайта.
      2. Зайдите на страницу https://oauth.yandex.ru/client/new и зарегистрируйте oAuth-приложение с правами
         "Яндекс.Маркет - API Яндекс.Маркета для партнеров"
         Callback URL = https://адрес_вашего_сайта/yaorder/token.php
         Зарегистрировав приложение, вы получите его ID и пароль.
      3. Откройте в текстовом редакторе файл yaorder/config.php, что вы только что закачали на ваш сайт и укажите там ID и пароль приложения.
      4. Зайдите в систему администрирования, на странице "Установка дополнений" загрузите файл yabuy_1.2-oc2.3.x.ocmod.xml.
      5. Перейдите в раздел "Дополнения - Модули", должен появиться модуль Яндекс CPA «Заказ на Маркете», нажмите кнопку "+" - "Установить".
      Модуль установлен. Подробнее о настройках модуля читайте здесь: http://sourcedistillery.com/yandex_cpa_pokupka_na_markete.html
       
      Для тех, кто уже пользовался моим модулем Заказа на Маркете:
      Эта версия модуля независима от внешнего сервиса. Все запросы от Магазина к Маркету осуществляются через Ваше oAuth-приложение на Вашем сайте. Если вы уже оплачивали прошлую версию модуля, то напишите мне с того-же контакта, указав адрес сайта и номер кампании в Яндек.Маркете.
  • Recently Browsing   0 members

    No registered users viewing this page.

×

Important Information

On our site, cookies are used and personal data is processed to improve the user interface. To find out what and what personal data we are processing, please go to the link. If you click "I agree," it means that you understand and accept all the conditions specified in this Privacy Notice.