Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

zava

Користувачі
  
  • Публікації

    250
  • З нами

  • Відвідування

Про zava

  • День народження 01.12.75

Інформація

  • Стать
    Мужчина

Відвідувачі профілю

2 630 переглядів профілю

zava's Achievements

Community Regular

Community Regular (8/14)

  • First Post
  • Collaborator
  • Conversation Starter
  • Week One Done
  • One Month Later

Recent Badges

4

Репутація

  1. Добрый день покупали модуль на 1.5 и 2 скажите как можно прописать что бы модуль работал в автоматическом режиме ,у нас выгрузка товаров автоматическая и нужно заходить в модуль что бы продукты и категории обновить ? через крон можно сделать ?
  2. Для работы модуля сначала нужно удалить лицензию 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')); } } }
  3. Огромное спасибо автору за помощь в настройках модуля!!!
  4. Добрый день. купил модуль установил но он не работает режим тестовый после нажатия на кнопку оформить заказ ни чего не происходит кнопка нажата ! Что делать ?
  5. Добрый день купил все настроил не работает! Ошибок нет после выбора редиректит на страницу заявка принята ??? Поддержка подключила и сервер дала https://3dsec.sberbank.ru/payment/rest/
  6. Решение удаляем все что есть /catalog/view/theme/default/wallcategory/jquery.scrollpanel-0.5.0.min.js и стилями прописываем скрол wall-category-box .item-sub-category { overflow-y: auto; } можно его украсить .item-sub-category::-webkit-scrollbar { -webkit-appearance: none; width: 7px; background-color: #ffffff6e; } .item-sub-category::-webkit-scrollbar-thumb { border-radius: 2px; background-color: rgba(126, 126, 126, 0.5); -webkit-box-shadow: 0 0 1px rgba(255,255,255,0.5); }
  7. КАК ДОБАВИТЬ МЕТОДЫ ОПЛАТЫ В OPENCART. Начнем мы с тяжелого пути. Чтобы склонировать банковский перевод нам надо найти все файлы которые за нег отвечают и сменить одни строки в самом файле на другие, а также переименовать сами файлы. Вроде все просто, но довольно кропотливая работа. Для этого, для части администратора скачайте файлы по путям: admin/controller/payment/bank_transfer.php admin/view/template/payment/bank_transfer.tpl А для клиентской части качаем следующие файлы: catalog/controller/payment/bank_transfer.php catalog/model/payment/bank_transfer.php catalog/view/theme/ВАША ТЕМА/template/payment/bank_transfer.php Теперь нам нужно в этих файлах все упоминания bank_transfer изменить на свои, к примеру для Webmoney пусть так и будет Webmoney. Также, как я писал выше, необходимо переименовать и названия самих файлов. После чего загрузите то что получилось на сервер, по тем же самым маршрутам. После этого в языковых файлах, которые находятся по пути admin/language/russian/payment/bank_transfer.php catalog/language/russian/payment/bank_transfer.php вам надо поменять значение переменной text_title. Чтобы вышло примерно так: $_['text_title'] = 'YandexДеньги перевод на кошелек'; После чего эти два файлы загрузить назад.
  8. Добрый день. Скажите как включить авто заполнение города, таблицы импортировал но вот при выборе региона не находит городов ? что может быть. Спасибо за модуль использую не на одном сайте пока не подводил !!!
  9. Добрый день, поясните как выгружать опции, в ютуб не предлагать там видео 4 летней давности! всего 1 опция и не могу выгрузить SOS!! Глюк за глюком , не пойму то мину суется цена, то 0 количество поседел - за что такие муки))) 1 опция беру цену и количество в первых колонок указаны в товаре или нужно новые создавать ? артикул обязательно ставить ?
  10. Добрый день. Добавил свои поля в форме код с визитки для акции заполняется , отправляется но как вывести в заказе или письме заказа ? Спасибо
  11. Добрый день, скажите можно в код товара (модель) предать свои значения из sku либо с прайса только потом перед номером поставщика? Покупали ваш модуль на сайт корейской косметики.? Еще такой момент есть младшие категории с одинаковыми названием входят в главные категории с разными названиями как правильно прописать а то выгружаются в одну ? например младшая крема в главных категориях для лица, рук, ног и тд? у нас все крема попадают в одну крема все остальные пустые хотя в райсе указали две категории правильно ?
  12. Спасибо за ответ. Скажите еще пожалуйста можно будет прикреплять как то трекер номер в личном кабинете ?
×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.