gladky Опубліковано: 26 липня 2019 Share Опубліковано: 26 липня 2019 Писал вам в Скайпе, ссылка на старый вопрос Надіслати Поділитися на інших сайтах More sharing options...
Kirillove Опубліковано: 28 липня 2019 Автор Share Опубліковано: 28 липня 2019 (змінено) В 08.07.2019 в 02:13, gladky сказал: Есть такая проблема периодически не загружает остатки, в логе МойСклад записи. 2019.06.26 21:34:11 Остатки: Получен ответ на запрос. Отправлен каталог товаров. Отправлены остатки. Выгружено 11234 товара. 2019.06.26 20:31:38 Остатки: Получен ответ на запрос. Отправлен каталог товаров. Отправлены остатки. В интернет магазине произошла ошибка во время сеанса отправки остатков: failure ERROR: 3001. 2019.06.26 19:29:16 Остатки: Получен ответ на запрос. Отправлен каталог товаров. Отправлены остатки. Выгружено 11234 товара. Ошибка связана с отсутствием файла XML во время загрузки, причин может быть быть несколько. очистка папки cache/exchange1c во время загрузки. Может быть во время параллельных одновременных обменов с сайтом. не закачался файл не распаковался архив, так как недокачались все части. Либо во время закачки частей произошла очистка кэша Проверьте настройки 1С у вас настроен там один обмен? Если несколько обменов товарами, сделайте так чтобы одновременно не выполнялись более одного обмена. Змінено 28 липня 2019 користувачем Kirillove Надіслати Поділитися на інших сайтах More sharing options... Kirillove Опубліковано: 28 липня 2019 Автор Share Опубліковано: 28 липня 2019 (змінено) С мультиязычной загрузкой вопрос встал... У всех по разному реализовано, необходимо в XML применить один стандарт.. Для этого в начале файла, нужно будет указать что в файле присутствуют несколько языков, и должны быть перечислены. и далее элементы должны быть снабжены атрибутами lang, например: <Наименование lang="ru">Для ноутбуков</Наименование> Пока мне такая идея пришла в голову. В общем такое решение проанализировал и понял что оно самое подходящее, и решил его включить в версию 2.0 Поддержка характеристик тоже будет мультиязычным. Змінено 28 липня 2019 користувачем Kirillove Надіслати Поділитися на інших сайтах More sharing options... gladky Опубліковано: 28 липня 2019 Share Опубліковано: 28 липня 2019 5 часов назад, Kirillove сказал: Проверьте настройки 1С у вас настроен там один обмен? У нас МойСклад, там только 1 обмен Надіслати Поділитися на інших сайтах More sharing options... zack Опубліковано: 3 серпня 2019 Share Опубліковано: 3 серпня 2019 Вопрос возник. Как можно доработать модуль для работы со складами? Что-то вроде загрузки в свойства. Хочу свойством выводить адрес магазин. Но как мне туда заливать данные по остаткам? Нужно реализовать мульти-складскую систему. Однако громоздить другим модулем - смысла нету, поскольку в моем случае все заказы обрабатывает оператор.И в 1С распределяет как надо. Надіслати Поділитися на інших сайтах More sharing options... Kirillove Опубліковано: 4 серпня 2019 Автор Share Опубліковано: 4 серпня 2019 22 часа назад, zack сказал: Вопрос возник. Как можно доработать модуль для работы со складами? Что-то вроде загрузки в свойства. Хочу свойством выводить адрес магазин. Но как мне туда заливать данные по остаткам? Нужно реализовать мульти-складскую систему. Однако громоздить другим модулем - смысла нету, поскольку в моем случае все заказы обрабатывает оператор.И в 1С распределяет как надо. Самое главное чтобы 1С поддерживала такую загрузку, у Вас какая конфигурация 1С? Надіслати Поділитися на інших сайтах More sharing options... Zelimkhan Опубліковано: 5 серпня 2019 Share Опубліковано: 5 серпня 2019 (змінено) Здравствуйте. Имеются товары с опциями, где каждая опция имеет свой остаток. С помощью этого модуля возможно брать опции с 1с вместе со своими остатками? Если в 1с нет возможности указать остаток для опций, то при дописании такой функции, можно будет настроить данный модуль под него. Готов рассмотреть платную доработку Змінено 5 серпня 2019 користувачем Zelimkhan Надіслати Поділитися на інших сайтах More sharing options... zack Опубліковано: 6 серпня 2019 Share Опубліковано: 6 серпня 2019 В 04.08.2019 в 19:58, Kirillove сказал: Самое главное чтобы 1С поддерживала такую загрузку, у Вас какая конфигурация 1С? УНФ. Если надо - могу модуль битрикса прикрутить Надіслати Поділитися на інших сайтах More sharing options... herminator Опубліковано: 6 серпня 2019 Share Опубліковано: 6 серпня 2019 (змінено) В 24.07.2019 в 03:30, Kirillove сказал: Исправление в 1.6.4.7 (SEO генерация по кнопке) файл /admin/model/extension/exchange1c.php Данная статья будет продублирована в разделе исправление ошибок версии 1.6.4.7 на офсайте Показать контент /** * ver 5 * update 2019-07-24 * Генерит SEO переменные шаблона для товара */ public function seoGenerate() { $now = date('Y-m-d H:i:s'); $result = array( 'error' => '', 'product' => 0, 'category' => 0, 'manufacturer' => 0 ); if (empty($this->TAB_FIELDS)) { $this->TAB_FIELDS = $this->defineTableFields(); } $language_id = $this->getLanguageId($this->config->get('config_language')); if ($this->config->get('exchange1c_seo_product_mode') != 'disable') { // Выбрать все товары, нужны поля: // name, sku, model, manufacturer_id, description, product_id, category_id $no_update_description = array(); if (isset($this->TAB_FIELDS['product_description']['meta_h1'])) { $sql = "SELECT p.product_id, p.sku, p.model, p.manufacturer_id, pd.name, pd.tag, pd.meta_title, pd.meta_description, pd.meta_keyword, pd.meta_h1 FROM `" . DB_PREFIX . "product` p LEFT JOIN `" . DB_PREFIX . "product_description` pd ON (p.product_id = pd.product_id) WHERE pd.language_id = " . $language_id; } else { $sql = "SELECT p.product_id, p.sku, p.model, p.manufacturer_id, pd.name, pd.tag, pd.meta_title, pd.meta_description, pd.meta_keyword FROM `" . DB_PREFIX . "product` p LEFT JOIN `" . DB_PREFIX . "product_description` pd ON (p.product_id = pd.product_id) WHERE pd.language_id = " . $language_id; array_push($no_update_description, 'meta_h1'); } $query = $this->query($sql); if ($query->num_rows) { foreach ($query->rows as $data) { $this->log($data, 2); $result['product']++; $data_old = $data; if ($this->config->get('exchange1c_seo_product_mode') != 'disable') $update = $this->seoGenerateProduct($data['product_id'], $data); $this->log($update, 2); if (!$update) { $this->log("Нечего обновлять!", 2); continue; } // Сравнение $update_fields = $this->compareArraysData($update, $data_old); // Если есть что обновлять if ($update_fields) { $sql_set = $this->prepareQuery($update_fields, 'set'); $this->query( "UPDATE `" . DB_PREFIX . "product_description` SET " . $sql_set . " WHERE `product_id` = " . (int)$data['product_id'] . " AND `language_id` = " . $language_id ); } } } } // Категории if ($this->config->get('exchange1c_seo_category_mode') != 'disable') { // Выбрать все категории, нужны поля: // name, sku, model, manufacturer_id, description, product_id, category_id $no_update_description = array(); if (isset($this->TAB_FIELDS['category_description']['meta_h1'])) { $sql = "SELECT c.category_id, cd.name, cd.meta_title, cd.meta_description, cd.meta_keyword, cd.meta_h1 FROM `" . DB_PREFIX . "category` c LEFT JOIN `" . DB_PREFIX . "category_description` cd ON (c.category_id = cd.category_id) WHERE cd.language_id = " . $language_id; } else { $sql = "SELECT c.category_id, cd.name, cd.meta_title, cd.meta_description, cd.meta_keyword FROM `" . DB_PREFIX . "category` c LEFT JOIN `" . DB_PREFIX . "category_description` cd ON (c.category_id = cd.category_id) WHERE cd.language_id = " . $language_id; array_push($no_update_description, 'meta_h1'); } $query = $this->query($sql); if ($query->num_rows) { foreach ($query->rows as $data) { $result['category']++; if ($this->config->get('exchange1c_seo_category_mode') != 'disable') $this->seoGenerateCategory($data['category_id'], $data); // Сравнение $update_fields = $this->compareArraysData($data_old, $data, $no_update_description); // Если есть что обновлять if ($update_fields) { $sql_set = $this->prepareQuery($update_fields, 'set'); $this->query( "UPDATE `" . DB_PREFIX . "category_description` SET " . $sql_set . " WHERE `category_id` = " . (int)$data['category_id'] . " AND `language_id` = " . $language_id ); $this->query( "UPDATE `" . DB_PREFIX . "category` SET `date_modified` = '" . $now . "' WHERE `category_id` = " . (int)$data['category_id'] ); } } } } // Производители if ($this->config->get('exchange1c_seo_manufacturer_mode') != 'disable') { if (isset($this->TAB_FIELDS['manufacturer_description'])) { // Выбрать все категории, нужны поля: // name, sku, model, manufacturer_id, description, product_id, category_id $no_update_description = array(); if (isset($this->TAB_FIELDS['manufacturer_description']['meta_h1'])) { $sql = "SELECT m.manufacturer_id, md.name, md.meta_title, md.meta_description, md.meta_keyword, md.meta_h1 FROM `" . DB_PREFIX . "manufacturer` m LEFT JOIN `" . DB_PREFIX . "manufacturer_description` md ON (m.manufacturer_id = md.manufacturer_id) WHERE md.language_id = " . $language_id; } else { $sql = "SELECT m.manufacturer_id, md.name, md.meta_title, md.meta_description, md.meta_keyword FROM `" . DB_PREFIX . "manufacturer` m LEFT JOIN `" . DB_PREFIX . "manufacturer_description` md ON (m.manufacturer_id = md.manufacturer_id) WHERE md.language_id = " . $language_id; array_push($no_update_description, 'meta_h1'); } $query = $this->query($sql); if ($query->num_rows) { foreach ($query->rows as $data) { $result['manufacturer']++; $data_old = $data; if ($this->config->get('exchange1c_seo_manufacturer_mode') != 'disable') $update = $this->seoGenerateManufacturer($data['manufacturer_id'], $data); if (!$update) continue; // Сравнение $update_fields = $this->compareArraysData($data_old, $data, $no_update_description); // Если есть что обновлять if ($update_fields) { $sql_set = $this->prepareQuery($update_fields, 'set'); $this->query( "UPDATE `" . DB_PREFIX . "category_description` SET " . $sql_set . " WHERE `category_id` = " . (int)$data['category_id'] . " AND `language_id` = " . $language_id ); $this->query( "UPDATE `" . DB_PREFIX . "category` SET `date_modified` = '" . $now . "' WHERE `category_id` = " . (int)$data['category_id'] ); } } } } } return $result; } // seoGenerate() Не вдаваясь в подробности, это не работает. Разбирать почему - нет ни сил, ни желания. Может быть кому-то пригодится мой рабочий вариант (+прямое добавление цены в паттерны, что неправильно, но меня устраивает, как добавить - писал ранее): Спойлер /** * ver 5 * update 2018-06-14 * Генерит SEO переменные шаблона для товара * С версии 4 функция теперь не читает данные из базы */ private function seoGenerateProduct($product_id, $data) { $result = array(); // Определение дополнительных полей $this->TAB_FIELDS = $this->config->get('exchange1c_table_fields'); // Товары, Категории $seo_fields = array(); if (isset($this->TAB_FIELDS['product_description']['meta_title'])) { $seo_fields[] = 'meta_title'; } if (isset($this->TAB_FIELDS['product_description']['meta_description'])) { $seo_fields[] = 'meta_description'; } if (isset($this->TAB_FIELDS['product_description']['meta_keyword'])) { $seo_fields[] = 'meta_keyword'; } //$this->log($this->TAB_FIELDS, 2); $data['price'] = strtok((float)$data['price'], '.'); // Сопоставляем значения к паттернам $tags = array( '{name}' => isset($data['name']) ? $data['name'] : '', '{sku}' => isset($data['sku']) ? $data['sku'] : '', '{model}' => isset($data['model']) ? $data['model'] : '', '{price}' => isset($data['price']) ? $data['price'] : '', '{brand}' => isset($data['manufacturer']) ? $data['manufacturer']['name'] : '', '{cats}' => $this->getProductCategoriesString($product_id), '{prod_id}' => isset($product_id) ? $product_id : '', '{cat_id}' => isset($data['category_id']) ? $data['category_id'] : '' ); if (isset($this->TAB_FIELDS['product_description']['meta_h1'])) { $seo_fields[] = 'meta_h1'; } // Формируем массив с замененными значениями foreach ($seo_fields as $field) { $template = ''; if ($this->config->get('exchange1c_seo_product_'.$field) == 'template') { $template = $this->config->get('exchange1c_seo_product_'.$field.'_template'); // Если выбран шаблон, но он пустой, пропускаем if (!$template) { $this->log("Шаблон пустой - пропускаем"); continue; } if ($this->config->get('exchange1c_seo_product_mode') == 'overwrite') { // Перезаписывать if ($field == 'meta_keyword' || $field == 'tag') { $value = $this->seoGenerateString($template, $tags, false, true); } else { $value = $this->seoGenerateString($template, $tags); } // Если вдруг по каким-либо причинам это поле отсутствует, будем считать что оно есть, но пустое // Вот тут может быть когда-либо ошибка... if (!isset($data[$field])) { $data[$field] = ""; } // Если поле не изменилось, нет смысла его перезаписывать if ($value == $data[$field]) { $this->log("Поле '" . $field . "' не изменилось: " . $data[$field], 2); continue; } // Нужно обновить поле $this->log("Поле: '" . $field . "' старое: '" . $data[$field] . "', новое: '" . $value . "'", 2); $result[$field] = $value; } else { // Только если поле пустое if (empty($data[$field])) { $value = $this->seoGenerateString($template, $tags); $this->log("Поле: '" . $field . "' старое: '" . $data[$field] . "', новое: '" . $value . "'", 2); $result[$field] = $value; } else { $this->log("Пропускаем '" . $field . "', т.к. не пустое: '" . $data[$field] . "'", 2); } } } else { $this->log("Шаблон для поля '" . $field . "' не найден!"); continue; } } if ($this->config->get('exchange1c_seo_product_seo_url') == 'template') { // Сформируем SEO URL $template = $this->config->get('exchange1c_seo_product_seo_url_template'); $keyword = $this->seoGenerateString($template, $tags, true); // Получим старый SeoUrl $seo_url = $this->getSeoUrl("product_id", $product_id); // обновляем если только были изменения if ($this->config->get('exchange1c_seo_product_mode') == 'overwrite' || ($this->config->get('exchange1c_seo_product_mode') == 'if_empty' && empty($seo_url['keyword']))) { if ($seo_url['keyword'] != $keyword) { $this->setSeoURL('product_id', $product_id, $keyword, $seo_url); } } } $this->log("SEO товара обновлено полей: " . count($result)); return $result; } // seoGenerateProduct() /** * ver 6 * update 2018-06-14 * Генерит SEO переменные шаблона для категории */ private function seoGenerateCategory($category_id, &$data) { $seo_fields = array( 'meta_title', 'meta_description', 'meta_keyword' ); if (isset($this->TAB_FIELDS['category_description']['meta_h1'])) { $seo_fields[] = 'meta_h1'; } // Сопоставляем значения к паттернам $tags = array( '{cat}' => isset($data['name']) ? $data['name'] : '', '{cat_id}' => $category_id ); // Формируем массив с замененными значениями foreach ($seo_fields as $field) { if (!isset($data[$field])) { $data[$field] = ""; } if ($this->config->get('exchange1c_seo_category_'.$field) == 'template') { // Если включено формирование по шаблону $template = $this->config->get('exchange1c_seo_category_'.$field.'_template'); // Если выбран шаблон, но он пустой, пропускаем if (!$template) { unset($data[$field]); continue; } if ($this->config->get('exchange1c_seo_category_mode') == 'overwrite') { // Перезаписывать $value = $this->seoGenerateString($template, $tags); // Если поле не изменилось, нет смысла его перезаписывать if ($value == $data[$field]) { $this->log("Поле '" . $field . "' не изменилось: " . $data[$field], 2); unset($data[$field]); continue; } // Нужно обновить поле $this->log("Поле: '" . $field . "' старое: '" . $data[$field] . "', новое: '" . $value . "', шаблон: " . $template, 2); $data[$field] = $value; } elseif ($this->config->get('exchange1c_seo_category_mode') == 'if_empty' && empty($data[$field])) { // Только если поле пустое $value = $this->seoGenerateString($template, $tags); $this->log("Поле: '" . $field . "' старое: '" . $data[$field] . "', новое: '" . $value . "'", 2); $data[$field] = $value; } else { unset($data[$field]); } } else { // Не изменяем это поле unset($data[$field]); continue; } } // foreach if ($this->config->get('exchange1c_seo_category_seo_url') == 'template') { // Сформируем SEO URL $template = $this->config->get('exchange1c_seo_category_seo_url_template'); $keyword = $this->seoGenerateString($template, $tags, true); // Получим старый SeoUrl $seo_url = $this->getSeoUrl("category_id", $category_id); // обновляем если только были изменения if ($this->config->get('exchange1c_seo_category_mode') == 'overwrite' || ($this->config->get('exchange1c_seo_category_mode') == 'if_empty' && empty($seo_url['keyword']))) { if ($seo_url['keyword'] != $keyword) { $this->setSeoURL('category_id', $category_id, $keyword, $seo_url); } } } $this->log("Сформировано SEO для категории"); } // seoGenerateCategory() /** * ver 10 * update 2018-06-14 * Генерит SEO переменные шаблона для производетеля */ private function seoGenerateManufacturer($manufacturer_id, &$data) { if (!isset($this->TAB_FIELDS['manufacturer_description'])) { $this->log("В базе отсутствует таблица manufacturer_description, SEO не будет сформировано"); return false; } $seo_fields = array(); if (isset($this->TAB_FIELDS['manufacturer_description'])) { if (isset($this->TAB_FIELDS['manufacturer_description']['meta_h1'])) { $seo_fields[] = 'meta_h1'; } if (isset($this->TAB_FIELDS['manufacturer_description']['meta_title'])) { $seo_fields[] = 'meta_title'; } if (isset($this->TAB_FIELDS['manufacturer_description']['meta_description'])) { $seo_fields[] = 'meta_description'; } if (isset($this->TAB_FIELDS['manufacturer_description']['meta_keyword'])) { $seo_fields[] = 'meta_keyword'; } // Получим поля для сравнения $fields = implode($seo_fields,', '); $query = $this->query("SELECT " . $fields . " FROM `" . DB_PREFIX . "manufacturer_description` WHERE `manufacturer_id` = " . (int)$manufacturer_id . " AND `language_id` = " . $this->LANG_ID); foreach ($seo_fields as $field) { $data[$field] = isset($query->row[$field]) ? $query->row[$field] : ""; } } // Сопоставляем значения к тегам $tags = array( '{brand}' => isset($data['name']) ? $data['name'] : '', '{brand_id}' => (string)$manufacturer_id ); $update = false; // Формируем массив с замененными значениями foreach ($seo_fields as $field) { $template = ''; if ($this->config->get('exchange1c_seo_manufacturer_' . $field) == 'template') { $template = $this->config->get('exchange1c_seo_manufacturer_' . $field . '_template'); if (!$template) { unset($data[$field]); continue; } if ($this->config->get('exchange1c_seo_manufacturer_mode') == 'overwrite') { // Перезаписывать $value = $this->seoGenerateString($template, $tags); // Если поле не изменилось, нет смысла его перезаписывать if ($value == $data[$field]) { $this->log("Поле '" . $field . "' не изменилось: " . $data[$field], 2); unset($data[$field]); continue; } // Нужно обновить поле $this->log("Поле: '" . $field . "' старое: '" . $data[$field] . "', новое: '" . $value . "'", 2); $data[$field] = $value; $update = true; } else { // Только если поле пустое if (empty($data[$field])) { $value = $this->seoGenerateString($template, $tags); $this->log("Поле: '" . $field . "' старое: '" . $data[$field] . "', новое: '" . $value . "'", 2); $data[$field] = $value; $update = true; } else { $this->log("Пропускаем '" . $field . "', т.к. не пустое: '" . $data[$field] . "'", 2); unset($data[$field]); } } } else { // Не изменяем это поле unset($data[$field]); continue; } } if ($this->config->get('exchange1c_seo_manufacturer_seo_url') == 'template') { // Сформируем SEO URL $template = $this->config->get('exchange1c_seo_manufacturer_seo_url_template'); $keyword = $this->seoGenerateString($template, $tags, true); // Получим старый SeoUrl $seo_url = $this->getSeoUrl("manufacturer_id", $manufacturer_id); // обновляем если только были изменения if ($this->config->get('exchange1c_seo_manufacturer_mode') == 'overwrite' || ($this->config->get('exchange1c_seo_manufacturer_mode') == 'if_empty' && empty($seo_url['keyword']))) { if ($seo_url['keyword'] != $keyword) { $this->setSeoURL('manufacturer_id', $manufacturer_id, $keyword, $seo_url); } } } $this->log("Сформировано SEO для производителя"); } // seoGenerateManufacturer() /** * ver 4 * update 2018-06-14 * Генерит SEO переменные шаблона для товара */ public function seoGenerate() { $now = date('Y-m-d H:i:s'); $result = array( 'error' => '', 'product' => 0, 'category' => 0, 'manufacturer' => 0 ); $language_id = $this->getLanguageId($this->config->get('config_language')); if ($this->config->get('exchange1c_seo_product_mode') != 'disable') { // Выбрать все товары, нужны поля: // name, sku, model, manufacturer_id, description, product_id, category_id $no_update_description = array(); if (isset($this->TAB_FIELDS['product_description']['meta_h1'])) { $sql = "SELECT `p`.`product_id`, `p`.`sku`, `p`.`model`, `p`.`price`, `p`.`manufacturer_id`, `pd`.`name`, `pd`.`tag`, `pd`.`meta_title`, `pd`.`meta_description`, `pd`.`meta_keyword`, `pd`.`meta_h1` FROM `" . DB_PREFIX . "product` `p` LEFT JOIN `" . DB_PREFIX . "product_description` `pd` ON (`p`.`product_id` = `pd`.`product_id`) WHERE `pd.`language_id` = " . $language_id; } else { $sql = "SELECT `p`.`product_id`, `p`.`sku`, `p`.`model`, `p`.`price`, `p`.`manufacturer_id`, `pd`.`name`, `pd`.`tag`, `pd`.`meta_title`, `pd`.`meta_description`, `pd`.`meta_keyword` FROM `" . DB_PREFIX . "product` `p` LEFT JOIN `" . DB_PREFIX . "product_description` `pd` ON (`p`.`product_id` = `pd`.`product_id`) WHERE `pd`.`language_id` = " . $language_id; array_push($no_update_description, 'meta_h1'); } $query = $this->query($sql); if ($query->num_rows) { foreach ($query->rows as $data) { $result['product']++; if ($this->config->get('exchange1c_seo_product_mode') != 'disable') $update = $this->seoGenerateProduct($data['product_id'], $data); if (!$update) continue; // Сравнение $no_update = array('sku','model','manufacturer_id'); $update_fields = $this->compareArraysData($update, $data, $no_update); // Если есть что обновлять if ($update_fields) { $sql_set = $this->prepareQuery($update_fields, 'set'); $this->query("UPDATE `" . DB_PREFIX . "product` SET " . $sql_set . ", `date_modified` = '" . $now . "' WHERE `product_id` = " . (int)$data['product_id']); } // Сравнение $update_fields = $this->compareArraysData($update, $data, $no_update_description); // Если есть что обновлять if ($update_fields) { $sql_set = $this->prepareQuery($update_fields, 'set'); $this->query("UPDATE `" . DB_PREFIX . "product_description` SET " . $sql_set . " WHERE `product_id` = " . (int)$data['product_id'] . " AND `language_id` = " . $language_id); } } } } // Категории if ($this->config->get('exchange1c_seo_category_mode') != 'disable') { // Выбрать все категории, нужны поля: // name, sku, model, manufacturer_id, description, product_id, category_id $no_update_description = array(); if (isset($this->TAB_FIELDS['category_description']['meta_h1'])) { $sql = "SELECT `c`.`category_id`, `cd`.`name`, `cd`.`meta_title`, `cd`.`meta_description`, `cd`.`meta_keyword`, `cd`.`meta_h1` FROM `" . DB_PREFIX . "category` `c` LEFT JOIN `" . DB_PREFIX . "category_description` `cd` ON (`c`.`category_id` = `cd`.`category_id`) WHERE `cd`.`language_id` = " . $language_id; } else { $sql = "SELECT `c`.`category_id`, `cd`.`name`, `cd`.`meta_title`, `cd`.`meta_description`, `cd`.`meta_keyword` FROM `" . DB_PREFIX . "category` `c` LEFT JOIN `" . DB_PREFIX . "category_description` `cd` ON (`c`.`category_id` = `cd`.`category_id`) WHERE `cd`.`language_id` = " . $language_id; array_push($no_update_description, 'meta_h1'); } $query = $this->query($sql); if ($query->num_rows) { foreach ($query->rows as $data) { $result['category']++; $data_old = $data; if ($this->config->get('exchange1c_seo_category_mode') != 'disable') $this->seoGenerateCategory($data['category_id'], $data); // Сравнение $update_fields = $this->compareArraysData($data, $data_old, $no_update_description); // Если есть что обновлять if ($update_fields) { $sql_set = $this->prepareQuery($update_fields, 'set'); $this->query("UPDATE `" . DB_PREFIX . "category_description` SET " . $sql_set . " WHERE `category_id` = " . (int)$data['category_id'] . " AND `language_id` = " . $language_id); $this->query("UPDATE `" . DB_PREFIX . "category` SET `date_modified` = '" . $now . "' WHERE `category_id` = " . (int)$data['category_id']); } } } } // Производители if ($this->config->get('exchange1c_seo_manufacturer_mode') != 'disable') { if (isset($this->TAB_FIELDS['manufacturer_description']['meta_h1'])) { // Выбрать все категории, нужны поля: // name, sku, model, manufacturer_id, description, product_id, category_id $no_update_description = array(); if (isset($this->TAB_FIELDS['manufacturer_description']['meta_h1'])) { $sql = "SELECT `m`.`manufacturer_id`, `m`.`name`, `md`.`meta_title`, `md`.`meta_description`, `md`.`meta_keyword`, `md`.`meta_h1` FROM `" . DB_PREFIX . "manufacturer` `m` LEFT JOIN `" . DB_PREFIX . "manufacturer_description` `md` ON (`m`.`manufacturer_id` = `md`.`manufacturer_id`) WHERE `md`.`language_id` = " . $language_id; } else { $sql = "SELECT `m`.`manufacturer_id`, `m`.`name`, `md`.`meta_title`, `md`.`meta_description`, `md`.`meta_keyword` FROM `" . DB_PREFIX . "manufacturer` `m` LEFT JOIN `" . DB_PREFIX . "manufacturer_description` `md` ON (`m`.`manufacturer_id` = `md`.`manufacturer_id`) WHERE `md`.`language_id` = " . $language_id; array_push($no_update_description, 'meta_h1'); } $query = $this->query($sql); if ($query->num_rows) { foreach ($query->rows as $data) { $result['manufacturer']++; $data_old = $data; if ($this->config->get('exchange1c_seo_manufacturer_mode') != 'disable') $this->seoGenerateManufacturer($data['manufacturer_id'], $data); $update_fields = $this->compareArraysData($data, $data_old, $no_update_description); // Если есть что обновлять if ($update_fields) { $this->log("Обновляю поля SEO для производителя."); $sql_set = $this->prepareQuery($update_fields, 'set'); $this->query("UPDATE `" . DB_PREFIX . "manufacturer_description` SET " . $sql_set . " WHERE `manufacturer_id` = " . (int)$data['manufacturer_id'] . " AND `language_id` = " . $language_id); $this->query("UPDATE `" . DB_PREFIX . "manufacturer` SET `date_modified` = '" . $now . "' WHERE `manufacturer_id` = " . (int)$data['manufacturer_id']); }else{ $this->log("Поля SEO для производителя не изменились."); } } } } } return $result; } // seoGenerate() Расписыванием внесённых правок нет желания заниматься. Кто захочет - сравнит исходники. Змінено 6 серпня 2019 користувачем herminator Надіслати Поділитися на інших сайтах More sharing options... webnet Опубліковано: 9 серпня 2019 Share Опубліковано: 9 серпня 2019 Подскажите, можно ли отключить обновление названий категорий при импорте из 1С на сайт через ваш модуль? Хотелось бы указать свои названия категорий на сайте, но при импорте они все равно меняются на названия, которые в 1С. Надіслати Поділитися на інших сайтах More sharing options... zack Опубліковано: 9 серпня 2019 Share Опубліковано: 9 серпня 2019 /catalog/controller/product/category.php Скрыть контент $this->data['products'][] = array( 'product_id' => $result['product_id'], 'thumb' => $image, 'sku' => $result['sku'], 'mpn' => $result['mpn'], 'quantity' => $result['quantity'], // получим остатки по складам 'quantity_warehouse' => $this->model_catalog_product->getProductQuantity($result['product_id']), 'discount' => $discounts, 'stock_status'=> $result['stock_status'], 'name' => $result['name'], 'description' => utf8_substr(strip_tags(html_entity_decode($result['description'], ENT_QUOTES, 'UTF-8')), 0, 100) . '', 'price' => $price, 'special' => $special, 'tax' => $tax, 'rating' => $result['rating'], 'reviews' => sprintf($this->language->get('text_reviews'), (int)$result['reviews']), 'href' => $this->url->link('product/product', 'path=' . $this->request->get['path'] . '&product_id=' . $result['product_id'] . $url) ); } в шаблоне у меня выглядит так (в разных шаблонах по-разному, но смысл одинаковый) Скрыть контент <?php if (isset($product['quantity_warehouse'])) { ?> <div> <?php $pq_style = $product['quantity'] ? ' style="color: #00AA00;"' : ' style="color: #FF0000;"'?> <?php foreach ($product['quantity_warehouse'] as $qw => $quantity_warehouse) { if ($quantity_warehouse['quantity'] > 0) { ?> <div><span<?php echo $pq_style ?> title="<?php echo 'Наличие на складе '.$quantity_warehouse['name'] ?>"> <?php echo 'Склад "'.$quantity_warehouse['name']. '" ' . $quantity_warehouse['quantity'] . ' шт'; ?></span></div> <?php } else {?> <div><span style="color: #FF0000;" title="Нет в наличии"><?php echo $product['stock_status']; ?></span></div> <?php } ?> <?php } ?> </div> <?php } ?> теперь в карточке товара: Скрыть контент /catalog/controller/product/product.php меняем текст: if ($product_info['quantity'] <= 0) { $this->data['stock'] = $product_info['stock_status']; } elseif ($this->config->get('config_stock_display')) { $this->data['stock'] = $product_info['quantity']; } else { $this->data['stock'] = $this->language->get('text_instock'); } на if ($product_info['quantity'] <= 0) { $this->data['stock'] = $product_info['stock_status']; } elseif ($this->config->get('config_stock_display')) { $this->data['stock'] = $product_info['quantity']; } else { $this->data['stock'] = $this->language->get('text_instock'); } $this->data['quantity_warehouse'] = $this->model_catalog_product->getProductQuantity($this->request->get['product_id']); функция getProductQuantity() содержит следующие строки: Скрыть контент public function getProductQuantity($product_id) { $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "product_quantity pq JOIN " . DB_PREFIX . "warehouse w ON (pq.warehouse_id = w.warehouse_id) WHERE pq.product_id = '" . (int)$product_id . "'"); return $query->rows; } Как такое реализовать на Opencart 2.3.0.2 Версия модуля 1.6.4.5 Надіслати Поділитися на інших сайтах More sharing options... zack Опубліковано: 12 серпня 2019 Share Опубліковано: 12 серпня 2019 В 09.08.2019 в 19:53, zack сказал: /catalog/controller/product/category.php Скрыть контент $this->data['products'][] = array( 'product_id' => $result['product_id'], 'thumb' => $image, 'sku' => $result['sku'], 'mpn' => $result['mpn'], 'quantity' => $result['quantity'], // получим остатки по складам 'quantity_warehouse' => $this->model_catalog_product->getProductQuantity($result['product_id']), 'discount' => $discounts, 'stock_status'=> $result['stock_status'], 'name' => $result['name'], 'description' => utf8_substr(strip_tags(html_entity_decode($result['description'], ENT_QUOTES, 'UTF-8')), 0, 100) . '', 'price' => $price, 'special' => $special, 'tax' => $tax, 'rating' => $result['rating'], 'reviews' => sprintf($this->language->get('text_reviews'), (int)$result['reviews']), 'href' => $this->url->link('product/product', 'path=' . $this->request->get['path'] . '&product_id=' . $result['product_id'] . $url) ); } в шаблоне у меня выглядит так (в разных шаблонах по-разному, но смысл одинаковый) Показать контент <?php if (isset($product['quantity_warehouse'])) { ?> <div> <?php $pq_style = $product['quantity'] ? ' style="color: #00AA00;"' : ' style="color: #FF0000;"'?> <?php foreach ($product['quantity_warehouse'] as $qw => $quantity_warehouse) { if ($quantity_warehouse['quantity'] > 0) { ?> <div><span<?php echo $pq_style ?> title="<?php echo 'Наличие на складе '.$quantity_warehouse['name'] ?>"> <?php echo 'Склад "'.$quantity_warehouse['name']. '" ' . $quantity_warehouse['quantity'] . ' шт'; ?></span></div> <?php } else {?> <div><span style="color: #FF0000;" title="Нет в наличии"><?php echo $product['stock_status']; ?></span></div> <?php } ?> <?php } ?> </div> <?php } ?> теперь в карточке товара: Показать контент /catalog/controller/product/product.php меняем текст: if ($product_info['quantity'] <= 0) { $this->data['stock'] = $product_info['stock_status']; } elseif ($this->config->get('config_stock_display')) { $this->data['stock'] = $product_info['quantity']; } else { $this->data['stock'] = $this->language->get('text_instock'); } на if ($product_info['quantity'] <= 0) { $this->data['stock'] = $product_info['stock_status']; } elseif ($this->config->get('config_stock_display')) { $this->data['stock'] = $product_info['quantity']; } else { $this->data['stock'] = $this->language->get('text_instock'); } $this->data['quantity_warehouse'] = $this->model_catalog_product->getProductQuantity($this->request->get['product_id']); функция getProductQuantity() содержит следующие строки: Скрыть контент public function getProductQuantity($product_id) { $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "product_quantity pq JOIN " . DB_PREFIX . "warehouse w ON (pq.warehouse_id = w.warehouse_id) WHERE pq.product_id = '" . (int)$product_id . "'"); return $query->rows; } Как такое реализовать на Opencart 2.3.0.2 Версия модуля 1.6.4.5 При добавлении данного кода - ошибка 500 на странице карточки товара. В логах ничего не появляется. Надіслати Поділитися на інших сайтах More sharing options... Ryazanov Опубліковано: 20 серпня 2019 Share Опубліковано: 20 серпня 2019 Добрый день! Версия ocStore 2.3.0.2.3 и модуль версия 1.6.4.7 ни как не хот\т видеть друг друга. 1с УТ 2.3 (это для Украины конфигурация), т.е. база не видит модуль, пишет ошибка пользователя и пароль неверный, что не в водили, хотя если ставить ниже версию модуля 1c_1.6.3.11, то и при пустых полях пользователя и пароля нормально работает. В чем может быть причина? В настройках модуля, где выбор платформы выбирали и УНФ, и УТ 11 и 10, все равно не хотят дружить Спасибо. (Модуль и более старой версии подходил бы, но есть некоторые косячки: в базе есть категории пустые, в которых нет товаров, а они на сайте все равно есть, не скрываются, например, а это важно!!!) Надіслати Поділитися на інших сайтах More sharing options... marcus201832 Опубліковано: 21 серпня 2019 Share Опубліковано: 21 серпня 2019 14 часов назад, Ryazanov сказал: Добрый день! Версия ocStore 2.3.0.2.3 и модуль версия 1.6.4.7 ни как не хот\т видеть друг друга. 1с УТ 2.3 (это для Украины конфигурация), т.е. база не видит модуль, пишет ошибка пользователя и пароль неверный, что не в водили, хотя если ставить ниже версию модуля 1c_1.6.3.11, то и при пустых полях пользователя и пароля нормально работает. В чем может быть причина? В настройках модуля, где выбор платформы выбирали и УНФ, и УТ 11 и 10, все равно не хотят дружить Спасибо. (Модуль и более старой версии подходил бы, но есть некоторые косячки: в базе есть категории пустые, в которых нет товаров, а они на сайте все равно есть, не скрываются, например, а это важно!!!) В файле .htaccess эту запись указывали? RewriteRule .* - [E=REMOTE_USER:%{HTTP:Authorization},L] Надіслати Поділитися на інших сайтах More sharing options... Ryazanov Опубліковано: 22 серпня 2019 Share Опубліковано: 22 серпня 2019 В 21.08.2019 в 07:35, marcus201832 сказал: В файле .htaccess эту запись указывали? RewriteRule .* - [E=REMOTE_USER:%{HTTP:Authorization},L] Добрый день! Версия ocStore 2.3.0.2.3 и модуль версия 1.6.4.7 ни как не хот\т видеть друг друга. 1с УТ 2.3 (это для Украины конфигурация), т.е. база не видит модуль, пишет ошибка пользователя и пароль неверный, что не в водили, хотя если ставить ниже версию модуля 1c_1.6.3.11, то и при пустых полях пользователя и пароля нормально работает. В чем может быть причина? В настройках модуля, где выбор платформы выбирали и УНФ, и УТ 11 и 10, все равно не хотят дружить Спасибо. (Модуль и более старой версии подходил бы, но есть некоторые косячки: в базе есть категории пустые, в которых нет товаров, а они на сайте все равно есть, не скрываются, например, а это важно!!!) В 21.08.2019 в 07:35, marcus201832 сказал: В файле .htaccess эту запись указывали? RewriteRule .* - [E=REMOTE_USER:%{HTTP:Authorization},L] нет, а надо? Надіслати Поділитися на інших сайтах More sharing options... alkorf Опубліковано: 24 серпня 2019 Share Опубліковано: 24 серпня 2019 (змінено) Добрый день, ни как не могу разобраться выгрузка товаров с категориями и ценами проходит отлично, но не загружаются заказы с сайта в 1С. В административной панели сайта в разделе загрузка не работает кнопка "Настройка видов доставки для экспорта в заказы в ТС", может в этом проблема скрин приложил с настройками загрузки. 1С конфигурация УНФ 1.6, opencart 2.3. В логе 1С загрузки пишет "Фоновый обмен 24.08.2019 14:06:46 Запуск загрузки заказов Обработано: 0 Загружено: 0 Пропущено: 0 Обновлено: 0 Создано: 0 Обработано оплат: 0 Загружено оплат: 0 Пропущено оплат: 0 Обновлено оплат: 0 Создано оплат: 0 24.08.2019 14:06:47 Завершена загрузка заказов Дополнительная информация: Не удалось прочитать данные, загруженные с сервера." Змінено 24 серпня 2019 користувачем alkorf Надіслати Поділитися на інших сайтах More sharing options... ekaterinakryl86 Опубліковано: 26 серпня 2019 Share Опубліковано: 26 серпня 2019 Всем добрый день, у меня такой вопрос: выгружаю товар по свойствам ( размер и цвет ) - продукция выгружается, все хорошо, но когда выгружается заказ в 1с, к товару не приписываются хар-ки (размер, цвет) в чем может быть проблема ? Надіслати Поділитися на інших сайтах More sharing options... leskurs Опубліковано: 27 серпня 2019 Share Опубліковано: 27 серпня 2019 Вопрос к автору по заказам, можно ли как то выгрузить заказы с 2-3 разными статусами, а не только с одним? Надіслати Поділитися на інших сайтах More sharing options... DeGe Опубліковано: 28 серпня 2019 Share Опубліковано: 28 серпня 2019 Здравствуйте! Могли бы помочь, нужен образец выгрузки orders.xml с несколькими заказами. Надіслати Поділитися на інших сайтах More sharing options... Kirillove Опубліковано: 28 серпня 2019 Автор Share Опубліковано: 28 серпня 2019 (змінено) Спойлер В 24.08.2019 в 16:03, alkorf сказал: Добрый день, ни как не могу разобраться выгрузка товаров с категориями и ценами проходит отлично, но не загружаются заказы с сайта в 1С. В административной панели сайта в разделе загрузка не работает кнопка "Настройка видов доставки для экспорта в заказы в ТС", может в этом проблема скрин приложил с настройками загрузки. 1С конфигурация УНФ 1.6, opencart 2.3. В логе 1С загрузки пишет "Фоновый обмен 24.08.2019 14:06:46 Запуск загрузки заказов Обработано: 0 Загружено: 0 Пропущено: 0 Обновлено: 0 Создано: 0 Обработано оплат: 0 Загружено оплат: 0 Пропущено оплат: 0 Обновлено оплат: 0 Создано оплат: 0 24.08.2019 14:06:47 Завершена загрузка заказов Дополнительная информация: Не удалось прочитать данные, загруженные с сервера." В версии 1.6.4.7 заказы выгружаются по статусу и если дата заказа больше периода выгрузки заказов. Для проверки можно выгрузить заказы из админки, если файл пустой, значит не попали под эти условия. Змінено 28 серпня 2019 користувачем Kirillove Надіслати Поділитися на інших сайтах More sharing options... Kirillove Опубліковано: 28 серпня 2019 Автор Share Опубліковано: 28 серпня 2019 В 28.08.2019 в 00:20, leskurs сказал: Вопрос к автору по заказам, можно ли как то выгрузить заказы с 2-3 разными статусами, а не только с одним? Нужна доработка, а можно статус выгрузки установить не использовать, тогда будут выгружаться заказы созданные или измененные после "Периода выгрузки заказов". Дата эта автоматически обновляется на время последнего успешного обмена заказами. Успешным считается есть 1С ответит "success" Надіслати Поділитися на інших сайтах More sharing options... Kirillove Опубліковано: 28 серпня 2019 Автор Share Опубліковано: 28 серпня 2019 В 13.08.2019 в 04:15, zack сказал: При добавлении данного кода - ошибка 500 на странице карточки товара. В логах ничего не появляется. К сожалению такое у себя нет времени реализовывать, 1.6.4.7 версия уже тоже архивная, но рабочая, использую у себя ее для обмена с УНФ. Склады идея хорошая, но требовала доработок, может в сентябре найду время, на Вашем сайте могу попробовать внедрить этот код. Надіслати Поділитися на інших сайтах More sharing options... Kirillove Опубліковано: 28 серпня 2019 Автор Share Опубліковано: 28 серпня 2019 (змінено) 1 час назад, DeGe сказал: Здравствуйте! Могли бы помочь, нужен образец выгрузки orders.xml с несколькими заказами. orders (6).xml Нашел такой, но он старый, для УНФ может не прокатить, УТ11 либо УТ10 схавать должна Посмотрел еще раз файл... он для УТ11 Змінено 28 серпня 2019 користувачем Kirillove Надіслати Поділитися на інших сайтах More sharing options... DeGe Опубліковано: 28 серпня 2019 Share Опубліковано: 28 серпня 2019 (змінено) 59 минут назад, Kirillove сказал: orders (6).xml 6 \u043a\u0411 · 0 downloads Нашел такой, но он старый, для УНФ может не прокатить, УТ11 либо УТ10 схавать должна Посмотрел еще раз файл... он для УТ11 Спасибо! Мне дали образец из 1С там такая строчка <КоммерческаяИнформация xmlns="urn:1C.ru:commerceml_2" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" ВерсияСхемы="2.09" ДатаФормирования="2018-02-05T13:26:04" Ид="1"> Это говорит о том, какая версия УТ используется? Мне сообщили, что стоит УНФ 1.6 Змінено 28 серпня 2019 користувачем DeGe Надіслати Поділитися на інших сайтах More sharing options... leskurs Опубліковано: 29 серпня 2019 Share Опубліковано: 29 серпня 2019 (змінено) В 28.08.2019 в 01:20, leskurs сказал: Вопрос к автору по заказам, можно ли как то выгрузить заказы с 2-3 разными статусами, а не только с одним? в общем кому надо изменения в 2 файлах admin/controller/extension/module/exchange1c.php export/exchange1c.php в изменения не вникал, оплачено Автору, можно добавить в релиз controller-exchange1c.php export-exchange1c.php Змінено 29 серпня 2019 користувачем leskurs Надіслати Поділитися на інших сайтах More sharing options... 3 р dinox changed the title to Модуль обмена для opencart v2.3 с учетной системой по стандарту CommerceML [Поддержка] Назад 135 136 137 138 139 140 141 142 143 144 145 Вперед Сторінка 140 з 205 Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 40 Перейти до списку тем Схожі публікації batch [Поддержка] Универсальный массовый редактор товаров. MULTIEDIT AI 1 2 3 4 11 Автор: Sha, 16 березня 2017 top sale (і ще %d) Теги: top sale chat gpt pro атрибуты опции массовое редактирование editor products скидки мета мета-теги пакетное редактирование товаров админка групповое массовое массовая продукты быстрое изменение добавление добавить цена цены опций акции управление статус обработка категорий премиум групповая скидка товар стоимость валюта прайс price акция категория корзина продажа продажи баллы отзывы статьи галерея заказ быстрый обновление цены ocmod atribute модели автодополнение снипеты скорость модуль блоки форма product наполнение интернетмагазина обновление товар опции в категории универсальный рекомендуем opencart фильтр filter регистрация опция изменить товары категории производители українською українська chatgpt chatbots multi multiedit search replace replacer find search and replace find and replace edit seo faq seo faq filter products filter opencart filter for brands filter for products filter pro filteroc ocfilter oc filter open openai opencart ai ai opencart new 253 відповіді 58 024 перегляди Sha В неділю в 21:25 batch Універсальний масовий редактор товарів. MultiEdit AI Автор: Sha, 15 березня 2017 top sale (і ще %d) Теги: top sale chat gpt pro атрибуты опции массовое редактирование editor products скидки мета мета-теги пакетное редактирование товаров админка групповое массовое массовая продукты быстрое изменение добавление добавить цена цены опций акции управление статус обработка категорий премиум групповая скидка товар стоимость валюта прайс price акция категория корзина продажа продажи баллы отзывы статьи галерея заказ быстрый обновление цены ocmod atribute модели автодополнение снипеты скорость модуль блоки форма product наполнение интернетмагазина обновление товар опции в категории универсальный рекомендуем opencart фильтр filter регистрация опция изменить товары категории производители українською українська chatgpt chatbots multi multiedit search replace replacer find search and replace find and replace edit seo faq seo faq filter products filter opencart filter for brands filter for products filter pro filteroc ocfilter oc filter open openai opencart ai ai opencart new 0 коментарів 57 355 переглядів Sha 15 березня 2017 new [Поддержка] Multi-Helper. Clear cache, refresh ocmod, Help install modules! Автор: Sha, 10 березня 2020 clear cache (і ще %d) Теги: clear cache ocmod multi helper installer modules 8 відповідей 1 060 переглядів spectre 17 березня 2020 new Multi-Helper. Clear cache, refresh ocmod, Help install modules! Автор: Sha, 10 березня 2020 clear cache (і ще %d) Теги: clear cache ocmod multi helper installer modules 0 коментарів 4 825 переглядів Sha 10 березня 2020 фикс [Поддержка] Фикс переполнения лога модификаторов Автор: kabantejay, 7 червня 2023 ocmod модификатор (і ще %d) Теги: ocmod модификатор лог modification log fix 8 відповідей 443 перегляди kabantejay 9 червня 2023 Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку Последние темы Последние дополнения Последние новости Вся активність Головна Підтримка та відповіді на запитання. Модулі та розширення Модули обмена данными Модуль Модуль обмена для opencart v2.3 по стандарту CommerceML [Поддержка] Покупцям Оплата розширень фізичними особами Оплата розширень юридичними особами Політика повернень Розробникам Регламент розміщення розширень Регламент продажу та підтримки розширень Віртуальний обліковий запис автора Політика просування оголошень API каталогу розширень Вирішення спорів щодо авторських прав Корисна інформація Публічна оферта Політика повернень Політика конфіденційності Платіжна політика Політика передачі особистих даних Політика прозорості Останні розширення Повний пакет SEO Автор: GeekoDev SameSite Session Fix Opencart 3 Автор: web_bond SP Telegram повідомлення FREE Автор: spectre Відключити порожні категорії Автор: spectre SEO Автор тексту категорії / фільтра / блогу з датою оновлення контенту + мікророзмітка Автор: radaevich × Уже зареєстровані? Ввійти Реєстрація Ваші замовлення Назад Придбані модулі та шаблони Ваші рахунки Лист очікувань Альтернативні контакти Форум Новини ocStore Назад Офіційний сайт Демо ocStore 3.0.3.2 Демо ocStore 2.3.0.2.4 Завантажити ocStore Документація Історія версій ocStore Блоги Модулі Шаблони Назад Безкоштовні шаблони Платні шаблони Де купувати модулі? Послуги FAQ OpenCart.Pro Назад Демо Купити Порівняння × Створити... Important Information На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність. Я даю згоду
Kirillove Опубліковано: 28 липня 2019 Автор Share Опубліковано: 28 липня 2019 (змінено) С мультиязычной загрузкой вопрос встал... У всех по разному реализовано, необходимо в XML применить один стандарт.. Для этого в начале файла, нужно будет указать что в файле присутствуют несколько языков, и должны быть перечислены. и далее элементы должны быть снабжены атрибутами lang, например: <Наименование lang="ru">Для ноутбуков</Наименование> Пока мне такая идея пришла в голову. В общем такое решение проанализировал и понял что оно самое подходящее, и решил его включить в версию 2.0 Поддержка характеристик тоже будет мультиязычным. Змінено 28 липня 2019 користувачем Kirillove Надіслати Поділитися на інших сайтах More sharing options... gladky Опубліковано: 28 липня 2019 Share Опубліковано: 28 липня 2019 5 часов назад, Kirillove сказал: Проверьте настройки 1С у вас настроен там один обмен? У нас МойСклад, там только 1 обмен Надіслати Поділитися на інших сайтах More sharing options... zack Опубліковано: 3 серпня 2019 Share Опубліковано: 3 серпня 2019 Вопрос возник. Как можно доработать модуль для работы со складами? Что-то вроде загрузки в свойства. Хочу свойством выводить адрес магазин. Но как мне туда заливать данные по остаткам? Нужно реализовать мульти-складскую систему. Однако громоздить другим модулем - смысла нету, поскольку в моем случае все заказы обрабатывает оператор.И в 1С распределяет как надо. Надіслати Поділитися на інших сайтах More sharing options... Kirillove Опубліковано: 4 серпня 2019 Автор Share Опубліковано: 4 серпня 2019 22 часа назад, zack сказал: Вопрос возник. Как можно доработать модуль для работы со складами? Что-то вроде загрузки в свойства. Хочу свойством выводить адрес магазин. Но как мне туда заливать данные по остаткам? Нужно реализовать мульти-складскую систему. Однако громоздить другим модулем - смысла нету, поскольку в моем случае все заказы обрабатывает оператор.И в 1С распределяет как надо. Самое главное чтобы 1С поддерживала такую загрузку, у Вас какая конфигурация 1С? Надіслати Поділитися на інших сайтах More sharing options... Zelimkhan Опубліковано: 5 серпня 2019 Share Опубліковано: 5 серпня 2019 (змінено) Здравствуйте. Имеются товары с опциями, где каждая опция имеет свой остаток. С помощью этого модуля возможно брать опции с 1с вместе со своими остатками? Если в 1с нет возможности указать остаток для опций, то при дописании такой функции, можно будет настроить данный модуль под него. Готов рассмотреть платную доработку Змінено 5 серпня 2019 користувачем Zelimkhan Надіслати Поділитися на інших сайтах More sharing options... zack Опубліковано: 6 серпня 2019 Share Опубліковано: 6 серпня 2019 В 04.08.2019 в 19:58, Kirillove сказал: Самое главное чтобы 1С поддерживала такую загрузку, у Вас какая конфигурация 1С? УНФ. Если надо - могу модуль битрикса прикрутить Надіслати Поділитися на інших сайтах More sharing options... herminator Опубліковано: 6 серпня 2019 Share Опубліковано: 6 серпня 2019 (змінено) В 24.07.2019 в 03:30, Kirillove сказал: Исправление в 1.6.4.7 (SEO генерация по кнопке) файл /admin/model/extension/exchange1c.php Данная статья будет продублирована в разделе исправление ошибок версии 1.6.4.7 на офсайте Показать контент /** * ver 5 * update 2019-07-24 * Генерит SEO переменные шаблона для товара */ public function seoGenerate() { $now = date('Y-m-d H:i:s'); $result = array( 'error' => '', 'product' => 0, 'category' => 0, 'manufacturer' => 0 ); if (empty($this->TAB_FIELDS)) { $this->TAB_FIELDS = $this->defineTableFields(); } $language_id = $this->getLanguageId($this->config->get('config_language')); if ($this->config->get('exchange1c_seo_product_mode') != 'disable') { // Выбрать все товары, нужны поля: // name, sku, model, manufacturer_id, description, product_id, category_id $no_update_description = array(); if (isset($this->TAB_FIELDS['product_description']['meta_h1'])) { $sql = "SELECT p.product_id, p.sku, p.model, p.manufacturer_id, pd.name, pd.tag, pd.meta_title, pd.meta_description, pd.meta_keyword, pd.meta_h1 FROM `" . DB_PREFIX . "product` p LEFT JOIN `" . DB_PREFIX . "product_description` pd ON (p.product_id = pd.product_id) WHERE pd.language_id = " . $language_id; } else { $sql = "SELECT p.product_id, p.sku, p.model, p.manufacturer_id, pd.name, pd.tag, pd.meta_title, pd.meta_description, pd.meta_keyword FROM `" . DB_PREFIX . "product` p LEFT JOIN `" . DB_PREFIX . "product_description` pd ON (p.product_id = pd.product_id) WHERE pd.language_id = " . $language_id; array_push($no_update_description, 'meta_h1'); } $query = $this->query($sql); if ($query->num_rows) { foreach ($query->rows as $data) { $this->log($data, 2); $result['product']++; $data_old = $data; if ($this->config->get('exchange1c_seo_product_mode') != 'disable') $update = $this->seoGenerateProduct($data['product_id'], $data); $this->log($update, 2); if (!$update) { $this->log("Нечего обновлять!", 2); continue; } // Сравнение $update_fields = $this->compareArraysData($update, $data_old); // Если есть что обновлять if ($update_fields) { $sql_set = $this->prepareQuery($update_fields, 'set'); $this->query( "UPDATE `" . DB_PREFIX . "product_description` SET " . $sql_set . " WHERE `product_id` = " . (int)$data['product_id'] . " AND `language_id` = " . $language_id ); } } } } // Категории if ($this->config->get('exchange1c_seo_category_mode') != 'disable') { // Выбрать все категории, нужны поля: // name, sku, model, manufacturer_id, description, product_id, category_id $no_update_description = array(); if (isset($this->TAB_FIELDS['category_description']['meta_h1'])) { $sql = "SELECT c.category_id, cd.name, cd.meta_title, cd.meta_description, cd.meta_keyword, cd.meta_h1 FROM `" . DB_PREFIX . "category` c LEFT JOIN `" . DB_PREFIX . "category_description` cd ON (c.category_id = cd.category_id) WHERE cd.language_id = " . $language_id; } else { $sql = "SELECT c.category_id, cd.name, cd.meta_title, cd.meta_description, cd.meta_keyword FROM `" . DB_PREFIX . "category` c LEFT JOIN `" . DB_PREFIX . "category_description` cd ON (c.category_id = cd.category_id) WHERE cd.language_id = " . $language_id; array_push($no_update_description, 'meta_h1'); } $query = $this->query($sql); if ($query->num_rows) { foreach ($query->rows as $data) { $result['category']++; if ($this->config->get('exchange1c_seo_category_mode') != 'disable') $this->seoGenerateCategory($data['category_id'], $data); // Сравнение $update_fields = $this->compareArraysData($data_old, $data, $no_update_description); // Если есть что обновлять if ($update_fields) { $sql_set = $this->prepareQuery($update_fields, 'set'); $this->query( "UPDATE `" . DB_PREFIX . "category_description` SET " . $sql_set . " WHERE `category_id` = " . (int)$data['category_id'] . " AND `language_id` = " . $language_id ); $this->query( "UPDATE `" . DB_PREFIX . "category` SET `date_modified` = '" . $now . "' WHERE `category_id` = " . (int)$data['category_id'] ); } } } } // Производители if ($this->config->get('exchange1c_seo_manufacturer_mode') != 'disable') { if (isset($this->TAB_FIELDS['manufacturer_description'])) { // Выбрать все категории, нужны поля: // name, sku, model, manufacturer_id, description, product_id, category_id $no_update_description = array(); if (isset($this->TAB_FIELDS['manufacturer_description']['meta_h1'])) { $sql = "SELECT m.manufacturer_id, md.name, md.meta_title, md.meta_description, md.meta_keyword, md.meta_h1 FROM `" . DB_PREFIX . "manufacturer` m LEFT JOIN `" . DB_PREFIX . "manufacturer_description` md ON (m.manufacturer_id = md.manufacturer_id) WHERE md.language_id = " . $language_id; } else { $sql = "SELECT m.manufacturer_id, md.name, md.meta_title, md.meta_description, md.meta_keyword FROM `" . DB_PREFIX . "manufacturer` m LEFT JOIN `" . DB_PREFIX . "manufacturer_description` md ON (m.manufacturer_id = md.manufacturer_id) WHERE md.language_id = " . $language_id; array_push($no_update_description, 'meta_h1'); } $query = $this->query($sql); if ($query->num_rows) { foreach ($query->rows as $data) { $result['manufacturer']++; $data_old = $data; if ($this->config->get('exchange1c_seo_manufacturer_mode') != 'disable') $update = $this->seoGenerateManufacturer($data['manufacturer_id'], $data); if (!$update) continue; // Сравнение $update_fields = $this->compareArraysData($data_old, $data, $no_update_description); // Если есть что обновлять if ($update_fields) { $sql_set = $this->prepareQuery($update_fields, 'set'); $this->query( "UPDATE `" . DB_PREFIX . "category_description` SET " . $sql_set . " WHERE `category_id` = " . (int)$data['category_id'] . " AND `language_id` = " . $language_id ); $this->query( "UPDATE `" . DB_PREFIX . "category` SET `date_modified` = '" . $now . "' WHERE `category_id` = " . (int)$data['category_id'] ); } } } } } return $result; } // seoGenerate() Не вдаваясь в подробности, это не работает. Разбирать почему - нет ни сил, ни желания. Может быть кому-то пригодится мой рабочий вариант (+прямое добавление цены в паттерны, что неправильно, но меня устраивает, как добавить - писал ранее): Спойлер /** * ver 5 * update 2018-06-14 * Генерит SEO переменные шаблона для товара * С версии 4 функция теперь не читает данные из базы */ private function seoGenerateProduct($product_id, $data) { $result = array(); // Определение дополнительных полей $this->TAB_FIELDS = $this->config->get('exchange1c_table_fields'); // Товары, Категории $seo_fields = array(); if (isset($this->TAB_FIELDS['product_description']['meta_title'])) { $seo_fields[] = 'meta_title'; } if (isset($this->TAB_FIELDS['product_description']['meta_description'])) { $seo_fields[] = 'meta_description'; } if (isset($this->TAB_FIELDS['product_description']['meta_keyword'])) { $seo_fields[] = 'meta_keyword'; } //$this->log($this->TAB_FIELDS, 2); $data['price'] = strtok((float)$data['price'], '.'); // Сопоставляем значения к паттернам $tags = array( '{name}' => isset($data['name']) ? $data['name'] : '', '{sku}' => isset($data['sku']) ? $data['sku'] : '', '{model}' => isset($data['model']) ? $data['model'] : '', '{price}' => isset($data['price']) ? $data['price'] : '', '{brand}' => isset($data['manufacturer']) ? $data['manufacturer']['name'] : '', '{cats}' => $this->getProductCategoriesString($product_id), '{prod_id}' => isset($product_id) ? $product_id : '', '{cat_id}' => isset($data['category_id']) ? $data['category_id'] : '' ); if (isset($this->TAB_FIELDS['product_description']['meta_h1'])) { $seo_fields[] = 'meta_h1'; } // Формируем массив с замененными значениями foreach ($seo_fields as $field) { $template = ''; if ($this->config->get('exchange1c_seo_product_'.$field) == 'template') { $template = $this->config->get('exchange1c_seo_product_'.$field.'_template'); // Если выбран шаблон, но он пустой, пропускаем if (!$template) { $this->log("Шаблон пустой - пропускаем"); continue; } if ($this->config->get('exchange1c_seo_product_mode') == 'overwrite') { // Перезаписывать if ($field == 'meta_keyword' || $field == 'tag') { $value = $this->seoGenerateString($template, $tags, false, true); } else { $value = $this->seoGenerateString($template, $tags); } // Если вдруг по каким-либо причинам это поле отсутствует, будем считать что оно есть, но пустое // Вот тут может быть когда-либо ошибка... if (!isset($data[$field])) { $data[$field] = ""; } // Если поле не изменилось, нет смысла его перезаписывать if ($value == $data[$field]) { $this->log("Поле '" . $field . "' не изменилось: " . $data[$field], 2); continue; } // Нужно обновить поле $this->log("Поле: '" . $field . "' старое: '" . $data[$field] . "', новое: '" . $value . "'", 2); $result[$field] = $value; } else { // Только если поле пустое if (empty($data[$field])) { $value = $this->seoGenerateString($template, $tags); $this->log("Поле: '" . $field . "' старое: '" . $data[$field] . "', новое: '" . $value . "'", 2); $result[$field] = $value; } else { $this->log("Пропускаем '" . $field . "', т.к. не пустое: '" . $data[$field] . "'", 2); } } } else { $this->log("Шаблон для поля '" . $field . "' не найден!"); continue; } } if ($this->config->get('exchange1c_seo_product_seo_url') == 'template') { // Сформируем SEO URL $template = $this->config->get('exchange1c_seo_product_seo_url_template'); $keyword = $this->seoGenerateString($template, $tags, true); // Получим старый SeoUrl $seo_url = $this->getSeoUrl("product_id", $product_id); // обновляем если только были изменения if ($this->config->get('exchange1c_seo_product_mode') == 'overwrite' || ($this->config->get('exchange1c_seo_product_mode') == 'if_empty' && empty($seo_url['keyword']))) { if ($seo_url['keyword'] != $keyword) { $this->setSeoURL('product_id', $product_id, $keyword, $seo_url); } } } $this->log("SEO товара обновлено полей: " . count($result)); return $result; } // seoGenerateProduct() /** * ver 6 * update 2018-06-14 * Генерит SEO переменные шаблона для категории */ private function seoGenerateCategory($category_id, &$data) { $seo_fields = array( 'meta_title', 'meta_description', 'meta_keyword' ); if (isset($this->TAB_FIELDS['category_description']['meta_h1'])) { $seo_fields[] = 'meta_h1'; } // Сопоставляем значения к паттернам $tags = array( '{cat}' => isset($data['name']) ? $data['name'] : '', '{cat_id}' => $category_id ); // Формируем массив с замененными значениями foreach ($seo_fields as $field) { if (!isset($data[$field])) { $data[$field] = ""; } if ($this->config->get('exchange1c_seo_category_'.$field) == 'template') { // Если включено формирование по шаблону $template = $this->config->get('exchange1c_seo_category_'.$field.'_template'); // Если выбран шаблон, но он пустой, пропускаем if (!$template) { unset($data[$field]); continue; } if ($this->config->get('exchange1c_seo_category_mode') == 'overwrite') { // Перезаписывать $value = $this->seoGenerateString($template, $tags); // Если поле не изменилось, нет смысла его перезаписывать if ($value == $data[$field]) { $this->log("Поле '" . $field . "' не изменилось: " . $data[$field], 2); unset($data[$field]); continue; } // Нужно обновить поле $this->log("Поле: '" . $field . "' старое: '" . $data[$field] . "', новое: '" . $value . "', шаблон: " . $template, 2); $data[$field] = $value; } elseif ($this->config->get('exchange1c_seo_category_mode') == 'if_empty' && empty($data[$field])) { // Только если поле пустое $value = $this->seoGenerateString($template, $tags); $this->log("Поле: '" . $field . "' старое: '" . $data[$field] . "', новое: '" . $value . "'", 2); $data[$field] = $value; } else { unset($data[$field]); } } else { // Не изменяем это поле unset($data[$field]); continue; } } // foreach if ($this->config->get('exchange1c_seo_category_seo_url') == 'template') { // Сформируем SEO URL $template = $this->config->get('exchange1c_seo_category_seo_url_template'); $keyword = $this->seoGenerateString($template, $tags, true); // Получим старый SeoUrl $seo_url = $this->getSeoUrl("category_id", $category_id); // обновляем если только были изменения if ($this->config->get('exchange1c_seo_category_mode') == 'overwrite' || ($this->config->get('exchange1c_seo_category_mode') == 'if_empty' && empty($seo_url['keyword']))) { if ($seo_url['keyword'] != $keyword) { $this->setSeoURL('category_id', $category_id, $keyword, $seo_url); } } } $this->log("Сформировано SEO для категории"); } // seoGenerateCategory() /** * ver 10 * update 2018-06-14 * Генерит SEO переменные шаблона для производетеля */ private function seoGenerateManufacturer($manufacturer_id, &$data) { if (!isset($this->TAB_FIELDS['manufacturer_description'])) { $this->log("В базе отсутствует таблица manufacturer_description, SEO не будет сформировано"); return false; } $seo_fields = array(); if (isset($this->TAB_FIELDS['manufacturer_description'])) { if (isset($this->TAB_FIELDS['manufacturer_description']['meta_h1'])) { $seo_fields[] = 'meta_h1'; } if (isset($this->TAB_FIELDS['manufacturer_description']['meta_title'])) { $seo_fields[] = 'meta_title'; } if (isset($this->TAB_FIELDS['manufacturer_description']['meta_description'])) { $seo_fields[] = 'meta_description'; } if (isset($this->TAB_FIELDS['manufacturer_description']['meta_keyword'])) { $seo_fields[] = 'meta_keyword'; } // Получим поля для сравнения $fields = implode($seo_fields,', '); $query = $this->query("SELECT " . $fields . " FROM `" . DB_PREFIX . "manufacturer_description` WHERE `manufacturer_id` = " . (int)$manufacturer_id . " AND `language_id` = " . $this->LANG_ID); foreach ($seo_fields as $field) { $data[$field] = isset($query->row[$field]) ? $query->row[$field] : ""; } } // Сопоставляем значения к тегам $tags = array( '{brand}' => isset($data['name']) ? $data['name'] : '', '{brand_id}' => (string)$manufacturer_id ); $update = false; // Формируем массив с замененными значениями foreach ($seo_fields as $field) { $template = ''; if ($this->config->get('exchange1c_seo_manufacturer_' . $field) == 'template') { $template = $this->config->get('exchange1c_seo_manufacturer_' . $field . '_template'); if (!$template) { unset($data[$field]); continue; } if ($this->config->get('exchange1c_seo_manufacturer_mode') == 'overwrite') { // Перезаписывать $value = $this->seoGenerateString($template, $tags); // Если поле не изменилось, нет смысла его перезаписывать if ($value == $data[$field]) { $this->log("Поле '" . $field . "' не изменилось: " . $data[$field], 2); unset($data[$field]); continue; } // Нужно обновить поле $this->log("Поле: '" . $field . "' старое: '" . $data[$field] . "', новое: '" . $value . "'", 2); $data[$field] = $value; $update = true; } else { // Только если поле пустое if (empty($data[$field])) { $value = $this->seoGenerateString($template, $tags); $this->log("Поле: '" . $field . "' старое: '" . $data[$field] . "', новое: '" . $value . "'", 2); $data[$field] = $value; $update = true; } else { $this->log("Пропускаем '" . $field . "', т.к. не пустое: '" . $data[$field] . "'", 2); unset($data[$field]); } } } else { // Не изменяем это поле unset($data[$field]); continue; } } if ($this->config->get('exchange1c_seo_manufacturer_seo_url') == 'template') { // Сформируем SEO URL $template = $this->config->get('exchange1c_seo_manufacturer_seo_url_template'); $keyword = $this->seoGenerateString($template, $tags, true); // Получим старый SeoUrl $seo_url = $this->getSeoUrl("manufacturer_id", $manufacturer_id); // обновляем если только были изменения if ($this->config->get('exchange1c_seo_manufacturer_mode') == 'overwrite' || ($this->config->get('exchange1c_seo_manufacturer_mode') == 'if_empty' && empty($seo_url['keyword']))) { if ($seo_url['keyword'] != $keyword) { $this->setSeoURL('manufacturer_id', $manufacturer_id, $keyword, $seo_url); } } } $this->log("Сформировано SEO для производителя"); } // seoGenerateManufacturer() /** * ver 4 * update 2018-06-14 * Генерит SEO переменные шаблона для товара */ public function seoGenerate() { $now = date('Y-m-d H:i:s'); $result = array( 'error' => '', 'product' => 0, 'category' => 0, 'manufacturer' => 0 ); $language_id = $this->getLanguageId($this->config->get('config_language')); if ($this->config->get('exchange1c_seo_product_mode') != 'disable') { // Выбрать все товары, нужны поля: // name, sku, model, manufacturer_id, description, product_id, category_id $no_update_description = array(); if (isset($this->TAB_FIELDS['product_description']['meta_h1'])) { $sql = "SELECT `p`.`product_id`, `p`.`sku`, `p`.`model`, `p`.`price`, `p`.`manufacturer_id`, `pd`.`name`, `pd`.`tag`, `pd`.`meta_title`, `pd`.`meta_description`, `pd`.`meta_keyword`, `pd`.`meta_h1` FROM `" . DB_PREFIX . "product` `p` LEFT JOIN `" . DB_PREFIX . "product_description` `pd` ON (`p`.`product_id` = `pd`.`product_id`) WHERE `pd.`language_id` = " . $language_id; } else { $sql = "SELECT `p`.`product_id`, `p`.`sku`, `p`.`model`, `p`.`price`, `p`.`manufacturer_id`, `pd`.`name`, `pd`.`tag`, `pd`.`meta_title`, `pd`.`meta_description`, `pd`.`meta_keyword` FROM `" . DB_PREFIX . "product` `p` LEFT JOIN `" . DB_PREFIX . "product_description` `pd` ON (`p`.`product_id` = `pd`.`product_id`) WHERE `pd`.`language_id` = " . $language_id; array_push($no_update_description, 'meta_h1'); } $query = $this->query($sql); if ($query->num_rows) { foreach ($query->rows as $data) { $result['product']++; if ($this->config->get('exchange1c_seo_product_mode') != 'disable') $update = $this->seoGenerateProduct($data['product_id'], $data); if (!$update) continue; // Сравнение $no_update = array('sku','model','manufacturer_id'); $update_fields = $this->compareArraysData($update, $data, $no_update); // Если есть что обновлять if ($update_fields) { $sql_set = $this->prepareQuery($update_fields, 'set'); $this->query("UPDATE `" . DB_PREFIX . "product` SET " . $sql_set . ", `date_modified` = '" . $now . "' WHERE `product_id` = " . (int)$data['product_id']); } // Сравнение $update_fields = $this->compareArraysData($update, $data, $no_update_description); // Если есть что обновлять if ($update_fields) { $sql_set = $this->prepareQuery($update_fields, 'set'); $this->query("UPDATE `" . DB_PREFIX . "product_description` SET " . $sql_set . " WHERE `product_id` = " . (int)$data['product_id'] . " AND `language_id` = " . $language_id); } } } } // Категории if ($this->config->get('exchange1c_seo_category_mode') != 'disable') { // Выбрать все категории, нужны поля: // name, sku, model, manufacturer_id, description, product_id, category_id $no_update_description = array(); if (isset($this->TAB_FIELDS['category_description']['meta_h1'])) { $sql = "SELECT `c`.`category_id`, `cd`.`name`, `cd`.`meta_title`, `cd`.`meta_description`, `cd`.`meta_keyword`, `cd`.`meta_h1` FROM `" . DB_PREFIX . "category` `c` LEFT JOIN `" . DB_PREFIX . "category_description` `cd` ON (`c`.`category_id` = `cd`.`category_id`) WHERE `cd`.`language_id` = " . $language_id; } else { $sql = "SELECT `c`.`category_id`, `cd`.`name`, `cd`.`meta_title`, `cd`.`meta_description`, `cd`.`meta_keyword` FROM `" . DB_PREFIX . "category` `c` LEFT JOIN `" . DB_PREFIX . "category_description` `cd` ON (`c`.`category_id` = `cd`.`category_id`) WHERE `cd`.`language_id` = " . $language_id; array_push($no_update_description, 'meta_h1'); } $query = $this->query($sql); if ($query->num_rows) { foreach ($query->rows as $data) { $result['category']++; $data_old = $data; if ($this->config->get('exchange1c_seo_category_mode') != 'disable') $this->seoGenerateCategory($data['category_id'], $data); // Сравнение $update_fields = $this->compareArraysData($data, $data_old, $no_update_description); // Если есть что обновлять if ($update_fields) { $sql_set = $this->prepareQuery($update_fields, 'set'); $this->query("UPDATE `" . DB_PREFIX . "category_description` SET " . $sql_set . " WHERE `category_id` = " . (int)$data['category_id'] . " AND `language_id` = " . $language_id); $this->query("UPDATE `" . DB_PREFIX . "category` SET `date_modified` = '" . $now . "' WHERE `category_id` = " . (int)$data['category_id']); } } } } // Производители if ($this->config->get('exchange1c_seo_manufacturer_mode') != 'disable') { if (isset($this->TAB_FIELDS['manufacturer_description']['meta_h1'])) { // Выбрать все категории, нужны поля: // name, sku, model, manufacturer_id, description, product_id, category_id $no_update_description = array(); if (isset($this->TAB_FIELDS['manufacturer_description']['meta_h1'])) { $sql = "SELECT `m`.`manufacturer_id`, `m`.`name`, `md`.`meta_title`, `md`.`meta_description`, `md`.`meta_keyword`, `md`.`meta_h1` FROM `" . DB_PREFIX . "manufacturer` `m` LEFT JOIN `" . DB_PREFIX . "manufacturer_description` `md` ON (`m`.`manufacturer_id` = `md`.`manufacturer_id`) WHERE `md`.`language_id` = " . $language_id; } else { $sql = "SELECT `m`.`manufacturer_id`, `m`.`name`, `md`.`meta_title`, `md`.`meta_description`, `md`.`meta_keyword` FROM `" . DB_PREFIX . "manufacturer` `m` LEFT JOIN `" . DB_PREFIX . "manufacturer_description` `md` ON (`m`.`manufacturer_id` = `md`.`manufacturer_id`) WHERE `md`.`language_id` = " . $language_id; array_push($no_update_description, 'meta_h1'); } $query = $this->query($sql); if ($query->num_rows) { foreach ($query->rows as $data) { $result['manufacturer']++; $data_old = $data; if ($this->config->get('exchange1c_seo_manufacturer_mode') != 'disable') $this->seoGenerateManufacturer($data['manufacturer_id'], $data); $update_fields = $this->compareArraysData($data, $data_old, $no_update_description); // Если есть что обновлять if ($update_fields) { $this->log("Обновляю поля SEO для производителя."); $sql_set = $this->prepareQuery($update_fields, 'set'); $this->query("UPDATE `" . DB_PREFIX . "manufacturer_description` SET " . $sql_set . " WHERE `manufacturer_id` = " . (int)$data['manufacturer_id'] . " AND `language_id` = " . $language_id); $this->query("UPDATE `" . DB_PREFIX . "manufacturer` SET `date_modified` = '" . $now . "' WHERE `manufacturer_id` = " . (int)$data['manufacturer_id']); }else{ $this->log("Поля SEO для производителя не изменились."); } } } } } return $result; } // seoGenerate() Расписыванием внесённых правок нет желания заниматься. Кто захочет - сравнит исходники. Змінено 6 серпня 2019 користувачем herminator Надіслати Поділитися на інших сайтах More sharing options... webnet Опубліковано: 9 серпня 2019 Share Опубліковано: 9 серпня 2019 Подскажите, можно ли отключить обновление названий категорий при импорте из 1С на сайт через ваш модуль? Хотелось бы указать свои названия категорий на сайте, но при импорте они все равно меняются на названия, которые в 1С. Надіслати Поділитися на інших сайтах More sharing options... zack Опубліковано: 9 серпня 2019 Share Опубліковано: 9 серпня 2019 /catalog/controller/product/category.php Скрыть контент $this->data['products'][] = array( 'product_id' => $result['product_id'], 'thumb' => $image, 'sku' => $result['sku'], 'mpn' => $result['mpn'], 'quantity' => $result['quantity'], // получим остатки по складам 'quantity_warehouse' => $this->model_catalog_product->getProductQuantity($result['product_id']), 'discount' => $discounts, 'stock_status'=> $result['stock_status'], 'name' => $result['name'], 'description' => utf8_substr(strip_tags(html_entity_decode($result['description'], ENT_QUOTES, 'UTF-8')), 0, 100) . '', 'price' => $price, 'special' => $special, 'tax' => $tax, 'rating' => $result['rating'], 'reviews' => sprintf($this->language->get('text_reviews'), (int)$result['reviews']), 'href' => $this->url->link('product/product', 'path=' . $this->request->get['path'] . '&product_id=' . $result['product_id'] . $url) ); } в шаблоне у меня выглядит так (в разных шаблонах по-разному, но смысл одинаковый) Скрыть контент <?php if (isset($product['quantity_warehouse'])) { ?> <div> <?php $pq_style = $product['quantity'] ? ' style="color: #00AA00;"' : ' style="color: #FF0000;"'?> <?php foreach ($product['quantity_warehouse'] as $qw => $quantity_warehouse) { if ($quantity_warehouse['quantity'] > 0) { ?> <div><span<?php echo $pq_style ?> title="<?php echo 'Наличие на складе '.$quantity_warehouse['name'] ?>"> <?php echo 'Склад "'.$quantity_warehouse['name']. '" ' . $quantity_warehouse['quantity'] . ' шт'; ?></span></div> <?php } else {?> <div><span style="color: #FF0000;" title="Нет в наличии"><?php echo $product['stock_status']; ?></span></div> <?php } ?> <?php } ?> </div> <?php } ?> теперь в карточке товара: Скрыть контент /catalog/controller/product/product.php меняем текст: if ($product_info['quantity'] <= 0) { $this->data['stock'] = $product_info['stock_status']; } elseif ($this->config->get('config_stock_display')) { $this->data['stock'] = $product_info['quantity']; } else { $this->data['stock'] = $this->language->get('text_instock'); } на if ($product_info['quantity'] <= 0) { $this->data['stock'] = $product_info['stock_status']; } elseif ($this->config->get('config_stock_display')) { $this->data['stock'] = $product_info['quantity']; } else { $this->data['stock'] = $this->language->get('text_instock'); } $this->data['quantity_warehouse'] = $this->model_catalog_product->getProductQuantity($this->request->get['product_id']); функция getProductQuantity() содержит следующие строки: Скрыть контент public function getProductQuantity($product_id) { $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "product_quantity pq JOIN " . DB_PREFIX . "warehouse w ON (pq.warehouse_id = w.warehouse_id) WHERE pq.product_id = '" . (int)$product_id . "'"); return $query->rows; } Как такое реализовать на Opencart 2.3.0.2 Версия модуля 1.6.4.5 Надіслати Поділитися на інших сайтах More sharing options... zack Опубліковано: 12 серпня 2019 Share Опубліковано: 12 серпня 2019 В 09.08.2019 в 19:53, zack сказал: /catalog/controller/product/category.php Скрыть контент $this->data['products'][] = array( 'product_id' => $result['product_id'], 'thumb' => $image, 'sku' => $result['sku'], 'mpn' => $result['mpn'], 'quantity' => $result['quantity'], // получим остатки по складам 'quantity_warehouse' => $this->model_catalog_product->getProductQuantity($result['product_id']), 'discount' => $discounts, 'stock_status'=> $result['stock_status'], 'name' => $result['name'], 'description' => utf8_substr(strip_tags(html_entity_decode($result['description'], ENT_QUOTES, 'UTF-8')), 0, 100) . '', 'price' => $price, 'special' => $special, 'tax' => $tax, 'rating' => $result['rating'], 'reviews' => sprintf($this->language->get('text_reviews'), (int)$result['reviews']), 'href' => $this->url->link('product/product', 'path=' . $this->request->get['path'] . '&product_id=' . $result['product_id'] . $url) ); } в шаблоне у меня выглядит так (в разных шаблонах по-разному, но смысл одинаковый) Показать контент <?php if (isset($product['quantity_warehouse'])) { ?> <div> <?php $pq_style = $product['quantity'] ? ' style="color: #00AA00;"' : ' style="color: #FF0000;"'?> <?php foreach ($product['quantity_warehouse'] as $qw => $quantity_warehouse) { if ($quantity_warehouse['quantity'] > 0) { ?> <div><span<?php echo $pq_style ?> title="<?php echo 'Наличие на складе '.$quantity_warehouse['name'] ?>"> <?php echo 'Склад "'.$quantity_warehouse['name']. '" ' . $quantity_warehouse['quantity'] . ' шт'; ?></span></div> <?php } else {?> <div><span style="color: #FF0000;" title="Нет в наличии"><?php echo $product['stock_status']; ?></span></div> <?php } ?> <?php } ?> </div> <?php } ?> теперь в карточке товара: Показать контент /catalog/controller/product/product.php меняем текст: if ($product_info['quantity'] <= 0) { $this->data['stock'] = $product_info['stock_status']; } elseif ($this->config->get('config_stock_display')) { $this->data['stock'] = $product_info['quantity']; } else { $this->data['stock'] = $this->language->get('text_instock'); } на if ($product_info['quantity'] <= 0) { $this->data['stock'] = $product_info['stock_status']; } elseif ($this->config->get('config_stock_display')) { $this->data['stock'] = $product_info['quantity']; } else { $this->data['stock'] = $this->language->get('text_instock'); } $this->data['quantity_warehouse'] = $this->model_catalog_product->getProductQuantity($this->request->get['product_id']); функция getProductQuantity() содержит следующие строки: Скрыть контент public function getProductQuantity($product_id) { $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "product_quantity pq JOIN " . DB_PREFIX . "warehouse w ON (pq.warehouse_id = w.warehouse_id) WHERE pq.product_id = '" . (int)$product_id . "'"); return $query->rows; } Как такое реализовать на Opencart 2.3.0.2 Версия модуля 1.6.4.5 При добавлении данного кода - ошибка 500 на странице карточки товара. В логах ничего не появляется. Надіслати Поділитися на інших сайтах More sharing options... Ryazanov Опубліковано: 20 серпня 2019 Share Опубліковано: 20 серпня 2019 Добрый день! Версия ocStore 2.3.0.2.3 и модуль версия 1.6.4.7 ни как не хот\т видеть друг друга. 1с УТ 2.3 (это для Украины конфигурация), т.е. база не видит модуль, пишет ошибка пользователя и пароль неверный, что не в водили, хотя если ставить ниже версию модуля 1c_1.6.3.11, то и при пустых полях пользователя и пароля нормально работает. В чем может быть причина? В настройках модуля, где выбор платформы выбирали и УНФ, и УТ 11 и 10, все равно не хотят дружить Спасибо. (Модуль и более старой версии подходил бы, но есть некоторые косячки: в базе есть категории пустые, в которых нет товаров, а они на сайте все равно есть, не скрываются, например, а это важно!!!) Надіслати Поділитися на інших сайтах More sharing options... marcus201832 Опубліковано: 21 серпня 2019 Share Опубліковано: 21 серпня 2019 14 часов назад, Ryazanov сказал: Добрый день! Версия ocStore 2.3.0.2.3 и модуль версия 1.6.4.7 ни как не хот\т видеть друг друга. 1с УТ 2.3 (это для Украины конфигурация), т.е. база не видит модуль, пишет ошибка пользователя и пароль неверный, что не в водили, хотя если ставить ниже версию модуля 1c_1.6.3.11, то и при пустых полях пользователя и пароля нормально работает. В чем может быть причина? В настройках модуля, где выбор платформы выбирали и УНФ, и УТ 11 и 10, все равно не хотят дружить Спасибо. (Модуль и более старой версии подходил бы, но есть некоторые косячки: в базе есть категории пустые, в которых нет товаров, а они на сайте все равно есть, не скрываются, например, а это важно!!!) В файле .htaccess эту запись указывали? RewriteRule .* - [E=REMOTE_USER:%{HTTP:Authorization},L] Надіслати Поділитися на інших сайтах More sharing options... Ryazanov Опубліковано: 22 серпня 2019 Share Опубліковано: 22 серпня 2019 В 21.08.2019 в 07:35, marcus201832 сказал: В файле .htaccess эту запись указывали? RewriteRule .* - [E=REMOTE_USER:%{HTTP:Authorization},L] Добрый день! Версия ocStore 2.3.0.2.3 и модуль версия 1.6.4.7 ни как не хот\т видеть друг друга. 1с УТ 2.3 (это для Украины конфигурация), т.е. база не видит модуль, пишет ошибка пользователя и пароль неверный, что не в водили, хотя если ставить ниже версию модуля 1c_1.6.3.11, то и при пустых полях пользователя и пароля нормально работает. В чем может быть причина? В настройках модуля, где выбор платформы выбирали и УНФ, и УТ 11 и 10, все равно не хотят дружить Спасибо. (Модуль и более старой версии подходил бы, но есть некоторые косячки: в базе есть категории пустые, в которых нет товаров, а они на сайте все равно есть, не скрываются, например, а это важно!!!) В 21.08.2019 в 07:35, marcus201832 сказал: В файле .htaccess эту запись указывали? RewriteRule .* - [E=REMOTE_USER:%{HTTP:Authorization},L] нет, а надо? Надіслати Поділитися на інших сайтах More sharing options... alkorf Опубліковано: 24 серпня 2019 Share Опубліковано: 24 серпня 2019 (змінено) Добрый день, ни как не могу разобраться выгрузка товаров с категориями и ценами проходит отлично, но не загружаются заказы с сайта в 1С. В административной панели сайта в разделе загрузка не работает кнопка "Настройка видов доставки для экспорта в заказы в ТС", может в этом проблема скрин приложил с настройками загрузки. 1С конфигурация УНФ 1.6, opencart 2.3. В логе 1С загрузки пишет "Фоновый обмен 24.08.2019 14:06:46 Запуск загрузки заказов Обработано: 0 Загружено: 0 Пропущено: 0 Обновлено: 0 Создано: 0 Обработано оплат: 0 Загружено оплат: 0 Пропущено оплат: 0 Обновлено оплат: 0 Создано оплат: 0 24.08.2019 14:06:47 Завершена загрузка заказов Дополнительная информация: Не удалось прочитать данные, загруженные с сервера." Змінено 24 серпня 2019 користувачем alkorf Надіслати Поділитися на інших сайтах More sharing options... ekaterinakryl86 Опубліковано: 26 серпня 2019 Share Опубліковано: 26 серпня 2019 Всем добрый день, у меня такой вопрос: выгружаю товар по свойствам ( размер и цвет ) - продукция выгружается, все хорошо, но когда выгружается заказ в 1с, к товару не приписываются хар-ки (размер, цвет) в чем может быть проблема ? Надіслати Поділитися на інших сайтах More sharing options... leskurs Опубліковано: 27 серпня 2019 Share Опубліковано: 27 серпня 2019 Вопрос к автору по заказам, можно ли как то выгрузить заказы с 2-3 разными статусами, а не только с одним? Надіслати Поділитися на інших сайтах More sharing options... DeGe Опубліковано: 28 серпня 2019 Share Опубліковано: 28 серпня 2019 Здравствуйте! Могли бы помочь, нужен образец выгрузки orders.xml с несколькими заказами. Надіслати Поділитися на інших сайтах More sharing options... Kirillove Опубліковано: 28 серпня 2019 Автор Share Опубліковано: 28 серпня 2019 (змінено) Спойлер В 24.08.2019 в 16:03, alkorf сказал: Добрый день, ни как не могу разобраться выгрузка товаров с категориями и ценами проходит отлично, но не загружаются заказы с сайта в 1С. В административной панели сайта в разделе загрузка не работает кнопка "Настройка видов доставки для экспорта в заказы в ТС", может в этом проблема скрин приложил с настройками загрузки. 1С конфигурация УНФ 1.6, opencart 2.3. В логе 1С загрузки пишет "Фоновый обмен 24.08.2019 14:06:46 Запуск загрузки заказов Обработано: 0 Загружено: 0 Пропущено: 0 Обновлено: 0 Создано: 0 Обработано оплат: 0 Загружено оплат: 0 Пропущено оплат: 0 Обновлено оплат: 0 Создано оплат: 0 24.08.2019 14:06:47 Завершена загрузка заказов Дополнительная информация: Не удалось прочитать данные, загруженные с сервера." В версии 1.6.4.7 заказы выгружаются по статусу и если дата заказа больше периода выгрузки заказов. Для проверки можно выгрузить заказы из админки, если файл пустой, значит не попали под эти условия. Змінено 28 серпня 2019 користувачем Kirillove Надіслати Поділитися на інших сайтах More sharing options... Kirillove Опубліковано: 28 серпня 2019 Автор Share Опубліковано: 28 серпня 2019 В 28.08.2019 в 00:20, leskurs сказал: Вопрос к автору по заказам, можно ли как то выгрузить заказы с 2-3 разными статусами, а не только с одним? Нужна доработка, а можно статус выгрузки установить не использовать, тогда будут выгружаться заказы созданные или измененные после "Периода выгрузки заказов". Дата эта автоматически обновляется на время последнего успешного обмена заказами. Успешным считается есть 1С ответит "success" Надіслати Поділитися на інших сайтах More sharing options... Kirillove Опубліковано: 28 серпня 2019 Автор Share Опубліковано: 28 серпня 2019 В 13.08.2019 в 04:15, zack сказал: При добавлении данного кода - ошибка 500 на странице карточки товара. В логах ничего не появляется. К сожалению такое у себя нет времени реализовывать, 1.6.4.7 версия уже тоже архивная, но рабочая, использую у себя ее для обмена с УНФ. Склады идея хорошая, но требовала доработок, может в сентябре найду время, на Вашем сайте могу попробовать внедрить этот код. Надіслати Поділитися на інших сайтах More sharing options... Kirillove Опубліковано: 28 серпня 2019 Автор Share Опубліковано: 28 серпня 2019 (змінено) 1 час назад, DeGe сказал: Здравствуйте! Могли бы помочь, нужен образец выгрузки orders.xml с несколькими заказами. orders (6).xml Нашел такой, но он старый, для УНФ может не прокатить, УТ11 либо УТ10 схавать должна Посмотрел еще раз файл... он для УТ11 Змінено 28 серпня 2019 користувачем Kirillove Надіслати Поділитися на інших сайтах More sharing options... DeGe Опубліковано: 28 серпня 2019 Share Опубліковано: 28 серпня 2019 (змінено) 59 минут назад, Kirillove сказал: orders (6).xml 6 \u043a\u0411 · 0 downloads Нашел такой, но он старый, для УНФ может не прокатить, УТ11 либо УТ10 схавать должна Посмотрел еще раз файл... он для УТ11 Спасибо! Мне дали образец из 1С там такая строчка <КоммерческаяИнформация xmlns="urn:1C.ru:commerceml_2" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" ВерсияСхемы="2.09" ДатаФормирования="2018-02-05T13:26:04" Ид="1"> Это говорит о том, какая версия УТ используется? Мне сообщили, что стоит УНФ 1.6 Змінено 28 серпня 2019 користувачем DeGe Надіслати Поділитися на інших сайтах More sharing options... leskurs Опубліковано: 29 серпня 2019 Share Опубліковано: 29 серпня 2019 (змінено) В 28.08.2019 в 01:20, leskurs сказал: Вопрос к автору по заказам, можно ли как то выгрузить заказы с 2-3 разными статусами, а не только с одним? в общем кому надо изменения в 2 файлах admin/controller/extension/module/exchange1c.php export/exchange1c.php в изменения не вникал, оплачено Автору, можно добавить в релиз controller-exchange1c.php export-exchange1c.php Змінено 29 серпня 2019 користувачем leskurs Надіслати Поділитися на інших сайтах More sharing options... 3 р dinox changed the title to Модуль обмена для opencart v2.3 с учетной системой по стандарту CommerceML [Поддержка] Назад 135 136 137 138 139 140 141 142 143 144 145 Вперед Сторінка 140 з 205 Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 40 Перейти до списку тем Схожі публікації batch [Поддержка] Универсальный массовый редактор товаров. MULTIEDIT AI 1 2 3 4 11 Автор: Sha, 16 березня 2017 top sale (і ще %d) Теги: top sale chat gpt pro атрибуты опции массовое редактирование editor products скидки мета мета-теги пакетное редактирование товаров админка групповое массовое массовая продукты быстрое изменение добавление добавить цена цены опций акции управление статус обработка категорий премиум групповая скидка товар стоимость валюта прайс price акция категория корзина продажа продажи баллы отзывы статьи галерея заказ быстрый обновление цены ocmod atribute модели автодополнение снипеты скорость модуль блоки форма product наполнение интернетмагазина обновление товар опции в категории универсальный рекомендуем opencart фильтр filter регистрация опция изменить товары категории производители українською українська chatgpt chatbots multi multiedit search replace replacer find search and replace find and replace edit seo faq seo faq filter products filter opencart filter for brands filter for products filter pro filteroc ocfilter oc filter open openai opencart ai ai opencart new 253 відповіді 58 024 перегляди Sha В неділю в 21:25 batch Універсальний масовий редактор товарів. MultiEdit AI Автор: Sha, 15 березня 2017 top sale (і ще %d) Теги: top sale chat gpt pro атрибуты опции массовое редактирование editor products скидки мета мета-теги пакетное редактирование товаров админка групповое массовое массовая продукты быстрое изменение добавление добавить цена цены опций акции управление статус обработка категорий премиум групповая скидка товар стоимость валюта прайс price акция категория корзина продажа продажи баллы отзывы статьи галерея заказ быстрый обновление цены ocmod atribute модели автодополнение снипеты скорость модуль блоки форма product наполнение интернетмагазина обновление товар опции в категории универсальный рекомендуем opencart фильтр filter регистрация опция изменить товары категории производители українською українська chatgpt chatbots multi multiedit search replace replacer find search and replace find and replace edit seo faq seo faq filter products filter opencart filter for brands filter for products filter pro filteroc ocfilter oc filter open openai opencart ai ai opencart new 0 коментарів 57 355 переглядів Sha 15 березня 2017 new [Поддержка] Multi-Helper. Clear cache, refresh ocmod, Help install modules! Автор: Sha, 10 березня 2020 clear cache (і ще %d) Теги: clear cache ocmod multi helper installer modules 8 відповідей 1 060 переглядів spectre 17 березня 2020 new Multi-Helper. Clear cache, refresh ocmod, Help install modules! Автор: Sha, 10 березня 2020 clear cache (і ще %d) Теги: clear cache ocmod multi helper installer modules 0 коментарів 4 825 переглядів Sha 10 березня 2020 фикс [Поддержка] Фикс переполнения лога модификаторов Автор: kabantejay, 7 червня 2023 ocmod модификатор (і ще %d) Теги: ocmod модификатор лог modification log fix 8 відповідей 443 перегляди kabantejay 9 червня 2023 Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку Последние темы Последние дополнения Последние новости Вся активність Головна Підтримка та відповіді на запитання. Модулі та розширення Модули обмена данными Модуль Модуль обмена для opencart v2.3 по стандарту CommerceML [Поддержка] Покупцям Оплата розширень фізичними особами Оплата розширень юридичними особами Політика повернень Розробникам Регламент розміщення розширень Регламент продажу та підтримки розширень Віртуальний обліковий запис автора Політика просування оголошень API каталогу розширень Вирішення спорів щодо авторських прав Корисна інформація Публічна оферта Політика повернень Політика конфіденційності Платіжна політика Політика передачі особистих даних Політика прозорості Останні розширення Повний пакет SEO Автор: GeekoDev SameSite Session Fix Opencart 3 Автор: web_bond SP Telegram повідомлення FREE Автор: spectre Відключити порожні категорії Автор: spectre SEO Автор тексту категорії / фільтра / блогу з датою оновлення контенту + мікророзмітка Автор: radaevich × Уже зареєстровані? Ввійти Реєстрація Ваші замовлення Назад Придбані модулі та шаблони Ваші рахунки Лист очікувань Альтернативні контакти Форум Новини ocStore Назад Офіційний сайт Демо ocStore 3.0.3.2 Демо ocStore 2.3.0.2.4 Завантажити ocStore Документація Історія версій ocStore Блоги Модулі Шаблони Назад Безкоштовні шаблони Платні шаблони Де купувати модулі? Послуги FAQ OpenCart.Pro Назад Демо Купити Порівняння × Створити... Important Information На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність. Я даю згоду
gladky Опубліковано: 28 липня 2019 Share Опубліковано: 28 липня 2019 5 часов назад, Kirillove сказал: Проверьте настройки 1С у вас настроен там один обмен? У нас МойСклад, там только 1 обмен Надіслати Поділитися на інших сайтах More sharing options...
zack Опубліковано: 3 серпня 2019 Share Опубліковано: 3 серпня 2019 Вопрос возник. Как можно доработать модуль для работы со складами? Что-то вроде загрузки в свойства. Хочу свойством выводить адрес магазин. Но как мне туда заливать данные по остаткам? Нужно реализовать мульти-складскую систему. Однако громоздить другим модулем - смысла нету, поскольку в моем случае все заказы обрабатывает оператор.И в 1С распределяет как надо. Надіслати Поділитися на інших сайтах More sharing options...
Kirillove Опубліковано: 4 серпня 2019 Автор Share Опубліковано: 4 серпня 2019 22 часа назад, zack сказал: Вопрос возник. Как можно доработать модуль для работы со складами? Что-то вроде загрузки в свойства. Хочу свойством выводить адрес магазин. Но как мне туда заливать данные по остаткам? Нужно реализовать мульти-складскую систему. Однако громоздить другим модулем - смысла нету, поскольку в моем случае все заказы обрабатывает оператор.И в 1С распределяет как надо. Самое главное чтобы 1С поддерживала такую загрузку, у Вас какая конфигурация 1С? Надіслати Поділитися на інших сайтах More sharing options... Zelimkhan Опубліковано: 5 серпня 2019 Share Опубліковано: 5 серпня 2019 (змінено) Здравствуйте. Имеются товары с опциями, где каждая опция имеет свой остаток. С помощью этого модуля возможно брать опции с 1с вместе со своими остатками? Если в 1с нет возможности указать остаток для опций, то при дописании такой функции, можно будет настроить данный модуль под него. Готов рассмотреть платную доработку Змінено 5 серпня 2019 користувачем Zelimkhan Надіслати Поділитися на інших сайтах More sharing options... zack Опубліковано: 6 серпня 2019 Share Опубліковано: 6 серпня 2019 В 04.08.2019 в 19:58, Kirillove сказал: Самое главное чтобы 1С поддерживала такую загрузку, у Вас какая конфигурация 1С? УНФ. Если надо - могу модуль битрикса прикрутить Надіслати Поділитися на інших сайтах More sharing options... herminator Опубліковано: 6 серпня 2019 Share Опубліковано: 6 серпня 2019 (змінено) В 24.07.2019 в 03:30, Kirillove сказал: Исправление в 1.6.4.7 (SEO генерация по кнопке) файл /admin/model/extension/exchange1c.php Данная статья будет продублирована в разделе исправление ошибок версии 1.6.4.7 на офсайте Показать контент /** * ver 5 * update 2019-07-24 * Генерит SEO переменные шаблона для товара */ public function seoGenerate() { $now = date('Y-m-d H:i:s'); $result = array( 'error' => '', 'product' => 0, 'category' => 0, 'manufacturer' => 0 ); if (empty($this->TAB_FIELDS)) { $this->TAB_FIELDS = $this->defineTableFields(); } $language_id = $this->getLanguageId($this->config->get('config_language')); if ($this->config->get('exchange1c_seo_product_mode') != 'disable') { // Выбрать все товары, нужны поля: // name, sku, model, manufacturer_id, description, product_id, category_id $no_update_description = array(); if (isset($this->TAB_FIELDS['product_description']['meta_h1'])) { $sql = "SELECT p.product_id, p.sku, p.model, p.manufacturer_id, pd.name, pd.tag, pd.meta_title, pd.meta_description, pd.meta_keyword, pd.meta_h1 FROM `" . DB_PREFIX . "product` p LEFT JOIN `" . DB_PREFIX . "product_description` pd ON (p.product_id = pd.product_id) WHERE pd.language_id = " . $language_id; } else { $sql = "SELECT p.product_id, p.sku, p.model, p.manufacturer_id, pd.name, pd.tag, pd.meta_title, pd.meta_description, pd.meta_keyword FROM `" . DB_PREFIX . "product` p LEFT JOIN `" . DB_PREFIX . "product_description` pd ON (p.product_id = pd.product_id) WHERE pd.language_id = " . $language_id; array_push($no_update_description, 'meta_h1'); } $query = $this->query($sql); if ($query->num_rows) { foreach ($query->rows as $data) { $this->log($data, 2); $result['product']++; $data_old = $data; if ($this->config->get('exchange1c_seo_product_mode') != 'disable') $update = $this->seoGenerateProduct($data['product_id'], $data); $this->log($update, 2); if (!$update) { $this->log("Нечего обновлять!", 2); continue; } // Сравнение $update_fields = $this->compareArraysData($update, $data_old); // Если есть что обновлять if ($update_fields) { $sql_set = $this->prepareQuery($update_fields, 'set'); $this->query( "UPDATE `" . DB_PREFIX . "product_description` SET " . $sql_set . " WHERE `product_id` = " . (int)$data['product_id'] . " AND `language_id` = " . $language_id ); } } } } // Категории if ($this->config->get('exchange1c_seo_category_mode') != 'disable') { // Выбрать все категории, нужны поля: // name, sku, model, manufacturer_id, description, product_id, category_id $no_update_description = array(); if (isset($this->TAB_FIELDS['category_description']['meta_h1'])) { $sql = "SELECT c.category_id, cd.name, cd.meta_title, cd.meta_description, cd.meta_keyword, cd.meta_h1 FROM `" . DB_PREFIX . "category` c LEFT JOIN `" . DB_PREFIX . "category_description` cd ON (c.category_id = cd.category_id) WHERE cd.language_id = " . $language_id; } else { $sql = "SELECT c.category_id, cd.name, cd.meta_title, cd.meta_description, cd.meta_keyword FROM `" . DB_PREFIX . "category` c LEFT JOIN `" . DB_PREFIX . "category_description` cd ON (c.category_id = cd.category_id) WHERE cd.language_id = " . $language_id; array_push($no_update_description, 'meta_h1'); } $query = $this->query($sql); if ($query->num_rows) { foreach ($query->rows as $data) { $result['category']++; if ($this->config->get('exchange1c_seo_category_mode') != 'disable') $this->seoGenerateCategory($data['category_id'], $data); // Сравнение $update_fields = $this->compareArraysData($data_old, $data, $no_update_description); // Если есть что обновлять if ($update_fields) { $sql_set = $this->prepareQuery($update_fields, 'set'); $this->query( "UPDATE `" . DB_PREFIX . "category_description` SET " . $sql_set . " WHERE `category_id` = " . (int)$data['category_id'] . " AND `language_id` = " . $language_id ); $this->query( "UPDATE `" . DB_PREFIX . "category` SET `date_modified` = '" . $now . "' WHERE `category_id` = " . (int)$data['category_id'] ); } } } } // Производители if ($this->config->get('exchange1c_seo_manufacturer_mode') != 'disable') { if (isset($this->TAB_FIELDS['manufacturer_description'])) { // Выбрать все категории, нужны поля: // name, sku, model, manufacturer_id, description, product_id, category_id $no_update_description = array(); if (isset($this->TAB_FIELDS['manufacturer_description']['meta_h1'])) { $sql = "SELECT m.manufacturer_id, md.name, md.meta_title, md.meta_description, md.meta_keyword, md.meta_h1 FROM `" . DB_PREFIX . "manufacturer` m LEFT JOIN `" . DB_PREFIX . "manufacturer_description` md ON (m.manufacturer_id = md.manufacturer_id) WHERE md.language_id = " . $language_id; } else { $sql = "SELECT m.manufacturer_id, md.name, md.meta_title, md.meta_description, md.meta_keyword FROM `" . DB_PREFIX . "manufacturer` m LEFT JOIN `" . DB_PREFIX . "manufacturer_description` md ON (m.manufacturer_id = md.manufacturer_id) WHERE md.language_id = " . $language_id; array_push($no_update_description, 'meta_h1'); } $query = $this->query($sql); if ($query->num_rows) { foreach ($query->rows as $data) { $result['manufacturer']++; $data_old = $data; if ($this->config->get('exchange1c_seo_manufacturer_mode') != 'disable') $update = $this->seoGenerateManufacturer($data['manufacturer_id'], $data); if (!$update) continue; // Сравнение $update_fields = $this->compareArraysData($data_old, $data, $no_update_description); // Если есть что обновлять if ($update_fields) { $sql_set = $this->prepareQuery($update_fields, 'set'); $this->query( "UPDATE `" . DB_PREFIX . "category_description` SET " . $sql_set . " WHERE `category_id` = " . (int)$data['category_id'] . " AND `language_id` = " . $language_id ); $this->query( "UPDATE `" . DB_PREFIX . "category` SET `date_modified` = '" . $now . "' WHERE `category_id` = " . (int)$data['category_id'] ); } } } } } return $result; } // seoGenerate() Не вдаваясь в подробности, это не работает. Разбирать почему - нет ни сил, ни желания. Может быть кому-то пригодится мой рабочий вариант (+прямое добавление цены в паттерны, что неправильно, но меня устраивает, как добавить - писал ранее): Спойлер /** * ver 5 * update 2018-06-14 * Генерит SEO переменные шаблона для товара * С версии 4 функция теперь не читает данные из базы */ private function seoGenerateProduct($product_id, $data) { $result = array(); // Определение дополнительных полей $this->TAB_FIELDS = $this->config->get('exchange1c_table_fields'); // Товары, Категории $seo_fields = array(); if (isset($this->TAB_FIELDS['product_description']['meta_title'])) { $seo_fields[] = 'meta_title'; } if (isset($this->TAB_FIELDS['product_description']['meta_description'])) { $seo_fields[] = 'meta_description'; } if (isset($this->TAB_FIELDS['product_description']['meta_keyword'])) { $seo_fields[] = 'meta_keyword'; } //$this->log($this->TAB_FIELDS, 2); $data['price'] = strtok((float)$data['price'], '.'); // Сопоставляем значения к паттернам $tags = array( '{name}' => isset($data['name']) ? $data['name'] : '', '{sku}' => isset($data['sku']) ? $data['sku'] : '', '{model}' => isset($data['model']) ? $data['model'] : '', '{price}' => isset($data['price']) ? $data['price'] : '', '{brand}' => isset($data['manufacturer']) ? $data['manufacturer']['name'] : '', '{cats}' => $this->getProductCategoriesString($product_id), '{prod_id}' => isset($product_id) ? $product_id : '', '{cat_id}' => isset($data['category_id']) ? $data['category_id'] : '' ); if (isset($this->TAB_FIELDS['product_description']['meta_h1'])) { $seo_fields[] = 'meta_h1'; } // Формируем массив с замененными значениями foreach ($seo_fields as $field) { $template = ''; if ($this->config->get('exchange1c_seo_product_'.$field) == 'template') { $template = $this->config->get('exchange1c_seo_product_'.$field.'_template'); // Если выбран шаблон, но он пустой, пропускаем if (!$template) { $this->log("Шаблон пустой - пропускаем"); continue; } if ($this->config->get('exchange1c_seo_product_mode') == 'overwrite') { // Перезаписывать if ($field == 'meta_keyword' || $field == 'tag') { $value = $this->seoGenerateString($template, $tags, false, true); } else { $value = $this->seoGenerateString($template, $tags); } // Если вдруг по каким-либо причинам это поле отсутствует, будем считать что оно есть, но пустое // Вот тут может быть когда-либо ошибка... if (!isset($data[$field])) { $data[$field] = ""; } // Если поле не изменилось, нет смысла его перезаписывать if ($value == $data[$field]) { $this->log("Поле '" . $field . "' не изменилось: " . $data[$field], 2); continue; } // Нужно обновить поле $this->log("Поле: '" . $field . "' старое: '" . $data[$field] . "', новое: '" . $value . "'", 2); $result[$field] = $value; } else { // Только если поле пустое if (empty($data[$field])) { $value = $this->seoGenerateString($template, $tags); $this->log("Поле: '" . $field . "' старое: '" . $data[$field] . "', новое: '" . $value . "'", 2); $result[$field] = $value; } else { $this->log("Пропускаем '" . $field . "', т.к. не пустое: '" . $data[$field] . "'", 2); } } } else { $this->log("Шаблон для поля '" . $field . "' не найден!"); continue; } } if ($this->config->get('exchange1c_seo_product_seo_url') == 'template') { // Сформируем SEO URL $template = $this->config->get('exchange1c_seo_product_seo_url_template'); $keyword = $this->seoGenerateString($template, $tags, true); // Получим старый SeoUrl $seo_url = $this->getSeoUrl("product_id", $product_id); // обновляем если только были изменения if ($this->config->get('exchange1c_seo_product_mode') == 'overwrite' || ($this->config->get('exchange1c_seo_product_mode') == 'if_empty' && empty($seo_url['keyword']))) { if ($seo_url['keyword'] != $keyword) { $this->setSeoURL('product_id', $product_id, $keyword, $seo_url); } } } $this->log("SEO товара обновлено полей: " . count($result)); return $result; } // seoGenerateProduct() /** * ver 6 * update 2018-06-14 * Генерит SEO переменные шаблона для категории */ private function seoGenerateCategory($category_id, &$data) { $seo_fields = array( 'meta_title', 'meta_description', 'meta_keyword' ); if (isset($this->TAB_FIELDS['category_description']['meta_h1'])) { $seo_fields[] = 'meta_h1'; } // Сопоставляем значения к паттернам $tags = array( '{cat}' => isset($data['name']) ? $data['name'] : '', '{cat_id}' => $category_id ); // Формируем массив с замененными значениями foreach ($seo_fields as $field) { if (!isset($data[$field])) { $data[$field] = ""; } if ($this->config->get('exchange1c_seo_category_'.$field) == 'template') { // Если включено формирование по шаблону $template = $this->config->get('exchange1c_seo_category_'.$field.'_template'); // Если выбран шаблон, но он пустой, пропускаем if (!$template) { unset($data[$field]); continue; } if ($this->config->get('exchange1c_seo_category_mode') == 'overwrite') { // Перезаписывать $value = $this->seoGenerateString($template, $tags); // Если поле не изменилось, нет смысла его перезаписывать if ($value == $data[$field]) { $this->log("Поле '" . $field . "' не изменилось: " . $data[$field], 2); unset($data[$field]); continue; } // Нужно обновить поле $this->log("Поле: '" . $field . "' старое: '" . $data[$field] . "', новое: '" . $value . "', шаблон: " . $template, 2); $data[$field] = $value; } elseif ($this->config->get('exchange1c_seo_category_mode') == 'if_empty' && empty($data[$field])) { // Только если поле пустое $value = $this->seoGenerateString($template, $tags); $this->log("Поле: '" . $field . "' старое: '" . $data[$field] . "', новое: '" . $value . "'", 2); $data[$field] = $value; } else { unset($data[$field]); } } else { // Не изменяем это поле unset($data[$field]); continue; } } // foreach if ($this->config->get('exchange1c_seo_category_seo_url') == 'template') { // Сформируем SEO URL $template = $this->config->get('exchange1c_seo_category_seo_url_template'); $keyword = $this->seoGenerateString($template, $tags, true); // Получим старый SeoUrl $seo_url = $this->getSeoUrl("category_id", $category_id); // обновляем если только были изменения if ($this->config->get('exchange1c_seo_category_mode') == 'overwrite' || ($this->config->get('exchange1c_seo_category_mode') == 'if_empty' && empty($seo_url['keyword']))) { if ($seo_url['keyword'] != $keyword) { $this->setSeoURL('category_id', $category_id, $keyword, $seo_url); } } } $this->log("Сформировано SEO для категории"); } // seoGenerateCategory() /** * ver 10 * update 2018-06-14 * Генерит SEO переменные шаблона для производетеля */ private function seoGenerateManufacturer($manufacturer_id, &$data) { if (!isset($this->TAB_FIELDS['manufacturer_description'])) { $this->log("В базе отсутствует таблица manufacturer_description, SEO не будет сформировано"); return false; } $seo_fields = array(); if (isset($this->TAB_FIELDS['manufacturer_description'])) { if (isset($this->TAB_FIELDS['manufacturer_description']['meta_h1'])) { $seo_fields[] = 'meta_h1'; } if (isset($this->TAB_FIELDS['manufacturer_description']['meta_title'])) { $seo_fields[] = 'meta_title'; } if (isset($this->TAB_FIELDS['manufacturer_description']['meta_description'])) { $seo_fields[] = 'meta_description'; } if (isset($this->TAB_FIELDS['manufacturer_description']['meta_keyword'])) { $seo_fields[] = 'meta_keyword'; } // Получим поля для сравнения $fields = implode($seo_fields,', '); $query = $this->query("SELECT " . $fields . " FROM `" . DB_PREFIX . "manufacturer_description` WHERE `manufacturer_id` = " . (int)$manufacturer_id . " AND `language_id` = " . $this->LANG_ID); foreach ($seo_fields as $field) { $data[$field] = isset($query->row[$field]) ? $query->row[$field] : ""; } } // Сопоставляем значения к тегам $tags = array( '{brand}' => isset($data['name']) ? $data['name'] : '', '{brand_id}' => (string)$manufacturer_id ); $update = false; // Формируем массив с замененными значениями foreach ($seo_fields as $field) { $template = ''; if ($this->config->get('exchange1c_seo_manufacturer_' . $field) == 'template') { $template = $this->config->get('exchange1c_seo_manufacturer_' . $field . '_template'); if (!$template) { unset($data[$field]); continue; } if ($this->config->get('exchange1c_seo_manufacturer_mode') == 'overwrite') { // Перезаписывать $value = $this->seoGenerateString($template, $tags); // Если поле не изменилось, нет смысла его перезаписывать if ($value == $data[$field]) { $this->log("Поле '" . $field . "' не изменилось: " . $data[$field], 2); unset($data[$field]); continue; } // Нужно обновить поле $this->log("Поле: '" . $field . "' старое: '" . $data[$field] . "', новое: '" . $value . "'", 2); $data[$field] = $value; $update = true; } else { // Только если поле пустое if (empty($data[$field])) { $value = $this->seoGenerateString($template, $tags); $this->log("Поле: '" . $field . "' старое: '" . $data[$field] . "', новое: '" . $value . "'", 2); $data[$field] = $value; $update = true; } else { $this->log("Пропускаем '" . $field . "', т.к. не пустое: '" . $data[$field] . "'", 2); unset($data[$field]); } } } else { // Не изменяем это поле unset($data[$field]); continue; } } if ($this->config->get('exchange1c_seo_manufacturer_seo_url') == 'template') { // Сформируем SEO URL $template = $this->config->get('exchange1c_seo_manufacturer_seo_url_template'); $keyword = $this->seoGenerateString($template, $tags, true); // Получим старый SeoUrl $seo_url = $this->getSeoUrl("manufacturer_id", $manufacturer_id); // обновляем если только были изменения if ($this->config->get('exchange1c_seo_manufacturer_mode') == 'overwrite' || ($this->config->get('exchange1c_seo_manufacturer_mode') == 'if_empty' && empty($seo_url['keyword']))) { if ($seo_url['keyword'] != $keyword) { $this->setSeoURL('manufacturer_id', $manufacturer_id, $keyword, $seo_url); } } } $this->log("Сформировано SEO для производителя"); } // seoGenerateManufacturer() /** * ver 4 * update 2018-06-14 * Генерит SEO переменные шаблона для товара */ public function seoGenerate() { $now = date('Y-m-d H:i:s'); $result = array( 'error' => '', 'product' => 0, 'category' => 0, 'manufacturer' => 0 ); $language_id = $this->getLanguageId($this->config->get('config_language')); if ($this->config->get('exchange1c_seo_product_mode') != 'disable') { // Выбрать все товары, нужны поля: // name, sku, model, manufacturer_id, description, product_id, category_id $no_update_description = array(); if (isset($this->TAB_FIELDS['product_description']['meta_h1'])) { $sql = "SELECT `p`.`product_id`, `p`.`sku`, `p`.`model`, `p`.`price`, `p`.`manufacturer_id`, `pd`.`name`, `pd`.`tag`, `pd`.`meta_title`, `pd`.`meta_description`, `pd`.`meta_keyword`, `pd`.`meta_h1` FROM `" . DB_PREFIX . "product` `p` LEFT JOIN `" . DB_PREFIX . "product_description` `pd` ON (`p`.`product_id` = `pd`.`product_id`) WHERE `pd.`language_id` = " . $language_id; } else { $sql = "SELECT `p`.`product_id`, `p`.`sku`, `p`.`model`, `p`.`price`, `p`.`manufacturer_id`, `pd`.`name`, `pd`.`tag`, `pd`.`meta_title`, `pd`.`meta_description`, `pd`.`meta_keyword` FROM `" . DB_PREFIX . "product` `p` LEFT JOIN `" . DB_PREFIX . "product_description` `pd` ON (`p`.`product_id` = `pd`.`product_id`) WHERE `pd`.`language_id` = " . $language_id; array_push($no_update_description, 'meta_h1'); } $query = $this->query($sql); if ($query->num_rows) { foreach ($query->rows as $data) { $result['product']++; if ($this->config->get('exchange1c_seo_product_mode') != 'disable') $update = $this->seoGenerateProduct($data['product_id'], $data); if (!$update) continue; // Сравнение $no_update = array('sku','model','manufacturer_id'); $update_fields = $this->compareArraysData($update, $data, $no_update); // Если есть что обновлять if ($update_fields) { $sql_set = $this->prepareQuery($update_fields, 'set'); $this->query("UPDATE `" . DB_PREFIX . "product` SET " . $sql_set . ", `date_modified` = '" . $now . "' WHERE `product_id` = " . (int)$data['product_id']); } // Сравнение $update_fields = $this->compareArraysData($update, $data, $no_update_description); // Если есть что обновлять if ($update_fields) { $sql_set = $this->prepareQuery($update_fields, 'set'); $this->query("UPDATE `" . DB_PREFIX . "product_description` SET " . $sql_set . " WHERE `product_id` = " . (int)$data['product_id'] . " AND `language_id` = " . $language_id); } } } } // Категории if ($this->config->get('exchange1c_seo_category_mode') != 'disable') { // Выбрать все категории, нужны поля: // name, sku, model, manufacturer_id, description, product_id, category_id $no_update_description = array(); if (isset($this->TAB_FIELDS['category_description']['meta_h1'])) { $sql = "SELECT `c`.`category_id`, `cd`.`name`, `cd`.`meta_title`, `cd`.`meta_description`, `cd`.`meta_keyword`, `cd`.`meta_h1` FROM `" . DB_PREFIX . "category` `c` LEFT JOIN `" . DB_PREFIX . "category_description` `cd` ON (`c`.`category_id` = `cd`.`category_id`) WHERE `cd`.`language_id` = " . $language_id; } else { $sql = "SELECT `c`.`category_id`, `cd`.`name`, `cd`.`meta_title`, `cd`.`meta_description`, `cd`.`meta_keyword` FROM `" . DB_PREFIX . "category` `c` LEFT JOIN `" . DB_PREFIX . "category_description` `cd` ON (`c`.`category_id` = `cd`.`category_id`) WHERE `cd`.`language_id` = " . $language_id; array_push($no_update_description, 'meta_h1'); } $query = $this->query($sql); if ($query->num_rows) { foreach ($query->rows as $data) { $result['category']++; $data_old = $data; if ($this->config->get('exchange1c_seo_category_mode') != 'disable') $this->seoGenerateCategory($data['category_id'], $data); // Сравнение $update_fields = $this->compareArraysData($data, $data_old, $no_update_description); // Если есть что обновлять if ($update_fields) { $sql_set = $this->prepareQuery($update_fields, 'set'); $this->query("UPDATE `" . DB_PREFIX . "category_description` SET " . $sql_set . " WHERE `category_id` = " . (int)$data['category_id'] . " AND `language_id` = " . $language_id); $this->query("UPDATE `" . DB_PREFIX . "category` SET `date_modified` = '" . $now . "' WHERE `category_id` = " . (int)$data['category_id']); } } } } // Производители if ($this->config->get('exchange1c_seo_manufacturer_mode') != 'disable') { if (isset($this->TAB_FIELDS['manufacturer_description']['meta_h1'])) { // Выбрать все категории, нужны поля: // name, sku, model, manufacturer_id, description, product_id, category_id $no_update_description = array(); if (isset($this->TAB_FIELDS['manufacturer_description']['meta_h1'])) { $sql = "SELECT `m`.`manufacturer_id`, `m`.`name`, `md`.`meta_title`, `md`.`meta_description`, `md`.`meta_keyword`, `md`.`meta_h1` FROM `" . DB_PREFIX . "manufacturer` `m` LEFT JOIN `" . DB_PREFIX . "manufacturer_description` `md` ON (`m`.`manufacturer_id` = `md`.`manufacturer_id`) WHERE `md`.`language_id` = " . $language_id; } else { $sql = "SELECT `m`.`manufacturer_id`, `m`.`name`, `md`.`meta_title`, `md`.`meta_description`, `md`.`meta_keyword` FROM `" . DB_PREFIX . "manufacturer` `m` LEFT JOIN `" . DB_PREFIX . "manufacturer_description` `md` ON (`m`.`manufacturer_id` = `md`.`manufacturer_id`) WHERE `md`.`language_id` = " . $language_id; array_push($no_update_description, 'meta_h1'); } $query = $this->query($sql); if ($query->num_rows) { foreach ($query->rows as $data) { $result['manufacturer']++; $data_old = $data; if ($this->config->get('exchange1c_seo_manufacturer_mode') != 'disable') $this->seoGenerateManufacturer($data['manufacturer_id'], $data); $update_fields = $this->compareArraysData($data, $data_old, $no_update_description); // Если есть что обновлять if ($update_fields) { $this->log("Обновляю поля SEO для производителя."); $sql_set = $this->prepareQuery($update_fields, 'set'); $this->query("UPDATE `" . DB_PREFIX . "manufacturer_description` SET " . $sql_set . " WHERE `manufacturer_id` = " . (int)$data['manufacturer_id'] . " AND `language_id` = " . $language_id); $this->query("UPDATE `" . DB_PREFIX . "manufacturer` SET `date_modified` = '" . $now . "' WHERE `manufacturer_id` = " . (int)$data['manufacturer_id']); }else{ $this->log("Поля SEO для производителя не изменились."); } } } } } return $result; } // seoGenerate() Расписыванием внесённых правок нет желания заниматься. Кто захочет - сравнит исходники. Змінено 6 серпня 2019 користувачем herminator Надіслати Поділитися на інших сайтах More sharing options... webnet Опубліковано: 9 серпня 2019 Share Опубліковано: 9 серпня 2019 Подскажите, можно ли отключить обновление названий категорий при импорте из 1С на сайт через ваш модуль? Хотелось бы указать свои названия категорий на сайте, но при импорте они все равно меняются на названия, которые в 1С. Надіслати Поділитися на інших сайтах More sharing options... zack Опубліковано: 9 серпня 2019 Share Опубліковано: 9 серпня 2019 /catalog/controller/product/category.php Скрыть контент $this->data['products'][] = array( 'product_id' => $result['product_id'], 'thumb' => $image, 'sku' => $result['sku'], 'mpn' => $result['mpn'], 'quantity' => $result['quantity'], // получим остатки по складам 'quantity_warehouse' => $this->model_catalog_product->getProductQuantity($result['product_id']), 'discount' => $discounts, 'stock_status'=> $result['stock_status'], 'name' => $result['name'], 'description' => utf8_substr(strip_tags(html_entity_decode($result['description'], ENT_QUOTES, 'UTF-8')), 0, 100) . '', 'price' => $price, 'special' => $special, 'tax' => $tax, 'rating' => $result['rating'], 'reviews' => sprintf($this->language->get('text_reviews'), (int)$result['reviews']), 'href' => $this->url->link('product/product', 'path=' . $this->request->get['path'] . '&product_id=' . $result['product_id'] . $url) ); } в шаблоне у меня выглядит так (в разных шаблонах по-разному, но смысл одинаковый) Скрыть контент <?php if (isset($product['quantity_warehouse'])) { ?> <div> <?php $pq_style = $product['quantity'] ? ' style="color: #00AA00;"' : ' style="color: #FF0000;"'?> <?php foreach ($product['quantity_warehouse'] as $qw => $quantity_warehouse) { if ($quantity_warehouse['quantity'] > 0) { ?> <div><span<?php echo $pq_style ?> title="<?php echo 'Наличие на складе '.$quantity_warehouse['name'] ?>"> <?php echo 'Склад "'.$quantity_warehouse['name']. '" ' . $quantity_warehouse['quantity'] . ' шт'; ?></span></div> <?php } else {?> <div><span style="color: #FF0000;" title="Нет в наличии"><?php echo $product['stock_status']; ?></span></div> <?php } ?> <?php } ?> </div> <?php } ?> теперь в карточке товара: Скрыть контент /catalog/controller/product/product.php меняем текст: if ($product_info['quantity'] <= 0) { $this->data['stock'] = $product_info['stock_status']; } elseif ($this->config->get('config_stock_display')) { $this->data['stock'] = $product_info['quantity']; } else { $this->data['stock'] = $this->language->get('text_instock'); } на if ($product_info['quantity'] <= 0) { $this->data['stock'] = $product_info['stock_status']; } elseif ($this->config->get('config_stock_display')) { $this->data['stock'] = $product_info['quantity']; } else { $this->data['stock'] = $this->language->get('text_instock'); } $this->data['quantity_warehouse'] = $this->model_catalog_product->getProductQuantity($this->request->get['product_id']); функция getProductQuantity() содержит следующие строки: Скрыть контент public function getProductQuantity($product_id) { $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "product_quantity pq JOIN " . DB_PREFIX . "warehouse w ON (pq.warehouse_id = w.warehouse_id) WHERE pq.product_id = '" . (int)$product_id . "'"); return $query->rows; } Как такое реализовать на Opencart 2.3.0.2 Версия модуля 1.6.4.5 Надіслати Поділитися на інших сайтах More sharing options... zack Опубліковано: 12 серпня 2019 Share Опубліковано: 12 серпня 2019 В 09.08.2019 в 19:53, zack сказал: /catalog/controller/product/category.php Скрыть контент $this->data['products'][] = array( 'product_id' => $result['product_id'], 'thumb' => $image, 'sku' => $result['sku'], 'mpn' => $result['mpn'], 'quantity' => $result['quantity'], // получим остатки по складам 'quantity_warehouse' => $this->model_catalog_product->getProductQuantity($result['product_id']), 'discount' => $discounts, 'stock_status'=> $result['stock_status'], 'name' => $result['name'], 'description' => utf8_substr(strip_tags(html_entity_decode($result['description'], ENT_QUOTES, 'UTF-8')), 0, 100) . '', 'price' => $price, 'special' => $special, 'tax' => $tax, 'rating' => $result['rating'], 'reviews' => sprintf($this->language->get('text_reviews'), (int)$result['reviews']), 'href' => $this->url->link('product/product', 'path=' . $this->request->get['path'] . '&product_id=' . $result['product_id'] . $url) ); } в шаблоне у меня выглядит так (в разных шаблонах по-разному, но смысл одинаковый) Показать контент <?php if (isset($product['quantity_warehouse'])) { ?> <div> <?php $pq_style = $product['quantity'] ? ' style="color: #00AA00;"' : ' style="color: #FF0000;"'?> <?php foreach ($product['quantity_warehouse'] as $qw => $quantity_warehouse) { if ($quantity_warehouse['quantity'] > 0) { ?> <div><span<?php echo $pq_style ?> title="<?php echo 'Наличие на складе '.$quantity_warehouse['name'] ?>"> <?php echo 'Склад "'.$quantity_warehouse['name']. '" ' . $quantity_warehouse['quantity'] . ' шт'; ?></span></div> <?php } else {?> <div><span style="color: #FF0000;" title="Нет в наличии"><?php echo $product['stock_status']; ?></span></div> <?php } ?> <?php } ?> </div> <?php } ?> теперь в карточке товара: Показать контент /catalog/controller/product/product.php меняем текст: if ($product_info['quantity'] <= 0) { $this->data['stock'] = $product_info['stock_status']; } elseif ($this->config->get('config_stock_display')) { $this->data['stock'] = $product_info['quantity']; } else { $this->data['stock'] = $this->language->get('text_instock'); } на if ($product_info['quantity'] <= 0) { $this->data['stock'] = $product_info['stock_status']; } elseif ($this->config->get('config_stock_display')) { $this->data['stock'] = $product_info['quantity']; } else { $this->data['stock'] = $this->language->get('text_instock'); } $this->data['quantity_warehouse'] = $this->model_catalog_product->getProductQuantity($this->request->get['product_id']); функция getProductQuantity() содержит следующие строки: Скрыть контент public function getProductQuantity($product_id) { $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "product_quantity pq JOIN " . DB_PREFIX . "warehouse w ON (pq.warehouse_id = w.warehouse_id) WHERE pq.product_id = '" . (int)$product_id . "'"); return $query->rows; } Как такое реализовать на Opencart 2.3.0.2 Версия модуля 1.6.4.5 При добавлении данного кода - ошибка 500 на странице карточки товара. В логах ничего не появляется. Надіслати Поділитися на інших сайтах More sharing options... Ryazanov Опубліковано: 20 серпня 2019 Share Опубліковано: 20 серпня 2019 Добрый день! Версия ocStore 2.3.0.2.3 и модуль версия 1.6.4.7 ни как не хот\т видеть друг друга. 1с УТ 2.3 (это для Украины конфигурация), т.е. база не видит модуль, пишет ошибка пользователя и пароль неверный, что не в водили, хотя если ставить ниже версию модуля 1c_1.6.3.11, то и при пустых полях пользователя и пароля нормально работает. В чем может быть причина? В настройках модуля, где выбор платформы выбирали и УНФ, и УТ 11 и 10, все равно не хотят дружить Спасибо. (Модуль и более старой версии подходил бы, но есть некоторые косячки: в базе есть категории пустые, в которых нет товаров, а они на сайте все равно есть, не скрываются, например, а это важно!!!) Надіслати Поділитися на інших сайтах More sharing options... marcus201832 Опубліковано: 21 серпня 2019 Share Опубліковано: 21 серпня 2019 14 часов назад, Ryazanov сказал: Добрый день! Версия ocStore 2.3.0.2.3 и модуль версия 1.6.4.7 ни как не хот\т видеть друг друга. 1с УТ 2.3 (это для Украины конфигурация), т.е. база не видит модуль, пишет ошибка пользователя и пароль неверный, что не в водили, хотя если ставить ниже версию модуля 1c_1.6.3.11, то и при пустых полях пользователя и пароля нормально работает. В чем может быть причина? В настройках модуля, где выбор платформы выбирали и УНФ, и УТ 11 и 10, все равно не хотят дружить Спасибо. (Модуль и более старой версии подходил бы, но есть некоторые косячки: в базе есть категории пустые, в которых нет товаров, а они на сайте все равно есть, не скрываются, например, а это важно!!!) В файле .htaccess эту запись указывали? RewriteRule .* - [E=REMOTE_USER:%{HTTP:Authorization},L] Надіслати Поділитися на інших сайтах More sharing options... Ryazanov Опубліковано: 22 серпня 2019 Share Опубліковано: 22 серпня 2019 В 21.08.2019 в 07:35, marcus201832 сказал: В файле .htaccess эту запись указывали? RewriteRule .* - [E=REMOTE_USER:%{HTTP:Authorization},L] Добрый день! Версия ocStore 2.3.0.2.3 и модуль версия 1.6.4.7 ни как не хот\т видеть друг друга. 1с УТ 2.3 (это для Украины конфигурация), т.е. база не видит модуль, пишет ошибка пользователя и пароль неверный, что не в водили, хотя если ставить ниже версию модуля 1c_1.6.3.11, то и при пустых полях пользователя и пароля нормально работает. В чем может быть причина? В настройках модуля, где выбор платформы выбирали и УНФ, и УТ 11 и 10, все равно не хотят дружить Спасибо. (Модуль и более старой версии подходил бы, но есть некоторые косячки: в базе есть категории пустые, в которых нет товаров, а они на сайте все равно есть, не скрываются, например, а это важно!!!) В 21.08.2019 в 07:35, marcus201832 сказал: В файле .htaccess эту запись указывали? RewriteRule .* - [E=REMOTE_USER:%{HTTP:Authorization},L] нет, а надо? Надіслати Поділитися на інших сайтах More sharing options... alkorf Опубліковано: 24 серпня 2019 Share Опубліковано: 24 серпня 2019 (змінено) Добрый день, ни как не могу разобраться выгрузка товаров с категориями и ценами проходит отлично, но не загружаются заказы с сайта в 1С. В административной панели сайта в разделе загрузка не работает кнопка "Настройка видов доставки для экспорта в заказы в ТС", может в этом проблема скрин приложил с настройками загрузки. 1С конфигурация УНФ 1.6, opencart 2.3. В логе 1С загрузки пишет "Фоновый обмен 24.08.2019 14:06:46 Запуск загрузки заказов Обработано: 0 Загружено: 0 Пропущено: 0 Обновлено: 0 Создано: 0 Обработано оплат: 0 Загружено оплат: 0 Пропущено оплат: 0 Обновлено оплат: 0 Создано оплат: 0 24.08.2019 14:06:47 Завершена загрузка заказов Дополнительная информация: Не удалось прочитать данные, загруженные с сервера." Змінено 24 серпня 2019 користувачем alkorf Надіслати Поділитися на інших сайтах More sharing options... ekaterinakryl86 Опубліковано: 26 серпня 2019 Share Опубліковано: 26 серпня 2019 Всем добрый день, у меня такой вопрос: выгружаю товар по свойствам ( размер и цвет ) - продукция выгружается, все хорошо, но когда выгружается заказ в 1с, к товару не приписываются хар-ки (размер, цвет) в чем может быть проблема ? Надіслати Поділитися на інших сайтах More sharing options... leskurs Опубліковано: 27 серпня 2019 Share Опубліковано: 27 серпня 2019 Вопрос к автору по заказам, можно ли как то выгрузить заказы с 2-3 разными статусами, а не только с одним? Надіслати Поділитися на інших сайтах More sharing options... DeGe Опубліковано: 28 серпня 2019 Share Опубліковано: 28 серпня 2019 Здравствуйте! Могли бы помочь, нужен образец выгрузки orders.xml с несколькими заказами. Надіслати Поділитися на інших сайтах More sharing options... Kirillove Опубліковано: 28 серпня 2019 Автор Share Опубліковано: 28 серпня 2019 (змінено) Спойлер В 24.08.2019 в 16:03, alkorf сказал: Добрый день, ни как не могу разобраться выгрузка товаров с категориями и ценами проходит отлично, но не загружаются заказы с сайта в 1С. В административной панели сайта в разделе загрузка не работает кнопка "Настройка видов доставки для экспорта в заказы в ТС", может в этом проблема скрин приложил с настройками загрузки. 1С конфигурация УНФ 1.6, opencart 2.3. В логе 1С загрузки пишет "Фоновый обмен 24.08.2019 14:06:46 Запуск загрузки заказов Обработано: 0 Загружено: 0 Пропущено: 0 Обновлено: 0 Создано: 0 Обработано оплат: 0 Загружено оплат: 0 Пропущено оплат: 0 Обновлено оплат: 0 Создано оплат: 0 24.08.2019 14:06:47 Завершена загрузка заказов Дополнительная информация: Не удалось прочитать данные, загруженные с сервера." В версии 1.6.4.7 заказы выгружаются по статусу и если дата заказа больше периода выгрузки заказов. Для проверки можно выгрузить заказы из админки, если файл пустой, значит не попали под эти условия. Змінено 28 серпня 2019 користувачем Kirillove Надіслати Поділитися на інших сайтах More sharing options... Kirillove Опубліковано: 28 серпня 2019 Автор Share Опубліковано: 28 серпня 2019 В 28.08.2019 в 00:20, leskurs сказал: Вопрос к автору по заказам, можно ли как то выгрузить заказы с 2-3 разными статусами, а не только с одним? Нужна доработка, а можно статус выгрузки установить не использовать, тогда будут выгружаться заказы созданные или измененные после "Периода выгрузки заказов". Дата эта автоматически обновляется на время последнего успешного обмена заказами. Успешным считается есть 1С ответит "success" Надіслати Поділитися на інших сайтах More sharing options... Kirillove Опубліковано: 28 серпня 2019 Автор Share Опубліковано: 28 серпня 2019 В 13.08.2019 в 04:15, zack сказал: При добавлении данного кода - ошибка 500 на странице карточки товара. В логах ничего не появляется. К сожалению такое у себя нет времени реализовывать, 1.6.4.7 версия уже тоже архивная, но рабочая, использую у себя ее для обмена с УНФ. Склады идея хорошая, но требовала доработок, может в сентябре найду время, на Вашем сайте могу попробовать внедрить этот код. Надіслати Поділитися на інших сайтах More sharing options... Kirillove Опубліковано: 28 серпня 2019 Автор Share Опубліковано: 28 серпня 2019 (змінено) 1 час назад, DeGe сказал: Здравствуйте! Могли бы помочь, нужен образец выгрузки orders.xml с несколькими заказами. orders (6).xml Нашел такой, но он старый, для УНФ может не прокатить, УТ11 либо УТ10 схавать должна Посмотрел еще раз файл... он для УТ11 Змінено 28 серпня 2019 користувачем Kirillove Надіслати Поділитися на інших сайтах More sharing options... DeGe Опубліковано: 28 серпня 2019 Share Опубліковано: 28 серпня 2019 (змінено) 59 минут назад, Kirillove сказал: orders (6).xml 6 \u043a\u0411 · 0 downloads Нашел такой, но он старый, для УНФ может не прокатить, УТ11 либо УТ10 схавать должна Посмотрел еще раз файл... он для УТ11 Спасибо! Мне дали образец из 1С там такая строчка <КоммерческаяИнформация xmlns="urn:1C.ru:commerceml_2" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" ВерсияСхемы="2.09" ДатаФормирования="2018-02-05T13:26:04" Ид="1"> Это говорит о том, какая версия УТ используется? Мне сообщили, что стоит УНФ 1.6 Змінено 28 серпня 2019 користувачем DeGe Надіслати Поділитися на інших сайтах More sharing options... leskurs Опубліковано: 29 серпня 2019 Share Опубліковано: 29 серпня 2019 (змінено) В 28.08.2019 в 01:20, leskurs сказал: Вопрос к автору по заказам, можно ли как то выгрузить заказы с 2-3 разными статусами, а не только с одним? в общем кому надо изменения в 2 файлах admin/controller/extension/module/exchange1c.php export/exchange1c.php в изменения не вникал, оплачено Автору, можно добавить в релиз controller-exchange1c.php export-exchange1c.php Змінено 29 серпня 2019 користувачем leskurs Надіслати Поділитися на інших сайтах More sharing options... 3 р dinox changed the title to Модуль обмена для opencart v2.3 с учетной системой по стандарту CommerceML [Поддержка] Назад 135 136 137 138 139 140 141 142 143 144 145 Вперед Сторінка 140 з 205 Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 40 Перейти до списку тем Схожі публікації batch [Поддержка] Универсальный массовый редактор товаров. MULTIEDIT AI 1 2 3 4 11 Автор: Sha, 16 березня 2017 top sale (і ще %d) Теги: top sale chat gpt pro атрибуты опции массовое редактирование editor products скидки мета мета-теги пакетное редактирование товаров админка групповое массовое массовая продукты быстрое изменение добавление добавить цена цены опций акции управление статус обработка категорий премиум групповая скидка товар стоимость валюта прайс price акция категория корзина продажа продажи баллы отзывы статьи галерея заказ быстрый обновление цены ocmod atribute модели автодополнение снипеты скорость модуль блоки форма product наполнение интернетмагазина обновление товар опции в категории универсальный рекомендуем opencart фильтр filter регистрация опция изменить товары категории производители українською українська chatgpt chatbots multi multiedit search replace replacer find search and replace find and replace edit seo faq seo faq filter products filter opencart filter for brands filter for products filter pro filteroc ocfilter oc filter open openai opencart ai ai opencart new 253 відповіді 58 024 перегляди Sha В неділю в 21:25 batch Універсальний масовий редактор товарів. MultiEdit AI Автор: Sha, 15 березня 2017 top sale (і ще %d) Теги: top sale chat gpt pro атрибуты опции массовое редактирование editor products скидки мета мета-теги пакетное редактирование товаров админка групповое массовое массовая продукты быстрое изменение добавление добавить цена цены опций акции управление статус обработка категорий премиум групповая скидка товар стоимость валюта прайс price акция категория корзина продажа продажи баллы отзывы статьи галерея заказ быстрый обновление цены ocmod atribute модели автодополнение снипеты скорость модуль блоки форма product наполнение интернетмагазина обновление товар опции в категории универсальный рекомендуем opencart фильтр filter регистрация опция изменить товары категории производители українською українська chatgpt chatbots multi multiedit search replace replacer find search and replace find and replace edit seo faq seo faq filter products filter opencart filter for brands filter for products filter pro filteroc ocfilter oc filter open openai opencart ai ai opencart new 0 коментарів 57 355 переглядів Sha 15 березня 2017 new [Поддержка] Multi-Helper. Clear cache, refresh ocmod, Help install modules! Автор: Sha, 10 березня 2020 clear cache (і ще %d) Теги: clear cache ocmod multi helper installer modules 8 відповідей 1 060 переглядів spectre 17 березня 2020 new Multi-Helper. Clear cache, refresh ocmod, Help install modules! Автор: Sha, 10 березня 2020 clear cache (і ще %d) Теги: clear cache ocmod multi helper installer modules 0 коментарів 4 825 переглядів Sha 10 березня 2020 фикс [Поддержка] Фикс переполнения лога модификаторов Автор: kabantejay, 7 червня 2023 ocmod модификатор (і ще %d) Теги: ocmod модификатор лог modification log fix 8 відповідей 443 перегляди kabantejay 9 червня 2023 Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку Последние темы Последние дополнения Последние новости Вся активність Головна Підтримка та відповіді на запитання. Модулі та розширення Модули обмена данными Модуль Модуль обмена для opencart v2.3 по стандарту CommerceML [Поддержка] Покупцям Оплата розширень фізичними особами Оплата розширень юридичними особами Політика повернень Розробникам Регламент розміщення розширень Регламент продажу та підтримки розширень Віртуальний обліковий запис автора Політика просування оголошень API каталогу розширень Вирішення спорів щодо авторських прав Корисна інформація Публічна оферта Політика повернень Політика конфіденційності Платіжна політика Політика передачі особистих даних Політика прозорості Останні розширення Повний пакет SEO Автор: GeekoDev SameSite Session Fix Opencart 3 Автор: web_bond SP Telegram повідомлення FREE Автор: spectre Відключити порожні категорії Автор: spectre SEO Автор тексту категорії / фільтра / блогу з датою оновлення контенту + мікророзмітка Автор: radaevich × Уже зареєстровані? Ввійти Реєстрація Ваші замовлення Назад Придбані модулі та шаблони Ваші рахунки Лист очікувань Альтернативні контакти Форум Новини ocStore Назад Офіційний сайт Демо ocStore 3.0.3.2 Демо ocStore 2.3.0.2.4 Завантажити ocStore Документація Історія версій ocStore Блоги Модулі Шаблони Назад Безкоштовні шаблони Платні шаблони Де купувати модулі? Послуги FAQ OpenCart.Pro Назад Демо Купити Порівняння × Створити... Important Information На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність. Я даю згоду
Zelimkhan Опубліковано: 5 серпня 2019 Share Опубліковано: 5 серпня 2019 (змінено) Здравствуйте. Имеются товары с опциями, где каждая опция имеет свой остаток. С помощью этого модуля возможно брать опции с 1с вместе со своими остатками? Если в 1с нет возможности указать остаток для опций, то при дописании такой функции, можно будет настроить данный модуль под него. Готов рассмотреть платную доработку Змінено 5 серпня 2019 користувачем Zelimkhan Надіслати Поділитися на інших сайтах More sharing options...
zack Опубліковано: 6 серпня 2019 Share Опубліковано: 6 серпня 2019 В 04.08.2019 в 19:58, Kirillove сказал: Самое главное чтобы 1С поддерживала такую загрузку, у Вас какая конфигурация 1С? УНФ. Если надо - могу модуль битрикса прикрутить Надіслати Поділитися на інших сайтах More sharing options...
herminator Опубліковано: 6 серпня 2019 Share Опубліковано: 6 серпня 2019 (змінено) В 24.07.2019 в 03:30, Kirillove сказал: Исправление в 1.6.4.7 (SEO генерация по кнопке) файл /admin/model/extension/exchange1c.php Данная статья будет продублирована в разделе исправление ошибок версии 1.6.4.7 на офсайте Показать контент /** * ver 5 * update 2019-07-24 * Генерит SEO переменные шаблона для товара */ public function seoGenerate() { $now = date('Y-m-d H:i:s'); $result = array( 'error' => '', 'product' => 0, 'category' => 0, 'manufacturer' => 0 ); if (empty($this->TAB_FIELDS)) { $this->TAB_FIELDS = $this->defineTableFields(); } $language_id = $this->getLanguageId($this->config->get('config_language')); if ($this->config->get('exchange1c_seo_product_mode') != 'disable') { // Выбрать все товары, нужны поля: // name, sku, model, manufacturer_id, description, product_id, category_id $no_update_description = array(); if (isset($this->TAB_FIELDS['product_description']['meta_h1'])) { $sql = "SELECT p.product_id, p.sku, p.model, p.manufacturer_id, pd.name, pd.tag, pd.meta_title, pd.meta_description, pd.meta_keyword, pd.meta_h1 FROM `" . DB_PREFIX . "product` p LEFT JOIN `" . DB_PREFIX . "product_description` pd ON (p.product_id = pd.product_id) WHERE pd.language_id = " . $language_id; } else { $sql = "SELECT p.product_id, p.sku, p.model, p.manufacturer_id, pd.name, pd.tag, pd.meta_title, pd.meta_description, pd.meta_keyword FROM `" . DB_PREFIX . "product` p LEFT JOIN `" . DB_PREFIX . "product_description` pd ON (p.product_id = pd.product_id) WHERE pd.language_id = " . $language_id; array_push($no_update_description, 'meta_h1'); } $query = $this->query($sql); if ($query->num_rows) { foreach ($query->rows as $data) { $this->log($data, 2); $result['product']++; $data_old = $data; if ($this->config->get('exchange1c_seo_product_mode') != 'disable') $update = $this->seoGenerateProduct($data['product_id'], $data); $this->log($update, 2); if (!$update) { $this->log("Нечего обновлять!", 2); continue; } // Сравнение $update_fields = $this->compareArraysData($update, $data_old); // Если есть что обновлять if ($update_fields) { $sql_set = $this->prepareQuery($update_fields, 'set'); $this->query( "UPDATE `" . DB_PREFIX . "product_description` SET " . $sql_set . " WHERE `product_id` = " . (int)$data['product_id'] . " AND `language_id` = " . $language_id ); } } } } // Категории if ($this->config->get('exchange1c_seo_category_mode') != 'disable') { // Выбрать все категории, нужны поля: // name, sku, model, manufacturer_id, description, product_id, category_id $no_update_description = array(); if (isset($this->TAB_FIELDS['category_description']['meta_h1'])) { $sql = "SELECT c.category_id, cd.name, cd.meta_title, cd.meta_description, cd.meta_keyword, cd.meta_h1 FROM `" . DB_PREFIX . "category` c LEFT JOIN `" . DB_PREFIX . "category_description` cd ON (c.category_id = cd.category_id) WHERE cd.language_id = " . $language_id; } else { $sql = "SELECT c.category_id, cd.name, cd.meta_title, cd.meta_description, cd.meta_keyword FROM `" . DB_PREFIX . "category` c LEFT JOIN `" . DB_PREFIX . "category_description` cd ON (c.category_id = cd.category_id) WHERE cd.language_id = " . $language_id; array_push($no_update_description, 'meta_h1'); } $query = $this->query($sql); if ($query->num_rows) { foreach ($query->rows as $data) { $result['category']++; if ($this->config->get('exchange1c_seo_category_mode') != 'disable') $this->seoGenerateCategory($data['category_id'], $data); // Сравнение $update_fields = $this->compareArraysData($data_old, $data, $no_update_description); // Если есть что обновлять if ($update_fields) { $sql_set = $this->prepareQuery($update_fields, 'set'); $this->query( "UPDATE `" . DB_PREFIX . "category_description` SET " . $sql_set . " WHERE `category_id` = " . (int)$data['category_id'] . " AND `language_id` = " . $language_id ); $this->query( "UPDATE `" . DB_PREFIX . "category` SET `date_modified` = '" . $now . "' WHERE `category_id` = " . (int)$data['category_id'] ); } } } } // Производители if ($this->config->get('exchange1c_seo_manufacturer_mode') != 'disable') { if (isset($this->TAB_FIELDS['manufacturer_description'])) { // Выбрать все категории, нужны поля: // name, sku, model, manufacturer_id, description, product_id, category_id $no_update_description = array(); if (isset($this->TAB_FIELDS['manufacturer_description']['meta_h1'])) { $sql = "SELECT m.manufacturer_id, md.name, md.meta_title, md.meta_description, md.meta_keyword, md.meta_h1 FROM `" . DB_PREFIX . "manufacturer` m LEFT JOIN `" . DB_PREFIX . "manufacturer_description` md ON (m.manufacturer_id = md.manufacturer_id) WHERE md.language_id = " . $language_id; } else { $sql = "SELECT m.manufacturer_id, md.name, md.meta_title, md.meta_description, md.meta_keyword FROM `" . DB_PREFIX . "manufacturer` m LEFT JOIN `" . DB_PREFIX . "manufacturer_description` md ON (m.manufacturer_id = md.manufacturer_id) WHERE md.language_id = " . $language_id; array_push($no_update_description, 'meta_h1'); } $query = $this->query($sql); if ($query->num_rows) { foreach ($query->rows as $data) { $result['manufacturer']++; $data_old = $data; if ($this->config->get('exchange1c_seo_manufacturer_mode') != 'disable') $update = $this->seoGenerateManufacturer($data['manufacturer_id'], $data); if (!$update) continue; // Сравнение $update_fields = $this->compareArraysData($data_old, $data, $no_update_description); // Если есть что обновлять if ($update_fields) { $sql_set = $this->prepareQuery($update_fields, 'set'); $this->query( "UPDATE `" . DB_PREFIX . "category_description` SET " . $sql_set . " WHERE `category_id` = " . (int)$data['category_id'] . " AND `language_id` = " . $language_id ); $this->query( "UPDATE `" . DB_PREFIX . "category` SET `date_modified` = '" . $now . "' WHERE `category_id` = " . (int)$data['category_id'] ); } } } } } return $result; } // seoGenerate() Не вдаваясь в подробности, это не работает. Разбирать почему - нет ни сил, ни желания. Может быть кому-то пригодится мой рабочий вариант (+прямое добавление цены в паттерны, что неправильно, но меня устраивает, как добавить - писал ранее): Спойлер /** * ver 5 * update 2018-06-14 * Генерит SEO переменные шаблона для товара * С версии 4 функция теперь не читает данные из базы */ private function seoGenerateProduct($product_id, $data) { $result = array(); // Определение дополнительных полей $this->TAB_FIELDS = $this->config->get('exchange1c_table_fields'); // Товары, Категории $seo_fields = array(); if (isset($this->TAB_FIELDS['product_description']['meta_title'])) { $seo_fields[] = 'meta_title'; } if (isset($this->TAB_FIELDS['product_description']['meta_description'])) { $seo_fields[] = 'meta_description'; } if (isset($this->TAB_FIELDS['product_description']['meta_keyword'])) { $seo_fields[] = 'meta_keyword'; } //$this->log($this->TAB_FIELDS, 2); $data['price'] = strtok((float)$data['price'], '.'); // Сопоставляем значения к паттернам $tags = array( '{name}' => isset($data['name']) ? $data['name'] : '', '{sku}' => isset($data['sku']) ? $data['sku'] : '', '{model}' => isset($data['model']) ? $data['model'] : '', '{price}' => isset($data['price']) ? $data['price'] : '', '{brand}' => isset($data['manufacturer']) ? $data['manufacturer']['name'] : '', '{cats}' => $this->getProductCategoriesString($product_id), '{prod_id}' => isset($product_id) ? $product_id : '', '{cat_id}' => isset($data['category_id']) ? $data['category_id'] : '' ); if (isset($this->TAB_FIELDS['product_description']['meta_h1'])) { $seo_fields[] = 'meta_h1'; } // Формируем массив с замененными значениями foreach ($seo_fields as $field) { $template = ''; if ($this->config->get('exchange1c_seo_product_'.$field) == 'template') { $template = $this->config->get('exchange1c_seo_product_'.$field.'_template'); // Если выбран шаблон, но он пустой, пропускаем if (!$template) { $this->log("Шаблон пустой - пропускаем"); continue; } if ($this->config->get('exchange1c_seo_product_mode') == 'overwrite') { // Перезаписывать if ($field == 'meta_keyword' || $field == 'tag') { $value = $this->seoGenerateString($template, $tags, false, true); } else { $value = $this->seoGenerateString($template, $tags); } // Если вдруг по каким-либо причинам это поле отсутствует, будем считать что оно есть, но пустое // Вот тут может быть когда-либо ошибка... if (!isset($data[$field])) { $data[$field] = ""; } // Если поле не изменилось, нет смысла его перезаписывать if ($value == $data[$field]) { $this->log("Поле '" . $field . "' не изменилось: " . $data[$field], 2); continue; } // Нужно обновить поле $this->log("Поле: '" . $field . "' старое: '" . $data[$field] . "', новое: '" . $value . "'", 2); $result[$field] = $value; } else { // Только если поле пустое if (empty($data[$field])) { $value = $this->seoGenerateString($template, $tags); $this->log("Поле: '" . $field . "' старое: '" . $data[$field] . "', новое: '" . $value . "'", 2); $result[$field] = $value; } else { $this->log("Пропускаем '" . $field . "', т.к. не пустое: '" . $data[$field] . "'", 2); } } } else { $this->log("Шаблон для поля '" . $field . "' не найден!"); continue; } } if ($this->config->get('exchange1c_seo_product_seo_url') == 'template') { // Сформируем SEO URL $template = $this->config->get('exchange1c_seo_product_seo_url_template'); $keyword = $this->seoGenerateString($template, $tags, true); // Получим старый SeoUrl $seo_url = $this->getSeoUrl("product_id", $product_id); // обновляем если только были изменения if ($this->config->get('exchange1c_seo_product_mode') == 'overwrite' || ($this->config->get('exchange1c_seo_product_mode') == 'if_empty' && empty($seo_url['keyword']))) { if ($seo_url['keyword'] != $keyword) { $this->setSeoURL('product_id', $product_id, $keyword, $seo_url); } } } $this->log("SEO товара обновлено полей: " . count($result)); return $result; } // seoGenerateProduct() /** * ver 6 * update 2018-06-14 * Генерит SEO переменные шаблона для категории */ private function seoGenerateCategory($category_id, &$data) { $seo_fields = array( 'meta_title', 'meta_description', 'meta_keyword' ); if (isset($this->TAB_FIELDS['category_description']['meta_h1'])) { $seo_fields[] = 'meta_h1'; } // Сопоставляем значения к паттернам $tags = array( '{cat}' => isset($data['name']) ? $data['name'] : '', '{cat_id}' => $category_id ); // Формируем массив с замененными значениями foreach ($seo_fields as $field) { if (!isset($data[$field])) { $data[$field] = ""; } if ($this->config->get('exchange1c_seo_category_'.$field) == 'template') { // Если включено формирование по шаблону $template = $this->config->get('exchange1c_seo_category_'.$field.'_template'); // Если выбран шаблон, но он пустой, пропускаем if (!$template) { unset($data[$field]); continue; } if ($this->config->get('exchange1c_seo_category_mode') == 'overwrite') { // Перезаписывать $value = $this->seoGenerateString($template, $tags); // Если поле не изменилось, нет смысла его перезаписывать if ($value == $data[$field]) { $this->log("Поле '" . $field . "' не изменилось: " . $data[$field], 2); unset($data[$field]); continue; } // Нужно обновить поле $this->log("Поле: '" . $field . "' старое: '" . $data[$field] . "', новое: '" . $value . "', шаблон: " . $template, 2); $data[$field] = $value; } elseif ($this->config->get('exchange1c_seo_category_mode') == 'if_empty' && empty($data[$field])) { // Только если поле пустое $value = $this->seoGenerateString($template, $tags); $this->log("Поле: '" . $field . "' старое: '" . $data[$field] . "', новое: '" . $value . "'", 2); $data[$field] = $value; } else { unset($data[$field]); } } else { // Не изменяем это поле unset($data[$field]); continue; } } // foreach if ($this->config->get('exchange1c_seo_category_seo_url') == 'template') { // Сформируем SEO URL $template = $this->config->get('exchange1c_seo_category_seo_url_template'); $keyword = $this->seoGenerateString($template, $tags, true); // Получим старый SeoUrl $seo_url = $this->getSeoUrl("category_id", $category_id); // обновляем если только были изменения if ($this->config->get('exchange1c_seo_category_mode') == 'overwrite' || ($this->config->get('exchange1c_seo_category_mode') == 'if_empty' && empty($seo_url['keyword']))) { if ($seo_url['keyword'] != $keyword) { $this->setSeoURL('category_id', $category_id, $keyword, $seo_url); } } } $this->log("Сформировано SEO для категории"); } // seoGenerateCategory() /** * ver 10 * update 2018-06-14 * Генерит SEO переменные шаблона для производетеля */ private function seoGenerateManufacturer($manufacturer_id, &$data) { if (!isset($this->TAB_FIELDS['manufacturer_description'])) { $this->log("В базе отсутствует таблица manufacturer_description, SEO не будет сформировано"); return false; } $seo_fields = array(); if (isset($this->TAB_FIELDS['manufacturer_description'])) { if (isset($this->TAB_FIELDS['manufacturer_description']['meta_h1'])) { $seo_fields[] = 'meta_h1'; } if (isset($this->TAB_FIELDS['manufacturer_description']['meta_title'])) { $seo_fields[] = 'meta_title'; } if (isset($this->TAB_FIELDS['manufacturer_description']['meta_description'])) { $seo_fields[] = 'meta_description'; } if (isset($this->TAB_FIELDS['manufacturer_description']['meta_keyword'])) { $seo_fields[] = 'meta_keyword'; } // Получим поля для сравнения $fields = implode($seo_fields,', '); $query = $this->query("SELECT " . $fields . " FROM `" . DB_PREFIX . "manufacturer_description` WHERE `manufacturer_id` = " . (int)$manufacturer_id . " AND `language_id` = " . $this->LANG_ID); foreach ($seo_fields as $field) { $data[$field] = isset($query->row[$field]) ? $query->row[$field] : ""; } } // Сопоставляем значения к тегам $tags = array( '{brand}' => isset($data['name']) ? $data['name'] : '', '{brand_id}' => (string)$manufacturer_id ); $update = false; // Формируем массив с замененными значениями foreach ($seo_fields as $field) { $template = ''; if ($this->config->get('exchange1c_seo_manufacturer_' . $field) == 'template') { $template = $this->config->get('exchange1c_seo_manufacturer_' . $field . '_template'); if (!$template) { unset($data[$field]); continue; } if ($this->config->get('exchange1c_seo_manufacturer_mode') == 'overwrite') { // Перезаписывать $value = $this->seoGenerateString($template, $tags); // Если поле не изменилось, нет смысла его перезаписывать if ($value == $data[$field]) { $this->log("Поле '" . $field . "' не изменилось: " . $data[$field], 2); unset($data[$field]); continue; } // Нужно обновить поле $this->log("Поле: '" . $field . "' старое: '" . $data[$field] . "', новое: '" . $value . "'", 2); $data[$field] = $value; $update = true; } else { // Только если поле пустое if (empty($data[$field])) { $value = $this->seoGenerateString($template, $tags); $this->log("Поле: '" . $field . "' старое: '" . $data[$field] . "', новое: '" . $value . "'", 2); $data[$field] = $value; $update = true; } else { $this->log("Пропускаем '" . $field . "', т.к. не пустое: '" . $data[$field] . "'", 2); unset($data[$field]); } } } else { // Не изменяем это поле unset($data[$field]); continue; } } if ($this->config->get('exchange1c_seo_manufacturer_seo_url') == 'template') { // Сформируем SEO URL $template = $this->config->get('exchange1c_seo_manufacturer_seo_url_template'); $keyword = $this->seoGenerateString($template, $tags, true); // Получим старый SeoUrl $seo_url = $this->getSeoUrl("manufacturer_id", $manufacturer_id); // обновляем если только были изменения if ($this->config->get('exchange1c_seo_manufacturer_mode') == 'overwrite' || ($this->config->get('exchange1c_seo_manufacturer_mode') == 'if_empty' && empty($seo_url['keyword']))) { if ($seo_url['keyword'] != $keyword) { $this->setSeoURL('manufacturer_id', $manufacturer_id, $keyword, $seo_url); } } } $this->log("Сформировано SEO для производителя"); } // seoGenerateManufacturer() /** * ver 4 * update 2018-06-14 * Генерит SEO переменные шаблона для товара */ public function seoGenerate() { $now = date('Y-m-d H:i:s'); $result = array( 'error' => '', 'product' => 0, 'category' => 0, 'manufacturer' => 0 ); $language_id = $this->getLanguageId($this->config->get('config_language')); if ($this->config->get('exchange1c_seo_product_mode') != 'disable') { // Выбрать все товары, нужны поля: // name, sku, model, manufacturer_id, description, product_id, category_id $no_update_description = array(); if (isset($this->TAB_FIELDS['product_description']['meta_h1'])) { $sql = "SELECT `p`.`product_id`, `p`.`sku`, `p`.`model`, `p`.`price`, `p`.`manufacturer_id`, `pd`.`name`, `pd`.`tag`, `pd`.`meta_title`, `pd`.`meta_description`, `pd`.`meta_keyword`, `pd`.`meta_h1` FROM `" . DB_PREFIX . "product` `p` LEFT JOIN `" . DB_PREFIX . "product_description` `pd` ON (`p`.`product_id` = `pd`.`product_id`) WHERE `pd.`language_id` = " . $language_id; } else { $sql = "SELECT `p`.`product_id`, `p`.`sku`, `p`.`model`, `p`.`price`, `p`.`manufacturer_id`, `pd`.`name`, `pd`.`tag`, `pd`.`meta_title`, `pd`.`meta_description`, `pd`.`meta_keyword` FROM `" . DB_PREFIX . "product` `p` LEFT JOIN `" . DB_PREFIX . "product_description` `pd` ON (`p`.`product_id` = `pd`.`product_id`) WHERE `pd`.`language_id` = " . $language_id; array_push($no_update_description, 'meta_h1'); } $query = $this->query($sql); if ($query->num_rows) { foreach ($query->rows as $data) { $result['product']++; if ($this->config->get('exchange1c_seo_product_mode') != 'disable') $update = $this->seoGenerateProduct($data['product_id'], $data); if (!$update) continue; // Сравнение $no_update = array('sku','model','manufacturer_id'); $update_fields = $this->compareArraysData($update, $data, $no_update); // Если есть что обновлять if ($update_fields) { $sql_set = $this->prepareQuery($update_fields, 'set'); $this->query("UPDATE `" . DB_PREFIX . "product` SET " . $sql_set . ", `date_modified` = '" . $now . "' WHERE `product_id` = " . (int)$data['product_id']); } // Сравнение $update_fields = $this->compareArraysData($update, $data, $no_update_description); // Если есть что обновлять if ($update_fields) { $sql_set = $this->prepareQuery($update_fields, 'set'); $this->query("UPDATE `" . DB_PREFIX . "product_description` SET " . $sql_set . " WHERE `product_id` = " . (int)$data['product_id'] . " AND `language_id` = " . $language_id); } } } } // Категории if ($this->config->get('exchange1c_seo_category_mode') != 'disable') { // Выбрать все категории, нужны поля: // name, sku, model, manufacturer_id, description, product_id, category_id $no_update_description = array(); if (isset($this->TAB_FIELDS['category_description']['meta_h1'])) { $sql = "SELECT `c`.`category_id`, `cd`.`name`, `cd`.`meta_title`, `cd`.`meta_description`, `cd`.`meta_keyword`, `cd`.`meta_h1` FROM `" . DB_PREFIX . "category` `c` LEFT JOIN `" . DB_PREFIX . "category_description` `cd` ON (`c`.`category_id` = `cd`.`category_id`) WHERE `cd`.`language_id` = " . $language_id; } else { $sql = "SELECT `c`.`category_id`, `cd`.`name`, `cd`.`meta_title`, `cd`.`meta_description`, `cd`.`meta_keyword` FROM `" . DB_PREFIX . "category` `c` LEFT JOIN `" . DB_PREFIX . "category_description` `cd` ON (`c`.`category_id` = `cd`.`category_id`) WHERE `cd`.`language_id` = " . $language_id; array_push($no_update_description, 'meta_h1'); } $query = $this->query($sql); if ($query->num_rows) { foreach ($query->rows as $data) { $result['category']++; $data_old = $data; if ($this->config->get('exchange1c_seo_category_mode') != 'disable') $this->seoGenerateCategory($data['category_id'], $data); // Сравнение $update_fields = $this->compareArraysData($data, $data_old, $no_update_description); // Если есть что обновлять if ($update_fields) { $sql_set = $this->prepareQuery($update_fields, 'set'); $this->query("UPDATE `" . DB_PREFIX . "category_description` SET " . $sql_set . " WHERE `category_id` = " . (int)$data['category_id'] . " AND `language_id` = " . $language_id); $this->query("UPDATE `" . DB_PREFIX . "category` SET `date_modified` = '" . $now . "' WHERE `category_id` = " . (int)$data['category_id']); } } } } // Производители if ($this->config->get('exchange1c_seo_manufacturer_mode') != 'disable') { if (isset($this->TAB_FIELDS['manufacturer_description']['meta_h1'])) { // Выбрать все категории, нужны поля: // name, sku, model, manufacturer_id, description, product_id, category_id $no_update_description = array(); if (isset($this->TAB_FIELDS['manufacturer_description']['meta_h1'])) { $sql = "SELECT `m`.`manufacturer_id`, `m`.`name`, `md`.`meta_title`, `md`.`meta_description`, `md`.`meta_keyword`, `md`.`meta_h1` FROM `" . DB_PREFIX . "manufacturer` `m` LEFT JOIN `" . DB_PREFIX . "manufacturer_description` `md` ON (`m`.`manufacturer_id` = `md`.`manufacturer_id`) WHERE `md`.`language_id` = " . $language_id; } else { $sql = "SELECT `m`.`manufacturer_id`, `m`.`name`, `md`.`meta_title`, `md`.`meta_description`, `md`.`meta_keyword` FROM `" . DB_PREFIX . "manufacturer` `m` LEFT JOIN `" . DB_PREFIX . "manufacturer_description` `md` ON (`m`.`manufacturer_id` = `md`.`manufacturer_id`) WHERE `md`.`language_id` = " . $language_id; array_push($no_update_description, 'meta_h1'); } $query = $this->query($sql); if ($query->num_rows) { foreach ($query->rows as $data) { $result['manufacturer']++; $data_old = $data; if ($this->config->get('exchange1c_seo_manufacturer_mode') != 'disable') $this->seoGenerateManufacturer($data['manufacturer_id'], $data); $update_fields = $this->compareArraysData($data, $data_old, $no_update_description); // Если есть что обновлять if ($update_fields) { $this->log("Обновляю поля SEO для производителя."); $sql_set = $this->prepareQuery($update_fields, 'set'); $this->query("UPDATE `" . DB_PREFIX . "manufacturer_description` SET " . $sql_set . " WHERE `manufacturer_id` = " . (int)$data['manufacturer_id'] . " AND `language_id` = " . $language_id); $this->query("UPDATE `" . DB_PREFIX . "manufacturer` SET `date_modified` = '" . $now . "' WHERE `manufacturer_id` = " . (int)$data['manufacturer_id']); }else{ $this->log("Поля SEO для производителя не изменились."); } } } } } return $result; } // seoGenerate() Расписыванием внесённых правок нет желания заниматься. Кто захочет - сравнит исходники. Змінено 6 серпня 2019 користувачем herminator Надіслати Поділитися на інших сайтах More sharing options...
webnet Опубліковано: 9 серпня 2019 Share Опубліковано: 9 серпня 2019 Подскажите, можно ли отключить обновление названий категорий при импорте из 1С на сайт через ваш модуль? Хотелось бы указать свои названия категорий на сайте, но при импорте они все равно меняются на названия, которые в 1С. Надіслати Поділитися на інших сайтах More sharing options...
zack Опубліковано: 9 серпня 2019 Share Опубліковано: 9 серпня 2019 /catalog/controller/product/category.php Скрыть контент $this->data['products'][] = array( 'product_id' => $result['product_id'], 'thumb' => $image, 'sku' => $result['sku'], 'mpn' => $result['mpn'], 'quantity' => $result['quantity'], // получим остатки по складам 'quantity_warehouse' => $this->model_catalog_product->getProductQuantity($result['product_id']), 'discount' => $discounts, 'stock_status'=> $result['stock_status'], 'name' => $result['name'], 'description' => utf8_substr(strip_tags(html_entity_decode($result['description'], ENT_QUOTES, 'UTF-8')), 0, 100) . '', 'price' => $price, 'special' => $special, 'tax' => $tax, 'rating' => $result['rating'], 'reviews' => sprintf($this->language->get('text_reviews'), (int)$result['reviews']), 'href' => $this->url->link('product/product', 'path=' . $this->request->get['path'] . '&product_id=' . $result['product_id'] . $url) ); } в шаблоне у меня выглядит так (в разных шаблонах по-разному, но смысл одинаковый) Скрыть контент <?php if (isset($product['quantity_warehouse'])) { ?> <div> <?php $pq_style = $product['quantity'] ? ' style="color: #00AA00;"' : ' style="color: #FF0000;"'?> <?php foreach ($product['quantity_warehouse'] as $qw => $quantity_warehouse) { if ($quantity_warehouse['quantity'] > 0) { ?> <div><span<?php echo $pq_style ?> title="<?php echo 'Наличие на складе '.$quantity_warehouse['name'] ?>"> <?php echo 'Склад "'.$quantity_warehouse['name']. '" ' . $quantity_warehouse['quantity'] . ' шт'; ?></span></div> <?php } else {?> <div><span style="color: #FF0000;" title="Нет в наличии"><?php echo $product['stock_status']; ?></span></div> <?php } ?> <?php } ?> </div> <?php } ?> теперь в карточке товара: Скрыть контент /catalog/controller/product/product.php меняем текст: if ($product_info['quantity'] <= 0) { $this->data['stock'] = $product_info['stock_status']; } elseif ($this->config->get('config_stock_display')) { $this->data['stock'] = $product_info['quantity']; } else { $this->data['stock'] = $this->language->get('text_instock'); } на if ($product_info['quantity'] <= 0) { $this->data['stock'] = $product_info['stock_status']; } elseif ($this->config->get('config_stock_display')) { $this->data['stock'] = $product_info['quantity']; } else { $this->data['stock'] = $this->language->get('text_instock'); } $this->data['quantity_warehouse'] = $this->model_catalog_product->getProductQuantity($this->request->get['product_id']); функция getProductQuantity() содержит следующие строки: Скрыть контент public function getProductQuantity($product_id) { $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "product_quantity pq JOIN " . DB_PREFIX . "warehouse w ON (pq.warehouse_id = w.warehouse_id) WHERE pq.product_id = '" . (int)$product_id . "'"); return $query->rows; } Как такое реализовать на Opencart 2.3.0.2 Версия модуля 1.6.4.5 Надіслати Поділитися на інших сайтах More sharing options...
zack Опубліковано: 12 серпня 2019 Share Опубліковано: 12 серпня 2019 В 09.08.2019 в 19:53, zack сказал: /catalog/controller/product/category.php Скрыть контент $this->data['products'][] = array( 'product_id' => $result['product_id'], 'thumb' => $image, 'sku' => $result['sku'], 'mpn' => $result['mpn'], 'quantity' => $result['quantity'], // получим остатки по складам 'quantity_warehouse' => $this->model_catalog_product->getProductQuantity($result['product_id']), 'discount' => $discounts, 'stock_status'=> $result['stock_status'], 'name' => $result['name'], 'description' => utf8_substr(strip_tags(html_entity_decode($result['description'], ENT_QUOTES, 'UTF-8')), 0, 100) . '', 'price' => $price, 'special' => $special, 'tax' => $tax, 'rating' => $result['rating'], 'reviews' => sprintf($this->language->get('text_reviews'), (int)$result['reviews']), 'href' => $this->url->link('product/product', 'path=' . $this->request->get['path'] . '&product_id=' . $result['product_id'] . $url) ); } в шаблоне у меня выглядит так (в разных шаблонах по-разному, но смысл одинаковый) Показать контент <?php if (isset($product['quantity_warehouse'])) { ?> <div> <?php $pq_style = $product['quantity'] ? ' style="color: #00AA00;"' : ' style="color: #FF0000;"'?> <?php foreach ($product['quantity_warehouse'] as $qw => $quantity_warehouse) { if ($quantity_warehouse['quantity'] > 0) { ?> <div><span<?php echo $pq_style ?> title="<?php echo 'Наличие на складе '.$quantity_warehouse['name'] ?>"> <?php echo 'Склад "'.$quantity_warehouse['name']. '" ' . $quantity_warehouse['quantity'] . ' шт'; ?></span></div> <?php } else {?> <div><span style="color: #FF0000;" title="Нет в наличии"><?php echo $product['stock_status']; ?></span></div> <?php } ?> <?php } ?> </div> <?php } ?> теперь в карточке товара: Показать контент /catalog/controller/product/product.php меняем текст: if ($product_info['quantity'] <= 0) { $this->data['stock'] = $product_info['stock_status']; } elseif ($this->config->get('config_stock_display')) { $this->data['stock'] = $product_info['quantity']; } else { $this->data['stock'] = $this->language->get('text_instock'); } на if ($product_info['quantity'] <= 0) { $this->data['stock'] = $product_info['stock_status']; } elseif ($this->config->get('config_stock_display')) { $this->data['stock'] = $product_info['quantity']; } else { $this->data['stock'] = $this->language->get('text_instock'); } $this->data['quantity_warehouse'] = $this->model_catalog_product->getProductQuantity($this->request->get['product_id']); функция getProductQuantity() содержит следующие строки: Скрыть контент public function getProductQuantity($product_id) { $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "product_quantity pq JOIN " . DB_PREFIX . "warehouse w ON (pq.warehouse_id = w.warehouse_id) WHERE pq.product_id = '" . (int)$product_id . "'"); return $query->rows; } Как такое реализовать на Opencart 2.3.0.2 Версия модуля 1.6.4.5 При добавлении данного кода - ошибка 500 на странице карточки товара. В логах ничего не появляется. Надіслати Поділитися на інших сайтах More sharing options...
Ryazanov Опубліковано: 20 серпня 2019 Share Опубліковано: 20 серпня 2019 Добрый день! Версия ocStore 2.3.0.2.3 и модуль версия 1.6.4.7 ни как не хот\т видеть друг друга. 1с УТ 2.3 (это для Украины конфигурация), т.е. база не видит модуль, пишет ошибка пользователя и пароль неверный, что не в водили, хотя если ставить ниже версию модуля 1c_1.6.3.11, то и при пустых полях пользователя и пароля нормально работает. В чем может быть причина? В настройках модуля, где выбор платформы выбирали и УНФ, и УТ 11 и 10, все равно не хотят дружить Спасибо. (Модуль и более старой версии подходил бы, но есть некоторые косячки: в базе есть категории пустые, в которых нет товаров, а они на сайте все равно есть, не скрываются, например, а это важно!!!) Надіслати Поділитися на інших сайтах More sharing options...
marcus201832 Опубліковано: 21 серпня 2019 Share Опубліковано: 21 серпня 2019 14 часов назад, Ryazanov сказал: Добрый день! Версия ocStore 2.3.0.2.3 и модуль версия 1.6.4.7 ни как не хот\т видеть друг друга. 1с УТ 2.3 (это для Украины конфигурация), т.е. база не видит модуль, пишет ошибка пользователя и пароль неверный, что не в водили, хотя если ставить ниже версию модуля 1c_1.6.3.11, то и при пустых полях пользователя и пароля нормально работает. В чем может быть причина? В настройках модуля, где выбор платформы выбирали и УНФ, и УТ 11 и 10, все равно не хотят дружить Спасибо. (Модуль и более старой версии подходил бы, но есть некоторые косячки: в базе есть категории пустые, в которых нет товаров, а они на сайте все равно есть, не скрываются, например, а это важно!!!) В файле .htaccess эту запись указывали? RewriteRule .* - [E=REMOTE_USER:%{HTTP:Authorization},L] Надіслати Поділитися на інших сайтах More sharing options...
Ryazanov Опубліковано: 22 серпня 2019 Share Опубліковано: 22 серпня 2019 В 21.08.2019 в 07:35, marcus201832 сказал: В файле .htaccess эту запись указывали? RewriteRule .* - [E=REMOTE_USER:%{HTTP:Authorization},L] Добрый день! Версия ocStore 2.3.0.2.3 и модуль версия 1.6.4.7 ни как не хот\т видеть друг друга. 1с УТ 2.3 (это для Украины конфигурация), т.е. база не видит модуль, пишет ошибка пользователя и пароль неверный, что не в водили, хотя если ставить ниже версию модуля 1c_1.6.3.11, то и при пустых полях пользователя и пароля нормально работает. В чем может быть причина? В настройках модуля, где выбор платформы выбирали и УНФ, и УТ 11 и 10, все равно не хотят дружить Спасибо. (Модуль и более старой версии подходил бы, но есть некоторые косячки: в базе есть категории пустые, в которых нет товаров, а они на сайте все равно есть, не скрываются, например, а это важно!!!) В 21.08.2019 в 07:35, marcus201832 сказал: В файле .htaccess эту запись указывали? RewriteRule .* - [E=REMOTE_USER:%{HTTP:Authorization},L] нет, а надо? Надіслати Поділитися на інших сайтах More sharing options...
alkorf Опубліковано: 24 серпня 2019 Share Опубліковано: 24 серпня 2019 (змінено) Добрый день, ни как не могу разобраться выгрузка товаров с категориями и ценами проходит отлично, но не загружаются заказы с сайта в 1С. В административной панели сайта в разделе загрузка не работает кнопка "Настройка видов доставки для экспорта в заказы в ТС", может в этом проблема скрин приложил с настройками загрузки. 1С конфигурация УНФ 1.6, opencart 2.3. В логе 1С загрузки пишет "Фоновый обмен 24.08.2019 14:06:46 Запуск загрузки заказов Обработано: 0 Загружено: 0 Пропущено: 0 Обновлено: 0 Создано: 0 Обработано оплат: 0 Загружено оплат: 0 Пропущено оплат: 0 Обновлено оплат: 0 Создано оплат: 0 24.08.2019 14:06:47 Завершена загрузка заказов Дополнительная информация: Не удалось прочитать данные, загруженные с сервера." Змінено 24 серпня 2019 користувачем alkorf Надіслати Поділитися на інших сайтах More sharing options...
ekaterinakryl86 Опубліковано: 26 серпня 2019 Share Опубліковано: 26 серпня 2019 Всем добрый день, у меня такой вопрос: выгружаю товар по свойствам ( размер и цвет ) - продукция выгружается, все хорошо, но когда выгружается заказ в 1с, к товару не приписываются хар-ки (размер, цвет) в чем может быть проблема ? Надіслати Поділитися на інших сайтах More sharing options...
leskurs Опубліковано: 27 серпня 2019 Share Опубліковано: 27 серпня 2019 Вопрос к автору по заказам, можно ли как то выгрузить заказы с 2-3 разными статусами, а не только с одним? Надіслати Поділитися на інших сайтах More sharing options...
DeGe Опубліковано: 28 серпня 2019 Share Опубліковано: 28 серпня 2019 Здравствуйте! Могли бы помочь, нужен образец выгрузки orders.xml с несколькими заказами. Надіслати Поділитися на інших сайтах More sharing options...
Kirillove Опубліковано: 28 серпня 2019 Автор Share Опубліковано: 28 серпня 2019 (змінено) Спойлер В 24.08.2019 в 16:03, alkorf сказал: Добрый день, ни как не могу разобраться выгрузка товаров с категориями и ценами проходит отлично, но не загружаются заказы с сайта в 1С. В административной панели сайта в разделе загрузка не работает кнопка "Настройка видов доставки для экспорта в заказы в ТС", может в этом проблема скрин приложил с настройками загрузки. 1С конфигурация УНФ 1.6, opencart 2.3. В логе 1С загрузки пишет "Фоновый обмен 24.08.2019 14:06:46 Запуск загрузки заказов Обработано: 0 Загружено: 0 Пропущено: 0 Обновлено: 0 Создано: 0 Обработано оплат: 0 Загружено оплат: 0 Пропущено оплат: 0 Обновлено оплат: 0 Создано оплат: 0 24.08.2019 14:06:47 Завершена загрузка заказов Дополнительная информация: Не удалось прочитать данные, загруженные с сервера." В версии 1.6.4.7 заказы выгружаются по статусу и если дата заказа больше периода выгрузки заказов. Для проверки можно выгрузить заказы из админки, если файл пустой, значит не попали под эти условия. Змінено 28 серпня 2019 користувачем Kirillove Надіслати Поділитися на інших сайтах More sharing options... Kirillove Опубліковано: 28 серпня 2019 Автор Share Опубліковано: 28 серпня 2019 В 28.08.2019 в 00:20, leskurs сказал: Вопрос к автору по заказам, можно ли как то выгрузить заказы с 2-3 разными статусами, а не только с одним? Нужна доработка, а можно статус выгрузки установить не использовать, тогда будут выгружаться заказы созданные или измененные после "Периода выгрузки заказов". Дата эта автоматически обновляется на время последнего успешного обмена заказами. Успешным считается есть 1С ответит "success" Надіслати Поділитися на інших сайтах More sharing options... Kirillove Опубліковано: 28 серпня 2019 Автор Share Опубліковано: 28 серпня 2019 В 13.08.2019 в 04:15, zack сказал: При добавлении данного кода - ошибка 500 на странице карточки товара. В логах ничего не появляется. К сожалению такое у себя нет времени реализовывать, 1.6.4.7 версия уже тоже архивная, но рабочая, использую у себя ее для обмена с УНФ. Склады идея хорошая, но требовала доработок, может в сентябре найду время, на Вашем сайте могу попробовать внедрить этот код. Надіслати Поділитися на інших сайтах More sharing options... Kirillove Опубліковано: 28 серпня 2019 Автор Share Опубліковано: 28 серпня 2019 (змінено) 1 час назад, DeGe сказал: Здравствуйте! Могли бы помочь, нужен образец выгрузки orders.xml с несколькими заказами. orders (6).xml Нашел такой, но он старый, для УНФ может не прокатить, УТ11 либо УТ10 схавать должна Посмотрел еще раз файл... он для УТ11 Змінено 28 серпня 2019 користувачем Kirillove Надіслати Поділитися на інших сайтах More sharing options... DeGe Опубліковано: 28 серпня 2019 Share Опубліковано: 28 серпня 2019 (змінено) 59 минут назад, Kirillove сказал: orders (6).xml 6 \u043a\u0411 · 0 downloads Нашел такой, но он старый, для УНФ может не прокатить, УТ11 либо УТ10 схавать должна Посмотрел еще раз файл... он для УТ11 Спасибо! Мне дали образец из 1С там такая строчка <КоммерческаяИнформация xmlns="urn:1C.ru:commerceml_2" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" ВерсияСхемы="2.09" ДатаФормирования="2018-02-05T13:26:04" Ид="1"> Это говорит о том, какая версия УТ используется? Мне сообщили, что стоит УНФ 1.6 Змінено 28 серпня 2019 користувачем DeGe Надіслати Поділитися на інших сайтах More sharing options... leskurs Опубліковано: 29 серпня 2019 Share Опубліковано: 29 серпня 2019 (змінено) В 28.08.2019 в 01:20, leskurs сказал: Вопрос к автору по заказам, можно ли как то выгрузить заказы с 2-3 разными статусами, а не только с одним? в общем кому надо изменения в 2 файлах admin/controller/extension/module/exchange1c.php export/exchange1c.php в изменения не вникал, оплачено Автору, можно добавить в релиз controller-exchange1c.php export-exchange1c.php Змінено 29 серпня 2019 користувачем leskurs Надіслати Поділитися на інших сайтах More sharing options... 3 р dinox changed the title to Модуль обмена для opencart v2.3 с учетной системой по стандарту CommerceML [Поддержка] Назад 135 136 137 138 139 140 141 142 143 144 145 Вперед Сторінка 140 з 205 Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 40 Перейти до списку тем Схожі публікації batch [Поддержка] Универсальный массовый редактор товаров. MULTIEDIT AI 1 2 3 4 11 Автор: Sha, 16 березня 2017 top sale (і ще %d) Теги: top sale chat gpt pro атрибуты опции массовое редактирование editor products скидки мета мета-теги пакетное редактирование товаров админка групповое массовое массовая продукты быстрое изменение добавление добавить цена цены опций акции управление статус обработка категорий премиум групповая скидка товар стоимость валюта прайс price акция категория корзина продажа продажи баллы отзывы статьи галерея заказ быстрый обновление цены ocmod atribute модели автодополнение снипеты скорость модуль блоки форма product наполнение интернетмагазина обновление товар опции в категории универсальный рекомендуем opencart фильтр filter регистрация опция изменить товары категории производители українською українська chatgpt chatbots multi multiedit search replace replacer find search and replace find and replace edit seo faq seo faq filter products filter opencart filter for brands filter for products filter pro filteroc ocfilter oc filter open openai opencart ai ai opencart new 253 відповіді 58 024 перегляди Sha В неділю в 21:25 batch Універсальний масовий редактор товарів. MultiEdit AI Автор: Sha, 15 березня 2017 top sale (і ще %d) Теги: top sale chat gpt pro атрибуты опции массовое редактирование editor products скидки мета мета-теги пакетное редактирование товаров админка групповое массовое массовая продукты быстрое изменение добавление добавить цена цены опций акции управление статус обработка категорий премиум групповая скидка товар стоимость валюта прайс price акция категория корзина продажа продажи баллы отзывы статьи галерея заказ быстрый обновление цены ocmod atribute модели автодополнение снипеты скорость модуль блоки форма product наполнение интернетмагазина обновление товар опции в категории универсальный рекомендуем opencart фильтр filter регистрация опция изменить товары категории производители українською українська chatgpt chatbots multi multiedit search replace replacer find search and replace find and replace edit seo faq seo faq filter products filter opencart filter for brands filter for products filter pro filteroc ocfilter oc filter open openai opencart ai ai opencart new 0 коментарів 57 355 переглядів Sha 15 березня 2017 new [Поддержка] Multi-Helper. Clear cache, refresh ocmod, Help install modules! Автор: Sha, 10 березня 2020 clear cache (і ще %d) Теги: clear cache ocmod multi helper installer modules 8 відповідей 1 060 переглядів spectre 17 березня 2020 new Multi-Helper. Clear cache, refresh ocmod, Help install modules! Автор: Sha, 10 березня 2020 clear cache (і ще %d) Теги: clear cache ocmod multi helper installer modules 0 коментарів 4 825 переглядів Sha 10 березня 2020 фикс [Поддержка] Фикс переполнения лога модификаторов Автор: kabantejay, 7 червня 2023 ocmod модификатор (і ще %d) Теги: ocmod модификатор лог modification log fix 8 відповідей 443 перегляди kabantejay 9 червня 2023 Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку Последние темы Последние дополнения Последние новости Вся активність Головна Підтримка та відповіді на запитання. Модулі та розширення Модули обмена данными Модуль Модуль обмена для opencart v2.3 по стандарту CommerceML [Поддержка] Покупцям Оплата розширень фізичними особами Оплата розширень юридичними особами Політика повернень Розробникам Регламент розміщення розширень Регламент продажу та підтримки розширень Віртуальний обліковий запис автора Політика просування оголошень API каталогу розширень Вирішення спорів щодо авторських прав Корисна інформація Публічна оферта Політика повернень Політика конфіденційності Платіжна політика Політика передачі особистих даних Політика прозорості Останні розширення Повний пакет SEO Автор: GeekoDev SameSite Session Fix Opencart 3 Автор: web_bond SP Telegram повідомлення FREE Автор: spectre Відключити порожні категорії Автор: spectre SEO Автор тексту категорії / фільтра / блогу з датою оновлення контенту + мікророзмітка Автор: radaevich
Kirillove Опубліковано: 28 серпня 2019 Автор Share Опубліковано: 28 серпня 2019 В 28.08.2019 в 00:20, leskurs сказал: Вопрос к автору по заказам, можно ли как то выгрузить заказы с 2-3 разными статусами, а не только с одним? Нужна доработка, а можно статус выгрузки установить не использовать, тогда будут выгружаться заказы созданные или измененные после "Периода выгрузки заказов". Дата эта автоматически обновляется на время последнего успешного обмена заказами. Успешным считается есть 1С ответит "success" Надіслати Поділитися на інших сайтах More sharing options... Kirillove Опубліковано: 28 серпня 2019 Автор Share Опубліковано: 28 серпня 2019 В 13.08.2019 в 04:15, zack сказал: При добавлении данного кода - ошибка 500 на странице карточки товара. В логах ничего не появляется. К сожалению такое у себя нет времени реализовывать, 1.6.4.7 версия уже тоже архивная, но рабочая, использую у себя ее для обмена с УНФ. Склады идея хорошая, но требовала доработок, может в сентябре найду время, на Вашем сайте могу попробовать внедрить этот код. Надіслати Поділитися на інших сайтах More sharing options... Kirillove Опубліковано: 28 серпня 2019 Автор Share Опубліковано: 28 серпня 2019 (змінено) 1 час назад, DeGe сказал: Здравствуйте! Могли бы помочь, нужен образец выгрузки orders.xml с несколькими заказами. orders (6).xml Нашел такой, но он старый, для УНФ может не прокатить, УТ11 либо УТ10 схавать должна Посмотрел еще раз файл... он для УТ11 Змінено 28 серпня 2019 користувачем Kirillove Надіслати Поділитися на інших сайтах More sharing options... DeGe Опубліковано: 28 серпня 2019 Share Опубліковано: 28 серпня 2019 (змінено) 59 минут назад, Kirillove сказал: orders (6).xml 6 \u043a\u0411 · 0 downloads Нашел такой, но он старый, для УНФ может не прокатить, УТ11 либо УТ10 схавать должна Посмотрел еще раз файл... он для УТ11 Спасибо! Мне дали образец из 1С там такая строчка <КоммерческаяИнформация xmlns="urn:1C.ru:commerceml_2" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" ВерсияСхемы="2.09" ДатаФормирования="2018-02-05T13:26:04" Ид="1"> Это говорит о том, какая версия УТ используется? Мне сообщили, что стоит УНФ 1.6 Змінено 28 серпня 2019 користувачем DeGe Надіслати Поділитися на інших сайтах More sharing options... leskurs Опубліковано: 29 серпня 2019 Share Опубліковано: 29 серпня 2019 (змінено) В 28.08.2019 в 01:20, leskurs сказал: Вопрос к автору по заказам, можно ли как то выгрузить заказы с 2-3 разными статусами, а не только с одним? в общем кому надо изменения в 2 файлах admin/controller/extension/module/exchange1c.php export/exchange1c.php в изменения не вникал, оплачено Автору, можно добавить в релиз controller-exchange1c.php export-exchange1c.php Змінено 29 серпня 2019 користувачем leskurs Надіслати Поділитися на інших сайтах More sharing options... 3 р dinox changed the title to Модуль обмена для opencart v2.3 с учетной системой по стандарту CommerceML [Поддержка] Назад 135 136 137 138 139 140 141 142 143 144 145 Вперед Сторінка 140 з 205 Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 40 Перейти до списку тем Схожі публікації batch [Поддержка] Универсальный массовый редактор товаров. MULTIEDIT AI 1 2 3 4 11 Автор: Sha, 16 березня 2017 top sale (і ще %d) Теги: top sale chat gpt pro атрибуты опции массовое редактирование editor products скидки мета мета-теги пакетное редактирование товаров админка групповое массовое массовая продукты быстрое изменение добавление добавить цена цены опций акции управление статус обработка категорий премиум групповая скидка товар стоимость валюта прайс price акция категория корзина продажа продажи баллы отзывы статьи галерея заказ быстрый обновление цены ocmod atribute модели автодополнение снипеты скорость модуль блоки форма product наполнение интернетмагазина обновление товар опции в категории универсальный рекомендуем opencart фильтр filter регистрация опция изменить товары категории производители українською українська chatgpt chatbots multi multiedit search replace replacer find search and replace find and replace edit seo faq seo faq filter products filter opencart filter for brands filter for products filter pro filteroc ocfilter oc filter open openai opencart ai ai opencart new 253 відповіді 58 024 перегляди Sha В неділю в 21:25 batch Універсальний масовий редактор товарів. MultiEdit AI Автор: Sha, 15 березня 2017 top sale (і ще %d) Теги: top sale chat gpt pro атрибуты опции массовое редактирование editor products скидки мета мета-теги пакетное редактирование товаров админка групповое массовое массовая продукты быстрое изменение добавление добавить цена цены опций акции управление статус обработка категорий премиум групповая скидка товар стоимость валюта прайс price акция категория корзина продажа продажи баллы отзывы статьи галерея заказ быстрый обновление цены ocmod atribute модели автодополнение снипеты скорость модуль блоки форма product наполнение интернетмагазина обновление товар опции в категории универсальный рекомендуем opencart фильтр filter регистрация опция изменить товары категории производители українською українська chatgpt chatbots multi multiedit search replace replacer find search and replace find and replace edit seo faq seo faq filter products filter opencart filter for brands filter for products filter pro filteroc ocfilter oc filter open openai opencart ai ai opencart new 0 коментарів 57 355 переглядів Sha 15 березня 2017 new [Поддержка] Multi-Helper. Clear cache, refresh ocmod, Help install modules! Автор: Sha, 10 березня 2020 clear cache (і ще %d) Теги: clear cache ocmod multi helper installer modules 8 відповідей 1 060 переглядів spectre 17 березня 2020 new Multi-Helper. Clear cache, refresh ocmod, Help install modules! Автор: Sha, 10 березня 2020 clear cache (і ще %d) Теги: clear cache ocmod multi helper installer modules 0 коментарів 4 825 переглядів Sha 10 березня 2020 фикс [Поддержка] Фикс переполнения лога модификаторов Автор: kabantejay, 7 червня 2023 ocmod модификатор (і ще %d) Теги: ocmod модификатор лог modification log fix 8 відповідей 443 перегляди kabantejay 9 червня 2023 Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку Последние темы Последние дополнения Последние новости Вся активність Головна Підтримка та відповіді на запитання. Модулі та розширення Модули обмена данными Модуль Модуль обмена для opencart v2.3 по стандарту CommerceML [Поддержка]
Kirillove Опубліковано: 28 серпня 2019 Автор Share Опубліковано: 28 серпня 2019 В 13.08.2019 в 04:15, zack сказал: При добавлении данного кода - ошибка 500 на странице карточки товара. В логах ничего не появляется. К сожалению такое у себя нет времени реализовывать, 1.6.4.7 версия уже тоже архивная, но рабочая, использую у себя ее для обмена с УНФ. Склады идея хорошая, но требовала доработок, может в сентябре найду время, на Вашем сайте могу попробовать внедрить этот код. Надіслати Поділитися на інших сайтах More sharing options... Kirillove Опубліковано: 28 серпня 2019 Автор Share Опубліковано: 28 серпня 2019 (змінено) 1 час назад, DeGe сказал: Здравствуйте! Могли бы помочь, нужен образец выгрузки orders.xml с несколькими заказами. orders (6).xml Нашел такой, но он старый, для УНФ может не прокатить, УТ11 либо УТ10 схавать должна Посмотрел еще раз файл... он для УТ11 Змінено 28 серпня 2019 користувачем Kirillove Надіслати Поділитися на інших сайтах More sharing options... DeGe Опубліковано: 28 серпня 2019 Share Опубліковано: 28 серпня 2019 (змінено) 59 минут назад, Kirillove сказал: orders (6).xml 6 \u043a\u0411 · 0 downloads Нашел такой, но он старый, для УНФ может не прокатить, УТ11 либо УТ10 схавать должна Посмотрел еще раз файл... он для УТ11 Спасибо! Мне дали образец из 1С там такая строчка <КоммерческаяИнформация xmlns="urn:1C.ru:commerceml_2" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" ВерсияСхемы="2.09" ДатаФормирования="2018-02-05T13:26:04" Ид="1"> Это говорит о том, какая версия УТ используется? Мне сообщили, что стоит УНФ 1.6 Змінено 28 серпня 2019 користувачем DeGe Надіслати Поділитися на інших сайтах More sharing options... leskurs Опубліковано: 29 серпня 2019 Share Опубліковано: 29 серпня 2019 (змінено) В 28.08.2019 в 01:20, leskurs сказал: Вопрос к автору по заказам, можно ли как то выгрузить заказы с 2-3 разными статусами, а не только с одним? в общем кому надо изменения в 2 файлах admin/controller/extension/module/exchange1c.php export/exchange1c.php в изменения не вникал, оплачено Автору, можно добавить в релиз controller-exchange1c.php export-exchange1c.php Змінено 29 серпня 2019 користувачем leskurs Надіслати Поділитися на інших сайтах More sharing options... 3 р dinox changed the title to Модуль обмена для opencart v2.3 с учетной системой по стандарту CommerceML [Поддержка] Назад 135 136 137 138 139 140 141 142 143 144 145 Вперед Сторінка 140 з 205 Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 40 Перейти до списку тем Схожі публікації batch [Поддержка] Универсальный массовый редактор товаров. MULTIEDIT AI 1 2 3 4 11 Автор: Sha, 16 березня 2017 top sale (і ще %d) Теги: top sale chat gpt pro атрибуты опции массовое редактирование editor products скидки мета мета-теги пакетное редактирование товаров админка групповое массовое массовая продукты быстрое изменение добавление добавить цена цены опций акции управление статус обработка категорий премиум групповая скидка товар стоимость валюта прайс price акция категория корзина продажа продажи баллы отзывы статьи галерея заказ быстрый обновление цены ocmod atribute модели автодополнение снипеты скорость модуль блоки форма product наполнение интернетмагазина обновление товар опции в категории универсальный рекомендуем opencart фильтр filter регистрация опция изменить товары категории производители українською українська chatgpt chatbots multi multiedit search replace replacer find search and replace find and replace edit seo faq seo faq filter products filter opencart filter for brands filter for products filter pro filteroc ocfilter oc filter open openai opencart ai ai opencart new 253 відповіді 58 024 перегляди Sha В неділю в 21:25 batch Універсальний масовий редактор товарів. MultiEdit AI Автор: Sha, 15 березня 2017 top sale (і ще %d) Теги: top sale chat gpt pro атрибуты опции массовое редактирование editor products скидки мета мета-теги пакетное редактирование товаров админка групповое массовое массовая продукты быстрое изменение добавление добавить цена цены опций акции управление статус обработка категорий премиум групповая скидка товар стоимость валюта прайс price акция категория корзина продажа продажи баллы отзывы статьи галерея заказ быстрый обновление цены ocmod atribute модели автодополнение снипеты скорость модуль блоки форма product наполнение интернетмагазина обновление товар опции в категории универсальный рекомендуем opencart фильтр filter регистрация опция изменить товары категории производители українською українська chatgpt chatbots multi multiedit search replace replacer find search and replace find and replace edit seo faq seo faq filter products filter opencart filter for brands filter for products filter pro filteroc ocfilter oc filter open openai opencart ai ai opencart new 0 коментарів 57 355 переглядів Sha 15 березня 2017 new [Поддержка] Multi-Helper. Clear cache, refresh ocmod, Help install modules! Автор: Sha, 10 березня 2020 clear cache (і ще %d) Теги: clear cache ocmod multi helper installer modules 8 відповідей 1 060 переглядів spectre 17 березня 2020 new Multi-Helper. Clear cache, refresh ocmod, Help install modules! Автор: Sha, 10 березня 2020 clear cache (і ще %d) Теги: clear cache ocmod multi helper installer modules 0 коментарів 4 825 переглядів Sha 10 березня 2020 фикс [Поддержка] Фикс переполнения лога модификаторов Автор: kabantejay, 7 червня 2023 ocmod модификатор (і ще %d) Теги: ocmod модификатор лог modification log fix 8 відповідей 443 перегляди kabantejay 9 червня 2023 Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку
Kirillove Опубліковано: 28 серпня 2019 Автор Share Опубліковано: 28 серпня 2019 (змінено) 1 час назад, DeGe сказал: Здравствуйте! Могли бы помочь, нужен образец выгрузки orders.xml с несколькими заказами. orders (6).xml Нашел такой, но он старый, для УНФ может не прокатить, УТ11 либо УТ10 схавать должна Посмотрел еще раз файл... он для УТ11 Змінено 28 серпня 2019 користувачем Kirillove Надіслати Поділитися на інших сайтах More sharing options... DeGe Опубліковано: 28 серпня 2019 Share Опубліковано: 28 серпня 2019 (змінено) 59 минут назад, Kirillove сказал: orders (6).xml 6 \u043a\u0411 · 0 downloads Нашел такой, но он старый, для УНФ может не прокатить, УТ11 либо УТ10 схавать должна Посмотрел еще раз файл... он для УТ11 Спасибо! Мне дали образец из 1С там такая строчка <КоммерческаяИнформация xmlns="urn:1C.ru:commerceml_2" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" ВерсияСхемы="2.09" ДатаФормирования="2018-02-05T13:26:04" Ид="1"> Это говорит о том, какая версия УТ используется? Мне сообщили, что стоит УНФ 1.6 Змінено 28 серпня 2019 користувачем DeGe Надіслати Поділитися на інших сайтах More sharing options... leskurs Опубліковано: 29 серпня 2019 Share Опубліковано: 29 серпня 2019 (змінено) В 28.08.2019 в 01:20, leskurs сказал: Вопрос к автору по заказам, можно ли как то выгрузить заказы с 2-3 разными статусами, а не только с одним? в общем кому надо изменения в 2 файлах admin/controller/extension/module/exchange1c.php export/exchange1c.php в изменения не вникал, оплачено Автору, можно добавить в релиз controller-exchange1c.php export-exchange1c.php Змінено 29 серпня 2019 користувачем leskurs Надіслати Поділитися на інших сайтах More sharing options... 3 р dinox changed the title to Модуль обмена для opencart v2.3 с учетной системой по стандарту CommerceML [Поддержка] Назад 135 136 137 138 139 140 141 142 143 144 145 Вперед Сторінка 140 з 205 Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 40
DeGe Опубліковано: 28 серпня 2019 Share Опубліковано: 28 серпня 2019 (змінено) 59 минут назад, Kirillove сказал: orders (6).xml 6 \u043a\u0411 · 0 downloads Нашел такой, но он старый, для УНФ может не прокатить, УТ11 либо УТ10 схавать должна Посмотрел еще раз файл... он для УТ11 Спасибо! Мне дали образец из 1С там такая строчка <КоммерческаяИнформация xmlns="urn:1C.ru:commerceml_2" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" ВерсияСхемы="2.09" ДатаФормирования="2018-02-05T13:26:04" Ид="1"> Это говорит о том, какая версия УТ используется? Мне сообщили, что стоит УНФ 1.6 Змінено 28 серпня 2019 користувачем DeGe Надіслати Поділитися на інших сайтах More sharing options...
leskurs Опубліковано: 29 серпня 2019 Share Опубліковано: 29 серпня 2019 (змінено) В 28.08.2019 в 01:20, leskurs сказал: Вопрос к автору по заказам, можно ли как то выгрузить заказы с 2-3 разными статусами, а не только с одним? в общем кому надо изменения в 2 файлах admin/controller/extension/module/exchange1c.php export/exchange1c.php в изменения не вникал, оплачено Автору, можно добавить в релиз controller-exchange1c.php export-exchange1c.php Змінено 29 серпня 2019 користувачем leskurs Надіслати Поділитися на інших сайтах More sharing options...
Recommended Posts