Dobromila Опубліковано: 2 червня 2017 Share Опубліковано: 2 червня 2017 Здравствуйте. Подскажите, пожалуйста, будет ли модуль работать, 1с у нас розница 8.3 версия 2.1, opencart 2.1.0.1? И будет ли работать с модулем Связанные опции, у нас идет связь цвет-размер? Надіслати Поділитися на інших сайтах More sharing options...
Kirillove Опубліковано: 2 червня 2017 Автор Share Опубліковано: 2 червня 2017 22 часа назад, SoundMonster сказал: Пожалуйста! В личку киньте файл .cf я проверю у себя сначала, так быстрее найду ошибку 1 Надіслати Поділитися на інших сайтах More sharing options... SoundMonster Опубліковано: 2 червня 2017 Share Опубліковано: 2 червня 2017 6 часов назад, Dobromila сказал: Здравствуйте. Подскажите, пожалуйста, будет ли модуль работать, 1с у нас розница 8.3 версия 2.1, opencart 2.1.0.1? И будет ли работать с модулем Связанные опции, у нас идет связь цвет-размер? На рознице выгрузка товара проходит, а вот с заказами проблема, сейчас разработчику кинул конфигурацию и он посмотрит, что можно сделать. Надіслати Поділитися на інших сайтах More sharing options... SusereN Опубліковано: 3 червня 2017 Share Опубліковано: 3 червня 2017 16 часов назад, SoundMonster сказал: Ребята, что у вас за проблемы, вы либо шаблоны кривые используете, либо модули кривые, покупайте все качественное, зря тему засоряете! 1С УНФ 1.6. OCstore 2.3 стоковая, вообще без изменений, модули отсюда. Надіслати Поділитися на інших сайтах More sharing options... Kirillove Опубліковано: 3 червня 2017 Автор Share Опубліковано: 3 червня 2017 В 02.06.2017 в 16:11, abadrozadub сказал: Еще такая ошибка пошла, но не уверен что это с обновлением связано. Ни у кого не встречалась? Коды у единиц измерений имеют международный стандарт или с потолка забиты в 1С? 1 Надіслати Поділитися на інших сайтах More sharing options... abadrozadub Опубліковано: 3 червня 2017 Share Опубліковано: 3 червня 2017 42 minutes ago, Kirillove said: Коды у единиц измерений имеют международный стандарт или с потолка забиты в 1С? Уточню. Надіслати Поділитися на інших сайтах More sharing options... SoundMonster Опубліковано: 3 червня 2017 Share Опубліковано: 3 червня 2017 Kirillove, Я вам в личку кинул конфигурацию. Посмотрите пожалуйста! Надіслати Поділитися на інших сайтах More sharing options... Kirillove Опубліковано: 3 червня 2017 Автор Share Опубліковано: 3 червня 2017 52 минуты назад, abadrozadub сказал: Уточню. Для версии 2.3 найдена ошибка при выводе общего остатка по всем складам... Возможно это она вылезла. Уже исправлена 1.6.3.11 1 Надіслати Поділитися на інших сайтах More sharing options... Kirillove Опубліковано: 3 червня 2017 Автор Share Опубліковано: 3 червня 2017 В 02.06.2017 в 15:36, abadrozadub сказал: Аналогично как у Furious Растет в прогрессии После отладки отключите лог... Если включен, то расти он и будет, настройте ротацию. Если лог в режиме отладки, то при большом обмене он может достигать размера несколько гигабайт. 1 Надіслати Поділитися на інших сайтах More sharing options... Kirillove Опубліковано: 3 червня 2017 Автор Share Опубліковано: 3 червня 2017 В 03.06.2017 в 00:20, Dobromila сказал: Здравствуйте. Подскажите, пожалуйста, будет ли модуль работать, 1с у нас розница 8.3 версия 2.1, opencart 2.1.0.1? И будет ли работать с модулем Связанные опции, у нас идет связь цвет-размер? То есть у Вас два свойства у характеристики? Работать будет, но только без модуля "связанные опций". Для этого включите режим загрузки характеристик "связанные опции" и произведите обмен, опции появятся и будут связаны между собой. На дефолтном шаблоне работает, если на вашем не заработало, тогда нужно подправить модификатор под ваш шаблон. 1 Надіслати Поділитися на інших сайтах More sharing options... Kirillove Опубліковано: 3 червня 2017 Автор Share Опубліковано: 3 червня 2017 В 02.06.2017 в 18:57, SusereN сказал: Доброго дня. Обновился на 1.6.3.10, выгрузка не проходит. Гружу вручную, получаю ошибку Откатился на 3.9 - всё успешно Ошибка была, потом исправил... поторопился после переделки заказов не все проверил... Проверил у себя для версии 2.3, функция есть, если у Вас в файле model/extension/exchange1c.php есть такая функция, проверьте public она или private. Она должна быть public. 1 Надіслати Поділитися на інших сайтах More sharing options... Kirillove Опубліковано: 3 червня 2017 Автор Share Опубліковано: 3 червня 2017 /** * ver 3 * update 2017-06-04 * Удаляет в кэше эту картинку */ private function deleteCacheImage($image_info) { if (!$image_info) { // Нечего удалять return false; } // Путь в папке кэш к картинке $path = str_replace(DIR_IMAGE, DIR_IMAGE . "cache/" , $image_info['dirname']); // Откроем папку для чтения $delete_files = array(); $dh = @opendir($path); // Если каталог не открывается if (!$dh) { $this->log("Каталог не существует: " . $path); return false; } while(($file = readdir($dh)) !== false) { $find = strstr($file, $image_info['filename']); if ($find != "") { $delete_files[] = $find; } } closedir($dh); if ($delete_files) { foreach ($delete_files as $filename) { unlink($path . "/" . $filename); $this->log("Удалена картинка из кэша: " . $filename); } } return true; } // deleteCacheImage() 1 Надіслати Поділитися на інших сайтах More sharing options... Kirillove Опубліковано: 3 червня 2017 Автор Share Опубліковано: 3 червня 2017 Обновленный модификатор для opencart 2.3 для модуля версий 1.6.3 Скрытый текст <modification> <name>Exchange Module for OpenCart 2.3</name> <version>1.6.3.11_oc2.3</version> <id>OpenCart Exchange</id> <author>KirilLoveVE</author> <link>https://github.com/KirilLoveVE/opencart2-exchange1c</link> <code>exchange1c</code> <file path="admin/controller/common/menu.php"> <operation> <search><![CDATA[$data['text_option'] = $this->language->get('text_option');]]></search> <add position="after"><![CDATA[$data['text_warehouse'] = $this->language->get('text_warehouse');]]></add> </operation> <operation> <search><![CDATA[$data['module'] = $this->url->link('extension/module', 'token=' . $this->session->data['token'], 'SSL');]]></search> <add position="after"><![CDATA[$data['exchange1c'] = $this->url->link('module/exchange1c', 'token=' . $this->session->data['token'], 'SSL');]]></add> </operation> <operation> <search><![CDATA[$data['option'] = $this->url->link('catalog/option', 'token=' . $this->session->data['token'], 'SSL');]]></search> <add position="after"><![CDATA[$data['warehouse'] = $this->url->link('catalog/warehouse', 'token=' . $this->session->data['token'], 'SSL');]]></add> </operation> </file> <file path="admin/view/template/common/menu.tpl"> <operation> <search><![CDATA[<li><a href="<?php echo $modification; ?>"><?php echo $text_modification; ?></a></li>]]></search> <add position="after"><![CDATA[ <li><a href="<?php echo $exchange1c; ?>">Exchange 1C 8.x</a></li>]]></add> </operation> <operation> <search><![CDATA[<li><a href="<?php echo $option; ?>"><?php echo $text_option; ?></a></li>]]></search> <add position="after"><![CDATA[ <li><a href="<?php echo $warehouse; ?>"><?php echo $text_warehouse; ?></a></li>]]></add> </operation> </file> <file path="admin/language/russian/common/menu.php"> <operation> <search><![CDATA[$_['text_option'] = 'Опции';]]></search> <add position="after"><![CDATA[$_['text_warehouse'] = 'Склады';]]></add> </operation> </file> <file path="admin/language/english/common/menu.php"> <operation> <search><![CDATA[$_['text_option'] = 'Options';]]></search> <add position="after"><![CDATA[$_['text_warehouse'] = 'Warehouses';]]></add> </operation> </file> <file path="system/library/image.php"> <operation> <search><![CDATA[$mime = $this->info['mime'];]]></search> <add position="replace"><![CDATA[$info = getimagesize($image); $mime = isset($info['mime']) ? $info['mime'] : '';]]></add> </operation> <operation> <search><![CDATA[imagecopy($this->image, $watermark, $watermark_pos_x, $watermark_pos_y, 0, 0, 120, 40);]]></search> <add position="replace"><![CDATA[imagecopy($this->image, $watermark, $watermark_pos_x, $watermark_pos_y, 0, 0, $watermark_width, $watermark_height);]]></add> </operation> </file> <file path="catalog/controller/product/product.php"> <operation> <search><![CDATA[if ($product_info['quantity'] <= 0) {]]></search> <add position="before"><![CDATA[ // +++ TESLA-CHITA $product_id = (int)$this->request->get['product_id']; // Характеристики $product_option_values = array(); $sql = "SELECT `pfv`.`product_feature_id`, `pov`.`product_option_id`, `pfv`.`product_option_value_id` FROM `" . DB_PREFIX . "product_feature_value` `pfv` LEFT JOIN `" . DB_PREFIX . "product_option_value` `pov` ON (`pfv`.`product_option_value_id` = `pov`.`product_option_value_id`) LEFT JOIN `" . DB_PREFIX . "option` `o` ON (`pov`.`option_id` = `o`.`option_id`) WHERE `pfv`.`product_id` = " . $this->request->get['product_id'] . " ORDER BY `o`.`sort_order`"; $query = $this->db->query($sql); $features = $query->rows; foreach ($features as $feature_value) { if (empty($product_option_values[$feature_value['product_option_value_id']])) { $product_option_values[$feature_value['product_option_value_id']] = array(); } foreach ($features as $feature_value1) { if ($feature_value1['product_feature_id'] == $feature_value['product_feature_id'] && $feature_value1['product_option_value_id'] <> $feature_value['product_option_value_id']) { $product_option_values[$feature_value['product_option_value_id']][] = $feature_value1['product_option_value_id']; } } } unset($query); $customer_group_id = $this->customer->isLogged()? $this->customer->getGroupId() : $this->config->get('config_customer_group_id'); $product_features_price = array(); $query = $this->db->query("SELECT `product_feature_id`, `price` FROM `" . DB_PREFIX . "product_price` WHERE `product_id` = " . (int)$this->request->get['product_id'] . " AND `customer_group_id` = " . $customer_group_id); $data['currency_data'] = array( 'symbol' => $this->currency->getSymbolRight($this->session->data['currency']), 'decimal' => $this->currency->getDecimalPlace($this->session->data['currency']), 'value' => $this->currency->getValue($this->session->data['currency']) ); $product_features_price = array(); $product_features_options = array(); $product_features_options_values = array(); foreach ($query->rows as $query_price) { $product_features_price[$query_price['product_feature_id']] = array( 'value' => $query_price['price'] * $data['currency_data']['value'], 'tax' => $this->tax->calculate($query_price['price'], $product_info['tax_class_id'], $this->config->get('config_tax')) * $data['currency_data']['value'] ); foreach ($features as $feature) { if ($feature['product_feature_id'] == $query_price['product_feature_id']) { if (!isset($product_features_options[$feature['product_feature_id']])) { $product_features_options[$feature['product_feature_id']] = array(); } $product_features_options[$feature['product_feature_id']][$feature['product_option_id']] = $feature['product_option_value_id']; $product_features_options_values[$feature['product_option_value_id']] = $feature['product_feature_id']; } } } $data['product_features_price'] = $product_features_price; $data['product_features_options'] = $product_features_options; $data['product_features_options_values'] = $product_features_options_values; // Остатки в базовой единице $product_quantity = array(); $product_units = array(); $quantity_total = 0; if ($this->config->get('config_stock_display') && !empty($product_features_options)) { $query = $this->db->query("SELECT * FROM `" . DB_PREFIX . "product_quantity` WHERE `product_id` = " . (int)$this->request->get['product_id']); foreach ($query->rows as $query_quantity) { if (!isset($product_quantity[$query_quantity['product_feature_id']])) { $product_quantity[$query_quantity['product_feature_id']] = array(); } $quantity = &$product_quantity[$query_quantity['product_feature_id']]; if (!isset($quantity[$query_quantity['warehouse_id']])) { $quantity[$query_quantity['warehouse_id']] = $query_quantity['quantity']; $quantity_total += $query_quantity['quantity']; } $query = $this->db->query("SELECT `u`.`name`, `u`.`rus_name1`, `pu`.`ratio`, `pu`.`product_feature_id`, `u`.`unit_id` FROM `" . DB_PREFIX . "product_unit` `pu` LEFT JOIN `" . DB_PREFIX . "unit` `u` ON (`pu`.`unit_id` = `u`.`unit_id`) WHERE `pu`.`product_id` = " . $product_id); if ($query->num_rows) { foreach ($query->rows as $row) { if (isset($product_units[$row['unit_id']])) continue; $product_units[$row['unit_id']] = array( 'rus_name' => $row['rus_name1'], 'name' => $row['name'], 'ratio' => $row['ratio'], 'product_feature_id' => $row['product_feature_id'] ); } } } } $product_quantity[0] = $quantity_total; $data['product_quantity'] = $product_quantity; $data['product_units'] = $product_units; // Список складов $sql = "SELECT * FROM `" . DB_PREFIX . "warehouse`"; $query = $this->db->query($sql); $data['warehouses'] = array(); foreach ($query->rows as $query_warehouse) { $data['warehouses'][$query_warehouse['warehouse_id']] = $query_warehouse['name']; } // --- TESLA-CHITA ]]></add> </operation> <operation> <search><![CDATA[$product_option_value_data[] = array(]]></search> <add position="before"><![CDATA[ // +++ TESLA-CHITA $class = ""; foreach ($product_option_values[$option_value['product_option_value_id']] as $value) { if (empty($class)) { $class = $value; } else { $class .= " " . $value; } } // --- TESLA-CHITA ]]></add> </operation> <operation> <search><![CDATA['product_option_value_id' => $option_value['product_option_value_id'],]]></search> <add position="after"><![CDATA[ // +++ TESLA-CHITA 'price_prefix' => $option_value['price_prefix'], 'class' => $class, // --- TESLA-CHITA]]></add> </operation> </file> <file path="catalog/model/catalog/product.php"> <operation> <search><![CDATA[public function getTotalProductSpecials() {]]></search> <add position="before"><![CDATA[ // +++ TESLA-CHITA public function getProductFeaturesPrice($product_id, $product_feature_id, $customer_group_id=0, $unit_id=0) { $str_customer_group_id = $customer_group_id ? " AND customer_group_id = " . $customer_group_id : ""; $str_unit_id = $unit_id? " AND unit_id = " . $unit_id : ""; $sql = "SELECT price FROM " . DB_PREFIX . "product_price WHERE product_id = " . $product_id . " AND product_feature_id = " . $product_feature_id . $str_customer_group_id . $str_unit_id; $this->log->write($sql); $query = $this->db->query($sql); if ($query->num_rows) { return $query->rows; } else { return 0; } } // --- TESLA-CHITA ]]></add> </operation> </file> <file path="admin/model/sale/order.php"> <operation> <search><![CDATA['order_id' => $order_query->row['order_id'],]]></search> <add position="after"><![CDATA[ // +++ TESLA-CHITA 'payment_inn' => isset($order_query->row['payment_inn']) ? $order_query->row['payment_inn'] : "", 'shipping_kpp' => isset($order_query->row['shipping_inn']) ? $order_query->row['shipping_inn'] : "", 'patronymic' => isset($order_query->row['patronymic']) ? $order_query->row['patronymic'] : "", 'payment_patronymic' => isset($order_query->row['payment_patronymic']) ? $order_query->row['payment_patronymic'] : "", 'shipping_patronymic' => isset($order_query->row['shipping_patronymic']) ? $order_query->row['shipping_patronymic'] : "", // --- TESLA-CHITA]]></add> </operation> </file> <file path="system/library/cart.php"> <operation> <search><![CDATA[$price = $product_query->row['price'];]]></search> <add position="replace"><![CDATA[// +++ TESLA-CHITA //-$price = $product_query->row['price']; $cart_option = json_decode($cart['option']); $product_feature_id = $this->getProductFeatureId($cart_option); if ($product_feature_id) { $customer_group_id = $this->customer->isLogged()? $this->customer->getGroupId() : $this->config->get('config_customer_group_id'); $price = $this->getProductFeaturesPrice($cart['product_id'], $product_feature_id, $customer_group_id); } else { $price = $product_query->row['price']; } // --- TESLA-CHITA]]></add> </operation> <operation> <search><![CDATA[ public function getProducts() {]]></search> <add position="before"><![CDATA[ // +++ TESLA-CHITA private function getProductFeaturesPrice($product_id, $product_feature_id, $customer_group_id=0, $unit_id=0) { $str_customer_group_id = $customer_group_id ? " AND customer_group_id = " . $customer_group_id : ""; $str_unit_id = $unit_id? " AND unit_id = " . $unit_id : ""; $sql = "SELECT price FROM " . DB_PREFIX . "product_price WHERE product_id = " . $product_id . " AND product_feature_id = " . $product_feature_id . $str_customer_group_id . $str_unit_id; $query = $this->db->query($sql); if ($query->num_rows == 1) { return $query->row['price']; } else { return 0; } } private function getProductFeatureId($options) { $where = ""; foreach ($options as $product_option_value_id) { $where .= $where ? ",".$product_option_value_id : $product_option_value_id; } if (!$where) return 0; $sql = "SELECT product_feature_id FROM " . DB_PREFIX . "product_feature_value WHERE product_option_value_id IN (" . $where . ") GROUP BY product_feature_id"; $query = $this->db->query($sql); if ($query->num_rows == 1) { return $query->row['product_feature_id']; } return 0; } // --- TESLA-CHITA ]]></add> </operation> <operation> <search><![CDATA[if ($option_value_query->row['price_prefix'] == '+') {]]></search> <add position="replace"><![CDATA[if ($option_value_query->row['price_prefix'] == 'off+') {]]></add> </operation> <operation> <search><![CDATA[} elseif ($option_value_query->row['price_prefix'] == '-') {]]></search> <add position="replace"><![CDATA[} elseif ($option_value_query->row['price_prefix'] == 'off-') {]]></add> </operation> </file> <file path="catalog/view/theme/*/template/product/product.tpl"> <operation> <search><![CDATA[<li><?php echo $text_stock; ?> <?php echo $stock; ?></li>]]></search> <add position="replace"><![CDATA[<li id="stock"><?php echo $text_stock; ?> <?php echo $stock; ?></li>]]></add> </operation> <operation> <search><![CDATA[<h2><?php echo $price; ?></h2>]]></search> <add position="replace"><![CDATA[<h2 id="price"><?php echo $price; ?></h2>]]></add> </operation> <operation> <search><![CDATA[<li><?php echo $text_tax; ?> <?php echo $tax; ?></li>]]></search> <add position="replace"><![CDATA[<li id="tax"><?php echo $text_tax; ?> <?php echo $tax; ?></li>]]></add> </operation> <operation> <search><![CDATA[<li><?php echo $text_points; ?> <?php echo $points; ?></li>]]></search> <add position="replace"><![CDATA[<li id="points"><?php echo $text_points; ?> <?php echo $points; ?></li>]]></add> </operation> <operation> <search><![CDATA[<option value="<?php echo $option_value['product_option_value_id']; ?>">]]></search> <add position="replace"><![CDATA[<option class="<?php echo $option_value['class']; ?>" value="<?php echo $option_value['product_option_value_id']; ?>">]]></add> </operation> <operation> <search><![CDATA[<input type="radio" name="option[<?php echo $option['product_option_id']; ?>]"]]></search> <add position="replace"><![CDATA[<input class="<?php echo $option_value['class']; ?>" type="radio" name="option[<?php echo $option['product_option_id']; ?>]"]]></add> </operation> <operation> <search><![CDATA[<input type="checkbox" name="option[<?php echo $option['product_option_id']; ?>][]"]]></search> <add position="replace"><![CDATA[<input class="<?php echo $option_value['class']; ?>" type="checkbox" name="option[<?php echo $option['product_option_id']; ?>]"]]></add> </operation> <operation> <search><![CDATA[<input type="hidden" name="product_id" value="<?php echo $product_id; ?>" />]]></search> <add position="after"><![CDATA[ <input type="hidden" name="product_feature_id" value="0" /> <input type="hidden" name="unit_id" value="0" /> ]]></add> </operation> <operation> <search><![CDATA[$(document).ready(function() {]]></search> <add position="before"><![CDATA[var text_stock = "<?php echo $text_stock; ?>"; var text_tax = "<?php echo $text_tax; ?>"; <?php if (isset($warehouses)) { echo "var \$warehouses = {"; foreach ($warehouses as $warehouse_id => $name) { echo "'" . $warehouse_id . "':'" . $name . "',"; } echo "}\n"; } ?> <?php if ($options) {?> //------------------------------------------------------------------------------------------------------------------------------ // Определение переменных для характеристик var $options_type = {<?php foreach ($options as $option) { echo $option['product_option_id'].":'".$option['type']."',"; }?>}; var options_order = [<?php foreach ($options as $option) { echo $option['product_option_id'].","; }?>]; var $options_required = {<?php foreach ($options as $option) { echo $option['product_option_id'].":true,"; }?>}; var $options = {<?php foreach ($product_features_options as $product_feature_id => $feature) { $str_value = $product_feature_id.":{"; foreach ($feature as $product_option_id => $product_option_value_id) { $str_value .= $product_option_id.":".$product_option_value_id.","; } $str_value .= "},"; echo $str_value; } echo "};\n";?> // Тут хранится id выбранной характеристики var product_feature_id = 0; var unit_id = 0; <?php $str_features = "var \$features = {"; $str_price = "var \$price = {"; $str_quantity = "// quantity{product_feature_id:{warehouse_id:{unit_id:quantity}}}\n"; $quantity_total = 0; $str_quantity .= "var \$quantity = {"; foreach ($product_features_options as $product_feature_id => $feature_option) { // Цены $str_price .= "'" . $product_feature_id . "':{'value':" . $product_features_price[$product_feature_id]['value'] . ",'tax':" . $product_features_price[$product_feature_id]['tax'] . "},"; // Характеристики $str_features .= "'" . implode("_", $feature_option) . "':" . $product_feature_id . ","; // Остатки $quantity_array = isset($product_quantity[$product_feature_id]) ? $product_quantity[$product_feature_id] : array(); $str_quantity .= "'" . $product_feature_id . "':"; $str_quantity .= "{"; foreach ($quantity_array as $warehouse_id => $quantity) { $str_quantity .= "'" . $warehouse_id . "':" . $quantity . ","; $quantity_total += $quantity; } $str_quantity .= "},"; } echo $str_features . "};\n"; echo $str_price . "};\n"; echo $str_quantity . "};\n"; echo "var quantity_total = " . $quantity_total . ";\n"; echo "var \$product_units = {"; $num = 1; foreach ($product_units as $unit_id => $unit) { if ($unit['ratio'] == 1) { echo "0:{'unit_id':'" . $unit_id . "','name':'" . $unit['rus_name'] . "','ratio':".$unit['ratio']."},"; } else { echo $num . ":{'unit_id':'" . $unit_id . "','name':'" . $unit['rus_name'] . "','ratio':".$unit['ratio']."},"; $num++; } } echo "};\n"; echo "var \$currency_data = {'symbol':'".$currency_data['symbol']."','decimal':".$currency_data['decimal']."};\n"; ?> //------------------------------------------------------------------------------------------------------------------------------ // Функция отображает остатки по складам // Возвращает строковую переменную в которой перечислены названия всех складов с остатками и единицами измерений function displayQuantity() { if ($.type($quantity[product_feature_id]) == "string") { // Если переменная строка, то есть нет складов, возвращается только количество return $quantity[product_feature_id]; } else { var str = ""; var quantity_warehouse = 0; var str_war = ""; // Базовая единица if ($product_units[0]['name']) { str_unit = " ("+$product_units[0]['name']+")"; } else { str_unit = ""; } // Перебираем все остатки по складам $.each($quantity[product_feature_id],function(warehouse_id, product_quantity) { // Нет складов, если warehouse_id = 0 if (warehouse_id == "0") { // Перебираем все единицы измерений $.each(product_quantity,function(unit_id, quantity) { //str += quantity+" ("+$product_units[unit_id]+"),"; str += "\n" + quantity; }); } // Остатки в выбранной единице else if (unit_id != 0) { // Название склада str_war = " Склад: "+$warehouses[warehouse_id]+": "; } else { if (product_quantity > 0) { quantity_warehouse++; str_war += " "+$warehouses[warehouse_id]+" = "+product_quantity+str_unit; } } }); if (quantity_warehouse > 0) { str = " "+quantity_total+str_unit+" в "+quantity_warehouse+" магазинах: ("+str_war+")"; } else if (quantity_total > 0) { str = " "+quantity_total+str_unit+" по опциям: " + $quantity[product_feature_id][0]; } else { str = " нет в наличии"; } return str; } } // displayQuantity() //------------------------------------------------------------------------------------------------------------------------------ // Функция отображает на странице цену, налоги, остатки, // а также, для передачи в корзину, устанавливает значение product_feature_id function displaySelect() { if (product_feature_id){ $('#price').text(Math.round($price[product_feature_id]['value']).toFixed($currency_data['decimal'])+$currency_data['symbol']); $('#tax').text(text_tax+" "+Math.round($price[product_feature_id]['tax']).toFixed($currency_data['decimal'])+$currency_data['symbol']); $('#stock').text(text_stock+" "+displayQuantity()); $('input[name=\'product_feature_id\']').val(product_feature_id); //$('input[name=\'unit_id\']').val($product_units[unit_id]); } else { $('#price').text(""); $('#tax').text(""); $('#stock').text(text_stock+" "+quantity_total+" ("+$product_units[0]['name']+")"); $('input[name=\'product_feature_id\']').val(0); //$('input[name=\'unit_id\']').val(0); } } // displaySelect() //------------------------------------------------------------------------------------------------------------------------------ // Функция очищает все опции и разблокирует их, сбрасывает ид характеристики, а также обновляет надписи на страничке function clearOptions() { // Перебираем все опции $.each($options_type,function(product_option_id, value) { if (value == "select") { // Делаем доступным опцию $('select[name="option['+product_option_id+']"]').attr("disabled",false); // Сбрасываем выбор, по-умолчанию будет выбран первый элемент $('select[name="option['+product_option_id+']"]').val(''); // Делаем доступным все значения опции $('select[name="option['+product_option_id+']"] option').each(function(){ $(this).removeAttr("disabled"); }); } else { // Делаем доступным опцию $('input[name="option['+product_option_id+']"]').attr("disabled",false); // Снимаем выбор со всех значений $('input[name="option['+product_option_id+']"]').attr('checked', false); } $options_required[product_option_id] = true; }); // Проверка на обязательные опции checkRequired(); // Сбрасываем выбранную характеристику product_feature_id = 0; // Обновляем надписи на страничке displaySelect(); } // clearOptions() //------------------------------------------------------------------------------------------------------------------------------ // Функция проверяет и устанавливает какие опции обязательные, бывает что некоторые характеристики имеют разное количество опций function checkRequired() { // Перебираем все опции $.each($options_required,function(product_option_id, required) { if ($options_type[product_option_id] == "select") { // Получаем элемент в котором устанавливается класс обязательной опции $form = $('select[name="option['+product_option_id+']"]').parents("div.form-group"); // Если опция должна быть обязательной, а она не содержит класс "required", устанавливает этот класс или наоборот убираем его if (required && !$form.hasClass("required")) { $form.addClass("required"); } else if (!required && $form.hasClass("required")) { $form.removeClass("required"); } } else { // Получаем элемент в котором устанавливается класс обязательной опции $form = $('input[name="option['+product_option_id+']"]').parents("div.form-group"); // Если опция должна быть обязательной, а она не содержит класс "required", устанавливает этот класс или наоборот убираем его if (required && !$form.hasClass("required")) { $form.addClass("required"); } else if (!required && $form.hasClass("required")) { $form.removeClass("required"); } } }); } // checkRequired() //------------------------------------------------------------------------------------------------------------------------------ // Функция возвращает выбранные опции значений в виде объекта // Возвращает $option_values - объект с опция и значениями function getOptionValues() { var $option_values = {}; // Перебираем опции в том порядке в каком они заданы на сайте $.each(options_order,function(index, product_option_id) { if ($options_type[product_option_id] == 'select') { // Если опция типа select $option_values[product_option_id] = $('select[name="option['+product_option_id+']"] :selected').val(); } else { // Если опция типа input $option_values[product_option_id] = $('input[name="option['+product_option_id+']"]:checked').val(); } }); return $option_values; } // getOptionValues() //------------------------------------------------------------------------------------------------------------------------------ // Функция по выбранным опциям возвращает product_feature_id // $option_values - объект с опциями и значений // Возвращает ид характеристики, если вариант выбранныхопций не существует ни в одной характеристики, то вернет 0 function getProductFeature($option_values) { var new_product_feature_id = 0; $.each($options,function(feature_id, $product_options) { // Количество совпадений var matches = 0; // Перебираем все опции характеристики $.each($product_options,function(product_option_id, product_option_value_id) { // Ищем совпадение значений if ($option_values[product_option_id] == product_option_value_id) { matches ++; } }); // Если совпали все опции if (matches == options_order.length) { // Сохраним значение характеристики где совпали все опции new_product_feature_id = feature_id; // Прервем цикл return false; } }); return new_product_feature_id; } // getProductFeature() //------------------------------------------------------------------------------------------------------------------------------ // Функция устанавливает доступность опции типа input и ее значения // current_product_option_value_id - текущее выбранное значение опции // current_option_id - текущая опция в которой выбрано значение // $option_values - объект в котором заданы все значения опций текущей характеристики // Возвращает значение текущей опции function setAccessInputOption(current_option_id, current_product_option_value_id, $option_values) { var val = 0; var required = false; // Перебираем все значения опций $('div#input-option'+current_option_id+' div label input').each(function(index){ // Если в классе не содержится значение выбранной опции, то отключаем эту опцию и снимаем флажок if (!$(this).hasClass(current_product_option_value_id) && (current_product_option_value_id)) { $(this).attr("disabled",true); $(this).prop("checked",false); } else { required = true; // Включаем,если была отключена ранее $(this).attr("disabled",false); // Если есть в варианте текущее значение опции if ($option_values[current_option_id] == $(this).val()) { // И еще не выбрано значение if (!val) { val = $(this).val(); $(this).prop("checked",true); } else { // Если значение уже было установлено, то с других опций снимаем выбор $(this).prop("checked",false); } } else { // Если вариант не содержит значение, снимаем выбор $(this).prop("checked",false); //$(this).attr("disabled",true); } } }); $options_required[current_option_id] = required; return val; } // setAccessSelectOption() //------------------------------------------------------------------------------------------------------------------------------ // Функция устанавливает доступность опции типа select и ее значения // current_product_option_value_id - текущее выбранное значение опции // current_option_id - текущая опция в которой выбрано значение // $option_values - объект в котором заданы все значения опций текущей характеристики // Возвращает значение текущей опции function setAccessSelectOption(current_option_id, current_product_option_value_id, $option_values) { var val = 0; var required = false; // Перебираем все значения опций $('select#input-option'+current_option_id+' option').each(function(index){ // Если в классе не содержится значение выбранной опции, // и есть само значение и не первое, тогда отключаем эту опцию и снимаем флажок if (!$(this).hasClass(current_product_option_value_id) && (current_product_option_value_id) && index > 0) { $(this).attr("disabled",true); $(this).prop("selected",false); } else { required = true; // Значение содержится в классе, значит разблокируем если был заблокирован $(this).attr("disabled",false); // Если не было ранее выбрано значение, и не первое, // и в варианте для этой опции есть текущее значение if (!val && index > 0 && $option_values[current_option_id] == $(this).val()) { // Записываем выбранное значение val = $(this).val(); // Выбираем его в селекте $(this).prop("selected",true); } } }); $options_required[current_option_id] = required; return val; } // setAccessSelectOption() //------------------------------------------------------------------------------------------------------------------------------ // Функция устанавливает доступность опций и их значений // current_product_option_value_id - текущее выбранное значение опции // current_option_id - текущая опция в которой выбрано значение // $option_values - объект в котором заданы все значения опций текущей характеристики // Возвращает объект $option_values, теоретически он не меняется, оставлено временно для тестирования function setAccessOptions(current_product_option_value_id, current_option_id, $option_values) { // Выберем опции по варианту $.each(options_order,function(index, product_option_id) { if (current_option_id == product_option_id) { $option_values[product_option_id] = current_product_option_value_id; } else { if ($options_type[product_option_id] == 'select') { // Установим доступность значений в опции типа select //$option_values[product_option_id] = setAccessSelectOption(product_option_id, current_product_option_value_id, $option_values); setAccessSelectOption(product_option_id, current_product_option_value_id, $option_values); } else { // Установим доступность значений в опции типа input //$option_values[product_option_id] = setAccessInputOption(product_option_id, current_product_option_value_id, $option_values); setAccessInputOption(product_option_id, current_product_option_value_id, $option_values); } } }); return $option_values; } // setAccessOptions() //------------------------------------------------------------------------------------------------------------------------------ // Функция получает первый вариант опция по выбранному значению одной из опций // product_option_value_id - значение выбранной опции // Возвращает объект (index = product_option_id, value = product_option_value_id) function getRightOption(product_option_value_id) { // Тут хранится вариант опций выбранной характеристики var $option_values = {}; // Перебирем все опции $.each($options, function(sel_product_feature_id, $product_options) { // Прервем цикл, если ид характеристики уже определена if (product_feature_id) { return false; } // Перебираем все опции характеристики $.each($product_options, function(option_id, sel_product_option_value_id) { // Если значение неопределено, берем первую попавшуюся характеристику if (product_option_value_id == undefined) { // Запишем id характеристики, чтобы потом передать ее в корзину product_feature_id = sel_product_feature_id; // Получим вариант опций и значений этой характеристики $option_values = $product_options; // Прервем цикл return false; } // Если совпало значение опции в первой попавшейся характеристики, тогда выбираем ее, и получаем остальные значения опций else if (sel_product_option_value_id == product_option_value_id) { // Запишем id характеристики, чтобы потом передать ее в корзину product_feature_id = sel_product_feature_id; // Получим вариант опций и значений этой характеристики $option_values = $product_options; // Прервем цикл return false; } }); }); return $option_values; } // getRightOption() //------------------------------------------------------------------------------------------------------------------------------ // Функция вызывается при изменении любой опции // current_option_id - это номер опции в которой выбрано значение // selected - выбранное значение опции, product_option_value_id // type - тип опции, может иметь значение: select, input, radio, image function selectOption(current_option_id, selected, type) { // Объект опций с выбранными значениями (index = опция, value = значение) var $option_values = {}; // Получим существующие значения опций $option_values = getOptionValues(); // Проверим вариант и получим id характеристики, если вариант неверный, тогда id = 0 product_feature_id = getProductFeature($option_values); // Если опции не соответствуют ни одной характеристики, выставляем другие опции по первому совпадению в первой найденой характеристики if (!product_feature_id) { // Получим вариант опции по выбранному значению одной из опций // option_values это объект index = product_option_id, value = product_option_value_id $option_values = getRightOption(selected); // Устанавливает доступность значений всех опций setAccessOptions(selected, current_option_id, $option_values); } // Проверим опции на обязательные checkRequired(); // Отображает выбранные данные displaySelect(); } <?php } ?> ]]></add> </operation> <operation> <search><![CDATA[$(document).ready(function() {]]></search> <add position="after"><![CDATA[<?php if ($options) {?> // Кнопки очистки опций, под каждый шаблон возможно придется править //$('select[name="option[9]"]').parent('div').before('<div class="form-group"><a href="#" id="clear_options">Очистить опции</a></div>'); $('div#input-option7').parent('div').after('<div class="form-group"><a href="#" id="clear_options">Очистить опции</a></div>'); //$('div#form-group').parent('div').after('<div class="form-group"><a href="#" id="clear_options">Очистить опции</a></div>'); $('#product').find('h3').after('<div class="form-group"><a href="#" id="clear_options">Очистить опции</a></div>'); <?php foreach ($options as $option) { ?> //------------------------------------------------------------------------------------------------------------------------------ // Функция обрабатывает значение при выборе опции <?php $select_type = $option['type'] == "select" ? "select" : "input"; $html = " $('".$select_type."[name=\"option[".$option['product_option_id']."]\"]').change(function(){\n"; $html .= " var selected = ".($select_type == "select" ? "$(':selected', this).val();" : "this.value;") . "\n"; $html .= " selectOption(".$option['product_option_id'].",selected,'".$select_type."');\n"; $html .= " });\n\n"; echo $html; } ?> $('#product').on('click', '#clear_options', function(e){ e.preventDefault(); clearOptions(); }); selectOption(); <?php } ?> ]]></add> </operation> </file> </modification> 2 Надіслати Поділитися на інших сайтах More sharing options... Kirillove Опубліковано: 4 червня 2017 Автор Share Опубліковано: 4 червня 2017 Kirillove, затираются картинки товаров если не ставлю галочки "выгружать картинки" в 1с, это недочет моей версии 1.6.3.6 или так задумано? В последней версии модуля это исправлено? если да, то какие примерно строки нужно заменитьИзменил опцию в настройках, теперь и физически на диске картинки проверяет, и не будет даже распаковывать если обмен картинками отключен.Отправлено с моего Power Five Evo через Tapatalk 2 Надіслати Поділитися на інших сайтах More sharing options... abadrozadub Опубліковано: 4 червня 2017 Share Опубліковано: 4 червня 2017 13 hours ago, Kirillove said: Для версии 2.3 найдена ошибка при выводе общего остатка по всем складам... Возможно это она вылезла. Уже исправлена 1.6.3.11 Но у меня версия 2.1.0.2 (rs.1) Надіслати Поділитися на інших сайтах More sharing options... abadrozadub Опубліковано: 4 червня 2017 Share Опубліковано: 4 червня 2017 13 hours ago, Kirillove said: После отладки отключите лог... Если включен, то расти он и будет, настройте ротацию. Если лог в режиме отладки, то при большом обмене он может достигать размера несколько гигабайт. Попробую, но опять же, обмен минимальный. А вот собственно ошибка которая заполняет файл error.log 2017-06-03 19:18:13 - PHP Notice: Undefined variable: dir in /admin/model/tool/exchange1c.php on line 3091 2017-06-03 19:18:13 - PHP Warning: readdir() expects parameter 1 to be resource, null given in /admin/model/tool/exchange1c.php on line 3091 Надіслати Поділитися на інших сайтах More sharing options... Kirillove Опубліковано: 4 червня 2017 Автор Share Опубліковано: 4 червня 2017 В 02.06.2017 в 18:57, SusereN сказал: Доброго дня. Обновился на 1.6.3.10, выгрузка не проходит. Гружу вручную, получаю ошибку Откатился на 3.9 - всё успешно Нашел ошибку, перед этой строчкой вставь : для opencart 2.1: $this->load->model('tool/exchange1c'); для opencart 2.3 $this->load->model('extension/exchange1c'); И там далее в этой функции есть такая же строчка, ее удалите 1 Надіслати Поділитися на інших сайтах More sharing options... AAK Опубліковано: 4 червня 2017 Share Опубліковано: 4 червня 2017 Большое спасибо за проделанную работу. Настроил выгрузку из Управление производственным предприятием 1.3 (1.3.89.1). Версия модуля 1.6.3.10. Почему-то не всегда вставляются описания к товарам. Методом проб и ошибок нашел нижеприведенный код. Вывел в лог $this->log($this->ERROR) - пустое значение, но SEO был сгенерирован. В чем ошибка не разобрался, просто закомментировал //if ($this->ERROR) return false; // SEO формируем когда известен product_id и товар записан $update = $this->seoGenerateProduct($data); //if ($this->ERROR) return false; if ($update || $new) { // Обновляем описание товара после генерации SEO $this->setProductDescription($data, $new); } return true; } // setProduct() Еще заметил, если изменить в 1с описание товара и произвести обмен, описание на сайте меняется, но при этом картинка исчезает. Если загрузка полная, все нормально. 1с не выгружает картинку, если она не менялась. Надіслати Поділитися на інших сайтах More sharing options... uvers Опубліковано: 5 червня 2017 Share Опубліковано: 5 червня 2017 (змінено) Всем доброго дня. Автору огромное спасибо за проделанную работу!! Теперь, собственно вопрос: ocStore 2.1.0.2 скачал и поставил opencart2.1-exchange1c_1.6.3.10.ocmod. После установки открыл товары и сразу получил ошибку Undefined index: affiliate_commission in /var/www/admin/www/dev2.ru/vqmod/vqcache/vq2-system_storage_modification_admin_controller_catalog_product.php on line 486 Почистил кэш vqmod/vqcache. Не помогло Пожалуйста, подскажите, в чем может быть проблема? Змінено 5 червня 2017 користувачем uvers Надіслати Поділитися на інших сайтах More sharing options... Blade Опубліковано: 5 червня 2017 Share Опубліковано: 5 червня 2017 (змінено) Виталий, добрый день, нужна помощь что эначит эта ошибка ? версия последняя 1.6.3.10 1С Управление нашей фирмой, редакция 1.6 (1.6.10.43) 2017-06-05 15:43:42 - 3.830 Mb | 7121 | >>>>>>>>>>>>>>>>>>>> НАЧАЛО ЗАГРУЗКИ ДАННЫХ <<<<<<<<<<<<<<<<<<<< 2017-06-05 15:43:42 - PHP Unknown: Object of class LibXMLError could not be converted to string in /var/www/*******/data/www/**********.ru/admin/model/tool/exchange1c.php on line 7137 2017-06-05 15:43:42 - 3.832 Mb | 7138 | Ошибка при загрузке файла: /var/www/*******/data/www/***********.ru/system/storage/cache/exchange1c/import.xml 2017-06-05 15:43:42 - 3.832 Mb | 0036 | Файл не является стандартом XML, подробности в журнале 2017-06-05 15:43:42 - modeImport(): Ошибка загрузки файла: /var/www/form/data/www/test.form-m.ru/system/storage/cache/exchange1c/import.xml Змінено 5 червня 2017 користувачем Blade 1 Надіслати Поділитися на інших сайтах More sharing options... rutskoifp Опубліковано: 5 червня 2017 Share Опубліковано: 5 червня 2017 Здравствуйте! Очень нужна помощь! При установке модуля 1.6.3.10 выдает ошибку! Модуль был установлен, но после обновления все пошло наперекосяк, решил снести и установить снова, результат плачевный.... теперь вообще не могу установить модуль! Движок 2.3 вот лог сайта [Mon Jun 05 19:43:14.234928 2017] [:error] [pid 8896] [client 78.29.9.4:34940] PHP Fatal error: Uncaught exception 'Exception' with message 'Error: Duplicate column name 'product_feature_id'<br />Error No: 1060<br />ALTER TABLE `oc_cart` ADD `product_feature_id` INT( 11 ) NOT NULL DEFAULT 0 AFTER `option`' in /home/c/xxx/public_html/system/library/db/mysqli.php:40\nStack trace:\n#0 /home/xxx/xxx/public_html/system/library/db.php(16): DB\\MySQLi->query('ALTER TABLE `o...', Array)\n#1 /home/c/xxx/public_html/admin/controller/extension/module/exchange1c.php(812): DB->query('ALTER TABLE `o...')\n#2 [internal function]: ControllerExtensionModuleExchange1c->install(Array)\n#3 /home/c/xxx/public_html/vqmod/vqcache/vq2-system_storage_modification_system_engine_action.php(51): call_user_func_array(Array, Array)\n#4 /home/c/xxx/public_html/vqmod/vqcache/vq2-system_storage_modification_system_engine_loader.php(24): Action->execute(Object(Registry), Array)\n#5 /home/c/xxx/public_html/admin/contro in /home/c/xxx/public_html/system/library/db/mysqli.php on line 40, referer: http://xxx/admin/index.php?route=extension/extension&token=3bmKhu87YSMU5NFbaAY2ceApVUb7Wo1j Помогите кто знает как решить, буду очень признателен! Надіслати Поділитися на інших сайтах More sharing options... rutskoifp Опубліковано: 5 червня 2017 Share Опубліковано: 5 червня 2017 (змінено) 1 час назад, rutskoifp сказал: Здравствуйте! Очень нужна помощь! При установке модуля 1.6.3.10 выдает ошибку! Модуль был установлен, но после обновления все пошло наперекосяк, решил снести и установить снова, результат плачевный.... теперь вообще не могу установить модуль! Движок 2.3 вот лог сайта [Mon Jun 05 19:43:14.234928 2017] [:error] [pid 8896] [client 78.29.9.4:34940] PHP Fatal error: Uncaught exception 'Exception' with message 'Error: Duplicate column name 'product_feature_id'<br />Error No: 1060<br />ALTER TABLE `oc_cart` ADD `product_feature_id` INT( 11 ) NOT NULL DEFAULT 0 AFTER `option`' in /home/c/xxx/public_html/system/library/db/mysqli.php:40\nStack trace:\n#0 /home/xxx/xxx/public_html/system/library/db.php(16): DB\\MySQLi->query('ALTER TABLE `o...', Array)\n#1 /home/c/xxx/public_html/admin/controller/extension/module/exchange1c.php(812): DB->query('ALTER TABLE `o...')\n#2 [internal function]: ControllerExtensionModuleExchange1c->install(Array)\n#3 /home/c/xxx/public_html/vqmod/vqcache/vq2-system_storage_modification_system_engine_action.php(51): call_user_func_array(Array, Array)\n#4 /home/c/xxx/public_html/vqmod/vqcache/vq2-system_storage_modification_system_engine_loader.php(24): Action->execute(Object(Registry), Array)\n#5 /home/c/xxx/public_html/admin/contro in /home/c/xxx/public_html/system/library/db/mysqli.php on line 40, referer: http://xxx/admin/index.php?route=extension/extension&token=3bmKhu87YSMU5NFbaAY2ceApVUb7Wo1j Помогите кто знает как решить, буду очень признателен! Решено! Удалил все устанавливаемые модулем таблицы, и изменил изменяемые им значение! модуль установился! Пробуем работать дальше...)))) Единственное, модуль не прописался в админке-во вкладке дополнение! Выгрузка идет порядка 20 мин, выкрузилось все кроме товаров! (УНФ 1.6.10.44) Для справки товаров около 1000 Змінено 5 червня 2017 користувачем rutskoifp Надіслати Поділитися на інших сайтах More sharing options... Furious Опубліковано: 5 червня 2017 Share Опубліковано: 5 червня 2017 Доброго времени суток. А когда планируете 1.6.3.11? установил 1.6.3.10. обновил на модификатор 1.6.3.11 вами выложенный (не знаю можно ли так ) Ошибка та же: 2017-06-05 22:24:30 - PHP Warning: opendir(/home/***/test/image/cache/import_files/23): failed to open dir: No such file or directory in /home/***/test/admin/model/extension/exchange1c.php on line 3091 2017-06-05 22:24:30 - PHP Warning: readdir() expects parameter 1 to be resource, boolean given in /home/***/test/admin/model/extension/exchange1c.php on line 3092 2017-06-05 22:24:30 - PHP Warning: readdir() expects parameter 1 to be resource, boolean given in /home/***/test/admin/model/extension/exchange1c.php on line 3092 2017-06-05 22:24:30 - PHP Warning: readdir() expects parameter 1 to be resource, boolean given in /home/***/test/admin/model/extension/exchange1c.php on line 3092 2017-06-05 22:24:30 - PHP Warning: readdir() expects parameter 1 to be resource, boolean given in /home/***/test/admin/model/extension/exchange1c.php on line 3092 2017-06-05 22:24:30 - PHP Warning: readdir() expects parameter 1 to be resource, boolean given in 1с УТ3.1 Украина OcStore ocStore 2.3.0.2.2 Шаблон Демо Стабильно работает 1.6.3.9 но без присвоения атрибутов Надіслати Поділитися на інших сайтах More sharing options... Kirillove Опубліковано: 6 червня 2017 Автор Share Опубліковано: 6 червня 2017 Решено! Удалил все устанавливаемые модулем таблицы, и изменил изменяемые им значение! модуль установился! Пробуем работать дальше...)))) Единственное, модуль не прописался в админке-во вкладке дополнение! Выгрузка идет порядка 20 мин, выкрузилось все кроме товаров! (УНФ 1.6.10.44) Для справки товаров около 1000Многовато для 1000 товаров, на моем сервере вроде было не дольше 5 мин, сегодня вечером уже точно выложу 1.6.3.11 и проверим ещё раз вместе. А лог есть? Очень интересно посмотреть что он там долго делает.Отправлено с моего Power Five Evo через Tapatalk Надіслати Поділитися на інших сайтах More sharing options... Kirillove Опубліковано: 6 червня 2017 Автор Share Опубліковано: 6 червня 2017 Доброго времени суток. А когда планируете 1.6.3.11? установил 1.6.3.10. обновил на модификатор 1.6.3.11 вами выложенный (не знаю можно ли так [emoji4] ) Ошибка та же:2017-06-05 22:24:30 - PHP Warning: opendir(/home/***/test/image/cache/import_files/23): failed to open dir: No such file or directory in /home/***/test/admin/model/extension/exchange1c.php on line 30912017-06-05 22:24:30 - PHP Warning: readdir() expects parameter 1 to be resource, boolean given in /home/***/test/admin/model/extension/exchange1c.php on line 30922017-06-05 22:24:30 - PHP Warning: readdir() expects parameter 1 to be resource, boolean given in /home/***/test/admin/model/extension/exchange1c.php on line 30922017-06-05 22:24:30 - PHP Warning: readdir() expects parameter 1 to be resource, boolean given in /home/***/test/admin/model/extension/exchange1c.php on line 30922017-06-05 22:24:30 - PHP Warning: readdir() expects parameter 1 to be resource, boolean given in /home/***/test/admin/model/extension/exchange1c.php on line 30922017-06-05 22:24:30 - PHP Warning: readdir() expects parameter 1 to be resource, boolean given in 1с УТ3.1 Украина OcStore ocStore 2.3.0.2.2 Шаблон ДемоСтабильно работает 1.6.3.9 но без присвоения атрибутовЭта проблема не в модификаторе, там рядом я функцию выложил заменой которой решит эту проблему сегодня уже точно выложу Навь версию, пришлось тщательно тестироватьОтправлено с моего Power Five Evo через Tapatalk 1 Надіслати Поділитися на інших сайтах More sharing options... 3 р dinox changed the title to Модуль обмена для opencart v2.3 с учетной системой по стандарту CommerceML [Поддержка] Назад 25 26 27 28 29 30 31 32 33 34 35 Вперед Сторінка 30 з 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 080 переглядів Sha 17 листопада 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 427 переглядів 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 061 перегляд 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 832 перегляди 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 і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність. Я даю згоду
SoundMonster Опубліковано: 2 червня 2017 Share Опубліковано: 2 червня 2017 6 часов назад, Dobromila сказал: Здравствуйте. Подскажите, пожалуйста, будет ли модуль работать, 1с у нас розница 8.3 версия 2.1, opencart 2.1.0.1? И будет ли работать с модулем Связанные опции, у нас идет связь цвет-размер? На рознице выгрузка товара проходит, а вот с заказами проблема, сейчас разработчику кинул конфигурацию и он посмотрит, что можно сделать. Надіслати Поділитися на інших сайтах More sharing options...
SusereN Опубліковано: 3 червня 2017 Share Опубліковано: 3 червня 2017 16 часов назад, SoundMonster сказал: Ребята, что у вас за проблемы, вы либо шаблоны кривые используете, либо модули кривые, покупайте все качественное, зря тему засоряете! 1С УНФ 1.6. OCstore 2.3 стоковая, вообще без изменений, модули отсюда. Надіслати Поділитися на інших сайтах More sharing options...
Kirillove Опубліковано: 3 червня 2017 Автор Share Опубліковано: 3 червня 2017 В 02.06.2017 в 16:11, abadrozadub сказал: Еще такая ошибка пошла, но не уверен что это с обновлением связано. Ни у кого не встречалась? Коды у единиц измерений имеют международный стандарт или с потолка забиты в 1С? 1 Надіслати Поділитися на інших сайтах More sharing options... abadrozadub Опубліковано: 3 червня 2017 Share Опубліковано: 3 червня 2017 42 minutes ago, Kirillove said: Коды у единиц измерений имеют международный стандарт или с потолка забиты в 1С? Уточню. Надіслати Поділитися на інших сайтах More sharing options... SoundMonster Опубліковано: 3 червня 2017 Share Опубліковано: 3 червня 2017 Kirillove, Я вам в личку кинул конфигурацию. Посмотрите пожалуйста! Надіслати Поділитися на інших сайтах More sharing options... Kirillove Опубліковано: 3 червня 2017 Автор Share Опубліковано: 3 червня 2017 52 минуты назад, abadrozadub сказал: Уточню. Для версии 2.3 найдена ошибка при выводе общего остатка по всем складам... Возможно это она вылезла. Уже исправлена 1.6.3.11 1 Надіслати Поділитися на інших сайтах More sharing options... Kirillove Опубліковано: 3 червня 2017 Автор Share Опубліковано: 3 червня 2017 В 02.06.2017 в 15:36, abadrozadub сказал: Аналогично как у Furious Растет в прогрессии После отладки отключите лог... Если включен, то расти он и будет, настройте ротацию. Если лог в режиме отладки, то при большом обмене он может достигать размера несколько гигабайт. 1 Надіслати Поділитися на інших сайтах More sharing options... Kirillove Опубліковано: 3 червня 2017 Автор Share Опубліковано: 3 червня 2017 В 03.06.2017 в 00:20, Dobromila сказал: Здравствуйте. Подскажите, пожалуйста, будет ли модуль работать, 1с у нас розница 8.3 версия 2.1, opencart 2.1.0.1? И будет ли работать с модулем Связанные опции, у нас идет связь цвет-размер? То есть у Вас два свойства у характеристики? Работать будет, но только без модуля "связанные опций". Для этого включите режим загрузки характеристик "связанные опции" и произведите обмен, опции появятся и будут связаны между собой. На дефолтном шаблоне работает, если на вашем не заработало, тогда нужно подправить модификатор под ваш шаблон. 1 Надіслати Поділитися на інших сайтах More sharing options... Kirillove Опубліковано: 3 червня 2017 Автор Share Опубліковано: 3 червня 2017 В 02.06.2017 в 18:57, SusereN сказал: Доброго дня. Обновился на 1.6.3.10, выгрузка не проходит. Гружу вручную, получаю ошибку Откатился на 3.9 - всё успешно Ошибка была, потом исправил... поторопился после переделки заказов не все проверил... Проверил у себя для версии 2.3, функция есть, если у Вас в файле model/extension/exchange1c.php есть такая функция, проверьте public она или private. Она должна быть public. 1 Надіслати Поділитися на інших сайтах More sharing options... Kirillove Опубліковано: 3 червня 2017 Автор Share Опубліковано: 3 червня 2017 /** * ver 3 * update 2017-06-04 * Удаляет в кэше эту картинку */ private function deleteCacheImage($image_info) { if (!$image_info) { // Нечего удалять return false; } // Путь в папке кэш к картинке $path = str_replace(DIR_IMAGE, DIR_IMAGE . "cache/" , $image_info['dirname']); // Откроем папку для чтения $delete_files = array(); $dh = @opendir($path); // Если каталог не открывается if (!$dh) { $this->log("Каталог не существует: " . $path); return false; } while(($file = readdir($dh)) !== false) { $find = strstr($file, $image_info['filename']); if ($find != "") { $delete_files[] = $find; } } closedir($dh); if ($delete_files) { foreach ($delete_files as $filename) { unlink($path . "/" . $filename); $this->log("Удалена картинка из кэша: " . $filename); } } return true; } // deleteCacheImage() 1 Надіслати Поділитися на інших сайтах More sharing options... Kirillove Опубліковано: 3 червня 2017 Автор Share Опубліковано: 3 червня 2017 Обновленный модификатор для opencart 2.3 для модуля версий 1.6.3 Скрытый текст <modification> <name>Exchange Module for OpenCart 2.3</name> <version>1.6.3.11_oc2.3</version> <id>OpenCart Exchange</id> <author>KirilLoveVE</author> <link>https://github.com/KirilLoveVE/opencart2-exchange1c</link> <code>exchange1c</code> <file path="admin/controller/common/menu.php"> <operation> <search><![CDATA[$data['text_option'] = $this->language->get('text_option');]]></search> <add position="after"><![CDATA[$data['text_warehouse'] = $this->language->get('text_warehouse');]]></add> </operation> <operation> <search><![CDATA[$data['module'] = $this->url->link('extension/module', 'token=' . $this->session->data['token'], 'SSL');]]></search> <add position="after"><![CDATA[$data['exchange1c'] = $this->url->link('module/exchange1c', 'token=' . $this->session->data['token'], 'SSL');]]></add> </operation> <operation> <search><![CDATA[$data['option'] = $this->url->link('catalog/option', 'token=' . $this->session->data['token'], 'SSL');]]></search> <add position="after"><![CDATA[$data['warehouse'] = $this->url->link('catalog/warehouse', 'token=' . $this->session->data['token'], 'SSL');]]></add> </operation> </file> <file path="admin/view/template/common/menu.tpl"> <operation> <search><![CDATA[<li><a href="<?php echo $modification; ?>"><?php echo $text_modification; ?></a></li>]]></search> <add position="after"><![CDATA[ <li><a href="<?php echo $exchange1c; ?>">Exchange 1C 8.x</a></li>]]></add> </operation> <operation> <search><![CDATA[<li><a href="<?php echo $option; ?>"><?php echo $text_option; ?></a></li>]]></search> <add position="after"><![CDATA[ <li><a href="<?php echo $warehouse; ?>"><?php echo $text_warehouse; ?></a></li>]]></add> </operation> </file> <file path="admin/language/russian/common/menu.php"> <operation> <search><![CDATA[$_['text_option'] = 'Опции';]]></search> <add position="after"><![CDATA[$_['text_warehouse'] = 'Склады';]]></add> </operation> </file> <file path="admin/language/english/common/menu.php"> <operation> <search><![CDATA[$_['text_option'] = 'Options';]]></search> <add position="after"><![CDATA[$_['text_warehouse'] = 'Warehouses';]]></add> </operation> </file> <file path="system/library/image.php"> <operation> <search><![CDATA[$mime = $this->info['mime'];]]></search> <add position="replace"><![CDATA[$info = getimagesize($image); $mime = isset($info['mime']) ? $info['mime'] : '';]]></add> </operation> <operation> <search><![CDATA[imagecopy($this->image, $watermark, $watermark_pos_x, $watermark_pos_y, 0, 0, 120, 40);]]></search> <add position="replace"><![CDATA[imagecopy($this->image, $watermark, $watermark_pos_x, $watermark_pos_y, 0, 0, $watermark_width, $watermark_height);]]></add> </operation> </file> <file path="catalog/controller/product/product.php"> <operation> <search><![CDATA[if ($product_info['quantity'] <= 0) {]]></search> <add position="before"><![CDATA[ // +++ TESLA-CHITA $product_id = (int)$this->request->get['product_id']; // Характеристики $product_option_values = array(); $sql = "SELECT `pfv`.`product_feature_id`, `pov`.`product_option_id`, `pfv`.`product_option_value_id` FROM `" . DB_PREFIX . "product_feature_value` `pfv` LEFT JOIN `" . DB_PREFIX . "product_option_value` `pov` ON (`pfv`.`product_option_value_id` = `pov`.`product_option_value_id`) LEFT JOIN `" . DB_PREFIX . "option` `o` ON (`pov`.`option_id` = `o`.`option_id`) WHERE `pfv`.`product_id` = " . $this->request->get['product_id'] . " ORDER BY `o`.`sort_order`"; $query = $this->db->query($sql); $features = $query->rows; foreach ($features as $feature_value) { if (empty($product_option_values[$feature_value['product_option_value_id']])) { $product_option_values[$feature_value['product_option_value_id']] = array(); } foreach ($features as $feature_value1) { if ($feature_value1['product_feature_id'] == $feature_value['product_feature_id'] && $feature_value1['product_option_value_id'] <> $feature_value['product_option_value_id']) { $product_option_values[$feature_value['product_option_value_id']][] = $feature_value1['product_option_value_id']; } } } unset($query); $customer_group_id = $this->customer->isLogged()? $this->customer->getGroupId() : $this->config->get('config_customer_group_id'); $product_features_price = array(); $query = $this->db->query("SELECT `product_feature_id`, `price` FROM `" . DB_PREFIX . "product_price` WHERE `product_id` = " . (int)$this->request->get['product_id'] . " AND `customer_group_id` = " . $customer_group_id); $data['currency_data'] = array( 'symbol' => $this->currency->getSymbolRight($this->session->data['currency']), 'decimal' => $this->currency->getDecimalPlace($this->session->data['currency']), 'value' => $this->currency->getValue($this->session->data['currency']) ); $product_features_price = array(); $product_features_options = array(); $product_features_options_values = array(); foreach ($query->rows as $query_price) { $product_features_price[$query_price['product_feature_id']] = array( 'value' => $query_price['price'] * $data['currency_data']['value'], 'tax' => $this->tax->calculate($query_price['price'], $product_info['tax_class_id'], $this->config->get('config_tax')) * $data['currency_data']['value'] ); foreach ($features as $feature) { if ($feature['product_feature_id'] == $query_price['product_feature_id']) { if (!isset($product_features_options[$feature['product_feature_id']])) { $product_features_options[$feature['product_feature_id']] = array(); } $product_features_options[$feature['product_feature_id']][$feature['product_option_id']] = $feature['product_option_value_id']; $product_features_options_values[$feature['product_option_value_id']] = $feature['product_feature_id']; } } } $data['product_features_price'] = $product_features_price; $data['product_features_options'] = $product_features_options; $data['product_features_options_values'] = $product_features_options_values; // Остатки в базовой единице $product_quantity = array(); $product_units = array(); $quantity_total = 0; if ($this->config->get('config_stock_display') && !empty($product_features_options)) { $query = $this->db->query("SELECT * FROM `" . DB_PREFIX . "product_quantity` WHERE `product_id` = " . (int)$this->request->get['product_id']); foreach ($query->rows as $query_quantity) { if (!isset($product_quantity[$query_quantity['product_feature_id']])) { $product_quantity[$query_quantity['product_feature_id']] = array(); } $quantity = &$product_quantity[$query_quantity['product_feature_id']]; if (!isset($quantity[$query_quantity['warehouse_id']])) { $quantity[$query_quantity['warehouse_id']] = $query_quantity['quantity']; $quantity_total += $query_quantity['quantity']; } $query = $this->db->query("SELECT `u`.`name`, `u`.`rus_name1`, `pu`.`ratio`, `pu`.`product_feature_id`, `u`.`unit_id` FROM `" . DB_PREFIX . "product_unit` `pu` LEFT JOIN `" . DB_PREFIX . "unit` `u` ON (`pu`.`unit_id` = `u`.`unit_id`) WHERE `pu`.`product_id` = " . $product_id); if ($query->num_rows) { foreach ($query->rows as $row) { if (isset($product_units[$row['unit_id']])) continue; $product_units[$row['unit_id']] = array( 'rus_name' => $row['rus_name1'], 'name' => $row['name'], 'ratio' => $row['ratio'], 'product_feature_id' => $row['product_feature_id'] ); } } } } $product_quantity[0] = $quantity_total; $data['product_quantity'] = $product_quantity; $data['product_units'] = $product_units; // Список складов $sql = "SELECT * FROM `" . DB_PREFIX . "warehouse`"; $query = $this->db->query($sql); $data['warehouses'] = array(); foreach ($query->rows as $query_warehouse) { $data['warehouses'][$query_warehouse['warehouse_id']] = $query_warehouse['name']; } // --- TESLA-CHITA ]]></add> </operation> <operation> <search><![CDATA[$product_option_value_data[] = array(]]></search> <add position="before"><![CDATA[ // +++ TESLA-CHITA $class = ""; foreach ($product_option_values[$option_value['product_option_value_id']] as $value) { if (empty($class)) { $class = $value; } else { $class .= " " . $value; } } // --- TESLA-CHITA ]]></add> </operation> <operation> <search><![CDATA['product_option_value_id' => $option_value['product_option_value_id'],]]></search> <add position="after"><![CDATA[ // +++ TESLA-CHITA 'price_prefix' => $option_value['price_prefix'], 'class' => $class, // --- TESLA-CHITA]]></add> </operation> </file> <file path="catalog/model/catalog/product.php"> <operation> <search><![CDATA[public function getTotalProductSpecials() {]]></search> <add position="before"><![CDATA[ // +++ TESLA-CHITA public function getProductFeaturesPrice($product_id, $product_feature_id, $customer_group_id=0, $unit_id=0) { $str_customer_group_id = $customer_group_id ? " AND customer_group_id = " . $customer_group_id : ""; $str_unit_id = $unit_id? " AND unit_id = " . $unit_id : ""; $sql = "SELECT price FROM " . DB_PREFIX . "product_price WHERE product_id = " . $product_id . " AND product_feature_id = " . $product_feature_id . $str_customer_group_id . $str_unit_id; $this->log->write($sql); $query = $this->db->query($sql); if ($query->num_rows) { return $query->rows; } else { return 0; } } // --- TESLA-CHITA ]]></add> </operation> </file> <file path="admin/model/sale/order.php"> <operation> <search><![CDATA['order_id' => $order_query->row['order_id'],]]></search> <add position="after"><![CDATA[ // +++ TESLA-CHITA 'payment_inn' => isset($order_query->row['payment_inn']) ? $order_query->row['payment_inn'] : "", 'shipping_kpp' => isset($order_query->row['shipping_inn']) ? $order_query->row['shipping_inn'] : "", 'patronymic' => isset($order_query->row['patronymic']) ? $order_query->row['patronymic'] : "", 'payment_patronymic' => isset($order_query->row['payment_patronymic']) ? $order_query->row['payment_patronymic'] : "", 'shipping_patronymic' => isset($order_query->row['shipping_patronymic']) ? $order_query->row['shipping_patronymic'] : "", // --- TESLA-CHITA]]></add> </operation> </file> <file path="system/library/cart.php"> <operation> <search><![CDATA[$price = $product_query->row['price'];]]></search> <add position="replace"><![CDATA[// +++ TESLA-CHITA //-$price = $product_query->row['price']; $cart_option = json_decode($cart['option']); $product_feature_id = $this->getProductFeatureId($cart_option); if ($product_feature_id) { $customer_group_id = $this->customer->isLogged()? $this->customer->getGroupId() : $this->config->get('config_customer_group_id'); $price = $this->getProductFeaturesPrice($cart['product_id'], $product_feature_id, $customer_group_id); } else { $price = $product_query->row['price']; } // --- TESLA-CHITA]]></add> </operation> <operation> <search><![CDATA[ public function getProducts() {]]></search> <add position="before"><![CDATA[ // +++ TESLA-CHITA private function getProductFeaturesPrice($product_id, $product_feature_id, $customer_group_id=0, $unit_id=0) { $str_customer_group_id = $customer_group_id ? " AND customer_group_id = " . $customer_group_id : ""; $str_unit_id = $unit_id? " AND unit_id = " . $unit_id : ""; $sql = "SELECT price FROM " . DB_PREFIX . "product_price WHERE product_id = " . $product_id . " AND product_feature_id = " . $product_feature_id . $str_customer_group_id . $str_unit_id; $query = $this->db->query($sql); if ($query->num_rows == 1) { return $query->row['price']; } else { return 0; } } private function getProductFeatureId($options) { $where = ""; foreach ($options as $product_option_value_id) { $where .= $where ? ",".$product_option_value_id : $product_option_value_id; } if (!$where) return 0; $sql = "SELECT product_feature_id FROM " . DB_PREFIX . "product_feature_value WHERE product_option_value_id IN (" . $where . ") GROUP BY product_feature_id"; $query = $this->db->query($sql); if ($query->num_rows == 1) { return $query->row['product_feature_id']; } return 0; } // --- TESLA-CHITA ]]></add> </operation> <operation> <search><![CDATA[if ($option_value_query->row['price_prefix'] == '+') {]]></search> <add position="replace"><![CDATA[if ($option_value_query->row['price_prefix'] == 'off+') {]]></add> </operation> <operation> <search><![CDATA[} elseif ($option_value_query->row['price_prefix'] == '-') {]]></search> <add position="replace"><![CDATA[} elseif ($option_value_query->row['price_prefix'] == 'off-') {]]></add> </operation> </file> <file path="catalog/view/theme/*/template/product/product.tpl"> <operation> <search><![CDATA[<li><?php echo $text_stock; ?> <?php echo $stock; ?></li>]]></search> <add position="replace"><![CDATA[<li id="stock"><?php echo $text_stock; ?> <?php echo $stock; ?></li>]]></add> </operation> <operation> <search><![CDATA[<h2><?php echo $price; ?></h2>]]></search> <add position="replace"><![CDATA[<h2 id="price"><?php echo $price; ?></h2>]]></add> </operation> <operation> <search><![CDATA[<li><?php echo $text_tax; ?> <?php echo $tax; ?></li>]]></search> <add position="replace"><![CDATA[<li id="tax"><?php echo $text_tax; ?> <?php echo $tax; ?></li>]]></add> </operation> <operation> <search><![CDATA[<li><?php echo $text_points; ?> <?php echo $points; ?></li>]]></search> <add position="replace"><![CDATA[<li id="points"><?php echo $text_points; ?> <?php echo $points; ?></li>]]></add> </operation> <operation> <search><![CDATA[<option value="<?php echo $option_value['product_option_value_id']; ?>">]]></search> <add position="replace"><![CDATA[<option class="<?php echo $option_value['class']; ?>" value="<?php echo $option_value['product_option_value_id']; ?>">]]></add> </operation> <operation> <search><![CDATA[<input type="radio" name="option[<?php echo $option['product_option_id']; ?>]"]]></search> <add position="replace"><![CDATA[<input class="<?php echo $option_value['class']; ?>" type="radio" name="option[<?php echo $option['product_option_id']; ?>]"]]></add> </operation> <operation> <search><![CDATA[<input type="checkbox" name="option[<?php echo $option['product_option_id']; ?>][]"]]></search> <add position="replace"><![CDATA[<input class="<?php echo $option_value['class']; ?>" type="checkbox" name="option[<?php echo $option['product_option_id']; ?>]"]]></add> </operation> <operation> <search><![CDATA[<input type="hidden" name="product_id" value="<?php echo $product_id; ?>" />]]></search> <add position="after"><![CDATA[ <input type="hidden" name="product_feature_id" value="0" /> <input type="hidden" name="unit_id" value="0" /> ]]></add> </operation> <operation> <search><![CDATA[$(document).ready(function() {]]></search> <add position="before"><![CDATA[var text_stock = "<?php echo $text_stock; ?>"; var text_tax = "<?php echo $text_tax; ?>"; <?php if (isset($warehouses)) { echo "var \$warehouses = {"; foreach ($warehouses as $warehouse_id => $name) { echo "'" . $warehouse_id . "':'" . $name . "',"; } echo "}\n"; } ?> <?php if ($options) {?> //------------------------------------------------------------------------------------------------------------------------------ // Определение переменных для характеристик var $options_type = {<?php foreach ($options as $option) { echo $option['product_option_id'].":'".$option['type']."',"; }?>}; var options_order = [<?php foreach ($options as $option) { echo $option['product_option_id'].","; }?>]; var $options_required = {<?php foreach ($options as $option) { echo $option['product_option_id'].":true,"; }?>}; var $options = {<?php foreach ($product_features_options as $product_feature_id => $feature) { $str_value = $product_feature_id.":{"; foreach ($feature as $product_option_id => $product_option_value_id) { $str_value .= $product_option_id.":".$product_option_value_id.","; } $str_value .= "},"; echo $str_value; } echo "};\n";?> // Тут хранится id выбранной характеристики var product_feature_id = 0; var unit_id = 0; <?php $str_features = "var \$features = {"; $str_price = "var \$price = {"; $str_quantity = "// quantity{product_feature_id:{warehouse_id:{unit_id:quantity}}}\n"; $quantity_total = 0; $str_quantity .= "var \$quantity = {"; foreach ($product_features_options as $product_feature_id => $feature_option) { // Цены $str_price .= "'" . $product_feature_id . "':{'value':" . $product_features_price[$product_feature_id]['value'] . ",'tax':" . $product_features_price[$product_feature_id]['tax'] . "},"; // Характеристики $str_features .= "'" . implode("_", $feature_option) . "':" . $product_feature_id . ","; // Остатки $quantity_array = isset($product_quantity[$product_feature_id]) ? $product_quantity[$product_feature_id] : array(); $str_quantity .= "'" . $product_feature_id . "':"; $str_quantity .= "{"; foreach ($quantity_array as $warehouse_id => $quantity) { $str_quantity .= "'" . $warehouse_id . "':" . $quantity . ","; $quantity_total += $quantity; } $str_quantity .= "},"; } echo $str_features . "};\n"; echo $str_price . "};\n"; echo $str_quantity . "};\n"; echo "var quantity_total = " . $quantity_total . ";\n"; echo "var \$product_units = {"; $num = 1; foreach ($product_units as $unit_id => $unit) { if ($unit['ratio'] == 1) { echo "0:{'unit_id':'" . $unit_id . "','name':'" . $unit['rus_name'] . "','ratio':".$unit['ratio']."},"; } else { echo $num . ":{'unit_id':'" . $unit_id . "','name':'" . $unit['rus_name'] . "','ratio':".$unit['ratio']."},"; $num++; } } echo "};\n"; echo "var \$currency_data = {'symbol':'".$currency_data['symbol']."','decimal':".$currency_data['decimal']."};\n"; ?> //------------------------------------------------------------------------------------------------------------------------------ // Функция отображает остатки по складам // Возвращает строковую переменную в которой перечислены названия всех складов с остатками и единицами измерений function displayQuantity() { if ($.type($quantity[product_feature_id]) == "string") { // Если переменная строка, то есть нет складов, возвращается только количество return $quantity[product_feature_id]; } else { var str = ""; var quantity_warehouse = 0; var str_war = ""; // Базовая единица if ($product_units[0]['name']) { str_unit = " ("+$product_units[0]['name']+")"; } else { str_unit = ""; } // Перебираем все остатки по складам $.each($quantity[product_feature_id],function(warehouse_id, product_quantity) { // Нет складов, если warehouse_id = 0 if (warehouse_id == "0") { // Перебираем все единицы измерений $.each(product_quantity,function(unit_id, quantity) { //str += quantity+" ("+$product_units[unit_id]+"),"; str += "\n" + quantity; }); } // Остатки в выбранной единице else if (unit_id != 0) { // Название склада str_war = " Склад: "+$warehouses[warehouse_id]+": "; } else { if (product_quantity > 0) { quantity_warehouse++; str_war += " "+$warehouses[warehouse_id]+" = "+product_quantity+str_unit; } } }); if (quantity_warehouse > 0) { str = " "+quantity_total+str_unit+" в "+quantity_warehouse+" магазинах: ("+str_war+")"; } else if (quantity_total > 0) { str = " "+quantity_total+str_unit+" по опциям: " + $quantity[product_feature_id][0]; } else { str = " нет в наличии"; } return str; } } // displayQuantity() //------------------------------------------------------------------------------------------------------------------------------ // Функция отображает на странице цену, налоги, остатки, // а также, для передачи в корзину, устанавливает значение product_feature_id function displaySelect() { if (product_feature_id){ $('#price').text(Math.round($price[product_feature_id]['value']).toFixed($currency_data['decimal'])+$currency_data['symbol']); $('#tax').text(text_tax+" "+Math.round($price[product_feature_id]['tax']).toFixed($currency_data['decimal'])+$currency_data['symbol']); $('#stock').text(text_stock+" "+displayQuantity()); $('input[name=\'product_feature_id\']').val(product_feature_id); //$('input[name=\'unit_id\']').val($product_units[unit_id]); } else { $('#price').text(""); $('#tax').text(""); $('#stock').text(text_stock+" "+quantity_total+" ("+$product_units[0]['name']+")"); $('input[name=\'product_feature_id\']').val(0); //$('input[name=\'unit_id\']').val(0); } } // displaySelect() //------------------------------------------------------------------------------------------------------------------------------ // Функция очищает все опции и разблокирует их, сбрасывает ид характеристики, а также обновляет надписи на страничке function clearOptions() { // Перебираем все опции $.each($options_type,function(product_option_id, value) { if (value == "select") { // Делаем доступным опцию $('select[name="option['+product_option_id+']"]').attr("disabled",false); // Сбрасываем выбор, по-умолчанию будет выбран первый элемент $('select[name="option['+product_option_id+']"]').val(''); // Делаем доступным все значения опции $('select[name="option['+product_option_id+']"] option').each(function(){ $(this).removeAttr("disabled"); }); } else { // Делаем доступным опцию $('input[name="option['+product_option_id+']"]').attr("disabled",false); // Снимаем выбор со всех значений $('input[name="option['+product_option_id+']"]').attr('checked', false); } $options_required[product_option_id] = true; }); // Проверка на обязательные опции checkRequired(); // Сбрасываем выбранную характеристику product_feature_id = 0; // Обновляем надписи на страничке displaySelect(); } // clearOptions() //------------------------------------------------------------------------------------------------------------------------------ // Функция проверяет и устанавливает какие опции обязательные, бывает что некоторые характеристики имеют разное количество опций function checkRequired() { // Перебираем все опции $.each($options_required,function(product_option_id, required) { if ($options_type[product_option_id] == "select") { // Получаем элемент в котором устанавливается класс обязательной опции $form = $('select[name="option['+product_option_id+']"]').parents("div.form-group"); // Если опция должна быть обязательной, а она не содержит класс "required", устанавливает этот класс или наоборот убираем его if (required && !$form.hasClass("required")) { $form.addClass("required"); } else if (!required && $form.hasClass("required")) { $form.removeClass("required"); } } else { // Получаем элемент в котором устанавливается класс обязательной опции $form = $('input[name="option['+product_option_id+']"]').parents("div.form-group"); // Если опция должна быть обязательной, а она не содержит класс "required", устанавливает этот класс или наоборот убираем его if (required && !$form.hasClass("required")) { $form.addClass("required"); } else if (!required && $form.hasClass("required")) { $form.removeClass("required"); } } }); } // checkRequired() //------------------------------------------------------------------------------------------------------------------------------ // Функция возвращает выбранные опции значений в виде объекта // Возвращает $option_values - объект с опция и значениями function getOptionValues() { var $option_values = {}; // Перебираем опции в том порядке в каком они заданы на сайте $.each(options_order,function(index, product_option_id) { if ($options_type[product_option_id] == 'select') { // Если опция типа select $option_values[product_option_id] = $('select[name="option['+product_option_id+']"] :selected').val(); } else { // Если опция типа input $option_values[product_option_id] = $('input[name="option['+product_option_id+']"]:checked').val(); } }); return $option_values; } // getOptionValues() //------------------------------------------------------------------------------------------------------------------------------ // Функция по выбранным опциям возвращает product_feature_id // $option_values - объект с опциями и значений // Возвращает ид характеристики, если вариант выбранныхопций не существует ни в одной характеристики, то вернет 0 function getProductFeature($option_values) { var new_product_feature_id = 0; $.each($options,function(feature_id, $product_options) { // Количество совпадений var matches = 0; // Перебираем все опции характеристики $.each($product_options,function(product_option_id, product_option_value_id) { // Ищем совпадение значений if ($option_values[product_option_id] == product_option_value_id) { matches ++; } }); // Если совпали все опции if (matches == options_order.length) { // Сохраним значение характеристики где совпали все опции new_product_feature_id = feature_id; // Прервем цикл return false; } }); return new_product_feature_id; } // getProductFeature() //------------------------------------------------------------------------------------------------------------------------------ // Функция устанавливает доступность опции типа input и ее значения // current_product_option_value_id - текущее выбранное значение опции // current_option_id - текущая опция в которой выбрано значение // $option_values - объект в котором заданы все значения опций текущей характеристики // Возвращает значение текущей опции function setAccessInputOption(current_option_id, current_product_option_value_id, $option_values) { var val = 0; var required = false; // Перебираем все значения опций $('div#input-option'+current_option_id+' div label input').each(function(index){ // Если в классе не содержится значение выбранной опции, то отключаем эту опцию и снимаем флажок if (!$(this).hasClass(current_product_option_value_id) && (current_product_option_value_id)) { $(this).attr("disabled",true); $(this).prop("checked",false); } else { required = true; // Включаем,если была отключена ранее $(this).attr("disabled",false); // Если есть в варианте текущее значение опции if ($option_values[current_option_id] == $(this).val()) { // И еще не выбрано значение if (!val) { val = $(this).val(); $(this).prop("checked",true); } else { // Если значение уже было установлено, то с других опций снимаем выбор $(this).prop("checked",false); } } else { // Если вариант не содержит значение, снимаем выбор $(this).prop("checked",false); //$(this).attr("disabled",true); } } }); $options_required[current_option_id] = required; return val; } // setAccessSelectOption() //------------------------------------------------------------------------------------------------------------------------------ // Функция устанавливает доступность опции типа select и ее значения // current_product_option_value_id - текущее выбранное значение опции // current_option_id - текущая опция в которой выбрано значение // $option_values - объект в котором заданы все значения опций текущей характеристики // Возвращает значение текущей опции function setAccessSelectOption(current_option_id, current_product_option_value_id, $option_values) { var val = 0; var required = false; // Перебираем все значения опций $('select#input-option'+current_option_id+' option').each(function(index){ // Если в классе не содержится значение выбранной опции, // и есть само значение и не первое, тогда отключаем эту опцию и снимаем флажок if (!$(this).hasClass(current_product_option_value_id) && (current_product_option_value_id) && index > 0) { $(this).attr("disabled",true); $(this).prop("selected",false); } else { required = true; // Значение содержится в классе, значит разблокируем если был заблокирован $(this).attr("disabled",false); // Если не было ранее выбрано значение, и не первое, // и в варианте для этой опции есть текущее значение if (!val && index > 0 && $option_values[current_option_id] == $(this).val()) { // Записываем выбранное значение val = $(this).val(); // Выбираем его в селекте $(this).prop("selected",true); } } }); $options_required[current_option_id] = required; return val; } // setAccessSelectOption() //------------------------------------------------------------------------------------------------------------------------------ // Функция устанавливает доступность опций и их значений // current_product_option_value_id - текущее выбранное значение опции // current_option_id - текущая опция в которой выбрано значение // $option_values - объект в котором заданы все значения опций текущей характеристики // Возвращает объект $option_values, теоретически он не меняется, оставлено временно для тестирования function setAccessOptions(current_product_option_value_id, current_option_id, $option_values) { // Выберем опции по варианту $.each(options_order,function(index, product_option_id) { if (current_option_id == product_option_id) { $option_values[product_option_id] = current_product_option_value_id; } else { if ($options_type[product_option_id] == 'select') { // Установим доступность значений в опции типа select //$option_values[product_option_id] = setAccessSelectOption(product_option_id, current_product_option_value_id, $option_values); setAccessSelectOption(product_option_id, current_product_option_value_id, $option_values); } else { // Установим доступность значений в опции типа input //$option_values[product_option_id] = setAccessInputOption(product_option_id, current_product_option_value_id, $option_values); setAccessInputOption(product_option_id, current_product_option_value_id, $option_values); } } }); return $option_values; } // setAccessOptions() //------------------------------------------------------------------------------------------------------------------------------ // Функция получает первый вариант опция по выбранному значению одной из опций // product_option_value_id - значение выбранной опции // Возвращает объект (index = product_option_id, value = product_option_value_id) function getRightOption(product_option_value_id) { // Тут хранится вариант опций выбранной характеристики var $option_values = {}; // Перебирем все опции $.each($options, function(sel_product_feature_id, $product_options) { // Прервем цикл, если ид характеристики уже определена if (product_feature_id) { return false; } // Перебираем все опции характеристики $.each($product_options, function(option_id, sel_product_option_value_id) { // Если значение неопределено, берем первую попавшуюся характеристику if (product_option_value_id == undefined) { // Запишем id характеристики, чтобы потом передать ее в корзину product_feature_id = sel_product_feature_id; // Получим вариант опций и значений этой характеристики $option_values = $product_options; // Прервем цикл return false; } // Если совпало значение опции в первой попавшейся характеристики, тогда выбираем ее, и получаем остальные значения опций else if (sel_product_option_value_id == product_option_value_id) { // Запишем id характеристики, чтобы потом передать ее в корзину product_feature_id = sel_product_feature_id; // Получим вариант опций и значений этой характеристики $option_values = $product_options; // Прервем цикл return false; } }); }); return $option_values; } // getRightOption() //------------------------------------------------------------------------------------------------------------------------------ // Функция вызывается при изменении любой опции // current_option_id - это номер опции в которой выбрано значение // selected - выбранное значение опции, product_option_value_id // type - тип опции, может иметь значение: select, input, radio, image function selectOption(current_option_id, selected, type) { // Объект опций с выбранными значениями (index = опция, value = значение) var $option_values = {}; // Получим существующие значения опций $option_values = getOptionValues(); // Проверим вариант и получим id характеристики, если вариант неверный, тогда id = 0 product_feature_id = getProductFeature($option_values); // Если опции не соответствуют ни одной характеристики, выставляем другие опции по первому совпадению в первой найденой характеристики if (!product_feature_id) { // Получим вариант опции по выбранному значению одной из опций // option_values это объект index = product_option_id, value = product_option_value_id $option_values = getRightOption(selected); // Устанавливает доступность значений всех опций setAccessOptions(selected, current_option_id, $option_values); } // Проверим опции на обязательные checkRequired(); // Отображает выбранные данные displaySelect(); } <?php } ?> ]]></add> </operation> <operation> <search><![CDATA[$(document).ready(function() {]]></search> <add position="after"><![CDATA[<?php if ($options) {?> // Кнопки очистки опций, под каждый шаблон возможно придется править //$('select[name="option[9]"]').parent('div').before('<div class="form-group"><a href="#" id="clear_options">Очистить опции</a></div>'); $('div#input-option7').parent('div').after('<div class="form-group"><a href="#" id="clear_options">Очистить опции</a></div>'); //$('div#form-group').parent('div').after('<div class="form-group"><a href="#" id="clear_options">Очистить опции</a></div>'); $('#product').find('h3').after('<div class="form-group"><a href="#" id="clear_options">Очистить опции</a></div>'); <?php foreach ($options as $option) { ?> //------------------------------------------------------------------------------------------------------------------------------ // Функция обрабатывает значение при выборе опции <?php $select_type = $option['type'] == "select" ? "select" : "input"; $html = " $('".$select_type."[name=\"option[".$option['product_option_id']."]\"]').change(function(){\n"; $html .= " var selected = ".($select_type == "select" ? "$(':selected', this).val();" : "this.value;") . "\n"; $html .= " selectOption(".$option['product_option_id'].",selected,'".$select_type."');\n"; $html .= " });\n\n"; echo $html; } ?> $('#product').on('click', '#clear_options', function(e){ e.preventDefault(); clearOptions(); }); selectOption(); <?php } ?> ]]></add> </operation> </file> </modification> 2 Надіслати Поділитися на інших сайтах More sharing options... Kirillove Опубліковано: 4 червня 2017 Автор Share Опубліковано: 4 червня 2017 Kirillove, затираются картинки товаров если не ставлю галочки "выгружать картинки" в 1с, это недочет моей версии 1.6.3.6 или так задумано? В последней версии модуля это исправлено? если да, то какие примерно строки нужно заменитьИзменил опцию в настройках, теперь и физически на диске картинки проверяет, и не будет даже распаковывать если обмен картинками отключен.Отправлено с моего Power Five Evo через Tapatalk 2 Надіслати Поділитися на інших сайтах More sharing options... abadrozadub Опубліковано: 4 червня 2017 Share Опубліковано: 4 червня 2017 13 hours ago, Kirillove said: Для версии 2.3 найдена ошибка при выводе общего остатка по всем складам... Возможно это она вылезла. Уже исправлена 1.6.3.11 Но у меня версия 2.1.0.2 (rs.1) Надіслати Поділитися на інших сайтах More sharing options... abadrozadub Опубліковано: 4 червня 2017 Share Опубліковано: 4 червня 2017 13 hours ago, Kirillove said: После отладки отключите лог... Если включен, то расти он и будет, настройте ротацию. Если лог в режиме отладки, то при большом обмене он может достигать размера несколько гигабайт. Попробую, но опять же, обмен минимальный. А вот собственно ошибка которая заполняет файл error.log 2017-06-03 19:18:13 - PHP Notice: Undefined variable: dir in /admin/model/tool/exchange1c.php on line 3091 2017-06-03 19:18:13 - PHP Warning: readdir() expects parameter 1 to be resource, null given in /admin/model/tool/exchange1c.php on line 3091 Надіслати Поділитися на інших сайтах More sharing options... Kirillove Опубліковано: 4 червня 2017 Автор Share Опубліковано: 4 червня 2017 В 02.06.2017 в 18:57, SusereN сказал: Доброго дня. Обновился на 1.6.3.10, выгрузка не проходит. Гружу вручную, получаю ошибку Откатился на 3.9 - всё успешно Нашел ошибку, перед этой строчкой вставь : для opencart 2.1: $this->load->model('tool/exchange1c'); для opencart 2.3 $this->load->model('extension/exchange1c'); И там далее в этой функции есть такая же строчка, ее удалите 1 Надіслати Поділитися на інших сайтах More sharing options... AAK Опубліковано: 4 червня 2017 Share Опубліковано: 4 червня 2017 Большое спасибо за проделанную работу. Настроил выгрузку из Управление производственным предприятием 1.3 (1.3.89.1). Версия модуля 1.6.3.10. Почему-то не всегда вставляются описания к товарам. Методом проб и ошибок нашел нижеприведенный код. Вывел в лог $this->log($this->ERROR) - пустое значение, но SEO был сгенерирован. В чем ошибка не разобрался, просто закомментировал //if ($this->ERROR) return false; // SEO формируем когда известен product_id и товар записан $update = $this->seoGenerateProduct($data); //if ($this->ERROR) return false; if ($update || $new) { // Обновляем описание товара после генерации SEO $this->setProductDescription($data, $new); } return true; } // setProduct() Еще заметил, если изменить в 1с описание товара и произвести обмен, описание на сайте меняется, но при этом картинка исчезает. Если загрузка полная, все нормально. 1с не выгружает картинку, если она не менялась. Надіслати Поділитися на інших сайтах More sharing options... uvers Опубліковано: 5 червня 2017 Share Опубліковано: 5 червня 2017 (змінено) Всем доброго дня. Автору огромное спасибо за проделанную работу!! Теперь, собственно вопрос: ocStore 2.1.0.2 скачал и поставил opencart2.1-exchange1c_1.6.3.10.ocmod. После установки открыл товары и сразу получил ошибку Undefined index: affiliate_commission in /var/www/admin/www/dev2.ru/vqmod/vqcache/vq2-system_storage_modification_admin_controller_catalog_product.php on line 486 Почистил кэш vqmod/vqcache. Не помогло Пожалуйста, подскажите, в чем может быть проблема? Змінено 5 червня 2017 користувачем uvers Надіслати Поділитися на інших сайтах More sharing options... Blade Опубліковано: 5 червня 2017 Share Опубліковано: 5 червня 2017 (змінено) Виталий, добрый день, нужна помощь что эначит эта ошибка ? версия последняя 1.6.3.10 1С Управление нашей фирмой, редакция 1.6 (1.6.10.43) 2017-06-05 15:43:42 - 3.830 Mb | 7121 | >>>>>>>>>>>>>>>>>>>> НАЧАЛО ЗАГРУЗКИ ДАННЫХ <<<<<<<<<<<<<<<<<<<< 2017-06-05 15:43:42 - PHP Unknown: Object of class LibXMLError could not be converted to string in /var/www/*******/data/www/**********.ru/admin/model/tool/exchange1c.php on line 7137 2017-06-05 15:43:42 - 3.832 Mb | 7138 | Ошибка при загрузке файла: /var/www/*******/data/www/***********.ru/system/storage/cache/exchange1c/import.xml 2017-06-05 15:43:42 - 3.832 Mb | 0036 | Файл не является стандартом XML, подробности в журнале 2017-06-05 15:43:42 - modeImport(): Ошибка загрузки файла: /var/www/form/data/www/test.form-m.ru/system/storage/cache/exchange1c/import.xml Змінено 5 червня 2017 користувачем Blade 1 Надіслати Поділитися на інших сайтах More sharing options... rutskoifp Опубліковано: 5 червня 2017 Share Опубліковано: 5 червня 2017 Здравствуйте! Очень нужна помощь! При установке модуля 1.6.3.10 выдает ошибку! Модуль был установлен, но после обновления все пошло наперекосяк, решил снести и установить снова, результат плачевный.... теперь вообще не могу установить модуль! Движок 2.3 вот лог сайта [Mon Jun 05 19:43:14.234928 2017] [:error] [pid 8896] [client 78.29.9.4:34940] PHP Fatal error: Uncaught exception 'Exception' with message 'Error: Duplicate column name 'product_feature_id'<br />Error No: 1060<br />ALTER TABLE `oc_cart` ADD `product_feature_id` INT( 11 ) NOT NULL DEFAULT 0 AFTER `option`' in /home/c/xxx/public_html/system/library/db/mysqli.php:40\nStack trace:\n#0 /home/xxx/xxx/public_html/system/library/db.php(16): DB\\MySQLi->query('ALTER TABLE `o...', Array)\n#1 /home/c/xxx/public_html/admin/controller/extension/module/exchange1c.php(812): DB->query('ALTER TABLE `o...')\n#2 [internal function]: ControllerExtensionModuleExchange1c->install(Array)\n#3 /home/c/xxx/public_html/vqmod/vqcache/vq2-system_storage_modification_system_engine_action.php(51): call_user_func_array(Array, Array)\n#4 /home/c/xxx/public_html/vqmod/vqcache/vq2-system_storage_modification_system_engine_loader.php(24): Action->execute(Object(Registry), Array)\n#5 /home/c/xxx/public_html/admin/contro in /home/c/xxx/public_html/system/library/db/mysqli.php on line 40, referer: http://xxx/admin/index.php?route=extension/extension&token=3bmKhu87YSMU5NFbaAY2ceApVUb7Wo1j Помогите кто знает как решить, буду очень признателен! Надіслати Поділитися на інших сайтах More sharing options... rutskoifp Опубліковано: 5 червня 2017 Share Опубліковано: 5 червня 2017 (змінено) 1 час назад, rutskoifp сказал: Здравствуйте! Очень нужна помощь! При установке модуля 1.6.3.10 выдает ошибку! Модуль был установлен, но после обновления все пошло наперекосяк, решил снести и установить снова, результат плачевный.... теперь вообще не могу установить модуль! Движок 2.3 вот лог сайта [Mon Jun 05 19:43:14.234928 2017] [:error] [pid 8896] [client 78.29.9.4:34940] PHP Fatal error: Uncaught exception 'Exception' with message 'Error: Duplicate column name 'product_feature_id'<br />Error No: 1060<br />ALTER TABLE `oc_cart` ADD `product_feature_id` INT( 11 ) NOT NULL DEFAULT 0 AFTER `option`' in /home/c/xxx/public_html/system/library/db/mysqli.php:40\nStack trace:\n#0 /home/xxx/xxx/public_html/system/library/db.php(16): DB\\MySQLi->query('ALTER TABLE `o...', Array)\n#1 /home/c/xxx/public_html/admin/controller/extension/module/exchange1c.php(812): DB->query('ALTER TABLE `o...')\n#2 [internal function]: ControllerExtensionModuleExchange1c->install(Array)\n#3 /home/c/xxx/public_html/vqmod/vqcache/vq2-system_storage_modification_system_engine_action.php(51): call_user_func_array(Array, Array)\n#4 /home/c/xxx/public_html/vqmod/vqcache/vq2-system_storage_modification_system_engine_loader.php(24): Action->execute(Object(Registry), Array)\n#5 /home/c/xxx/public_html/admin/contro in /home/c/xxx/public_html/system/library/db/mysqli.php on line 40, referer: http://xxx/admin/index.php?route=extension/extension&token=3bmKhu87YSMU5NFbaAY2ceApVUb7Wo1j Помогите кто знает как решить, буду очень признателен! Решено! Удалил все устанавливаемые модулем таблицы, и изменил изменяемые им значение! модуль установился! Пробуем работать дальше...)))) Единственное, модуль не прописался в админке-во вкладке дополнение! Выгрузка идет порядка 20 мин, выкрузилось все кроме товаров! (УНФ 1.6.10.44) Для справки товаров около 1000 Змінено 5 червня 2017 користувачем rutskoifp Надіслати Поділитися на інших сайтах More sharing options... Furious Опубліковано: 5 червня 2017 Share Опубліковано: 5 червня 2017 Доброго времени суток. А когда планируете 1.6.3.11? установил 1.6.3.10. обновил на модификатор 1.6.3.11 вами выложенный (не знаю можно ли так ) Ошибка та же: 2017-06-05 22:24:30 - PHP Warning: opendir(/home/***/test/image/cache/import_files/23): failed to open dir: No such file or directory in /home/***/test/admin/model/extension/exchange1c.php on line 3091 2017-06-05 22:24:30 - PHP Warning: readdir() expects parameter 1 to be resource, boolean given in /home/***/test/admin/model/extension/exchange1c.php on line 3092 2017-06-05 22:24:30 - PHP Warning: readdir() expects parameter 1 to be resource, boolean given in /home/***/test/admin/model/extension/exchange1c.php on line 3092 2017-06-05 22:24:30 - PHP Warning: readdir() expects parameter 1 to be resource, boolean given in /home/***/test/admin/model/extension/exchange1c.php on line 3092 2017-06-05 22:24:30 - PHP Warning: readdir() expects parameter 1 to be resource, boolean given in /home/***/test/admin/model/extension/exchange1c.php on line 3092 2017-06-05 22:24:30 - PHP Warning: readdir() expects parameter 1 to be resource, boolean given in 1с УТ3.1 Украина OcStore ocStore 2.3.0.2.2 Шаблон Демо Стабильно работает 1.6.3.9 но без присвоения атрибутов Надіслати Поділитися на інших сайтах More sharing options... Kirillove Опубліковано: 6 червня 2017 Автор Share Опубліковано: 6 червня 2017 Решено! Удалил все устанавливаемые модулем таблицы, и изменил изменяемые им значение! модуль установился! Пробуем работать дальше...)))) Единственное, модуль не прописался в админке-во вкладке дополнение! Выгрузка идет порядка 20 мин, выкрузилось все кроме товаров! (УНФ 1.6.10.44) Для справки товаров около 1000Многовато для 1000 товаров, на моем сервере вроде было не дольше 5 мин, сегодня вечером уже точно выложу 1.6.3.11 и проверим ещё раз вместе. А лог есть? Очень интересно посмотреть что он там долго делает.Отправлено с моего Power Five Evo через Tapatalk Надіслати Поділитися на інших сайтах More sharing options... Kirillove Опубліковано: 6 червня 2017 Автор Share Опубліковано: 6 червня 2017 Доброго времени суток. А когда планируете 1.6.3.11? установил 1.6.3.10. обновил на модификатор 1.6.3.11 вами выложенный (не знаю можно ли так [emoji4] ) Ошибка та же:2017-06-05 22:24:30 - PHP Warning: opendir(/home/***/test/image/cache/import_files/23): failed to open dir: No such file or directory in /home/***/test/admin/model/extension/exchange1c.php on line 30912017-06-05 22:24:30 - PHP Warning: readdir() expects parameter 1 to be resource, boolean given in /home/***/test/admin/model/extension/exchange1c.php on line 30922017-06-05 22:24:30 - PHP Warning: readdir() expects parameter 1 to be resource, boolean given in /home/***/test/admin/model/extension/exchange1c.php on line 30922017-06-05 22:24:30 - PHP Warning: readdir() expects parameter 1 to be resource, boolean given in /home/***/test/admin/model/extension/exchange1c.php on line 30922017-06-05 22:24:30 - PHP Warning: readdir() expects parameter 1 to be resource, boolean given in /home/***/test/admin/model/extension/exchange1c.php on line 30922017-06-05 22:24:30 - PHP Warning: readdir() expects parameter 1 to be resource, boolean given in 1с УТ3.1 Украина OcStore ocStore 2.3.0.2.2 Шаблон ДемоСтабильно работает 1.6.3.9 но без присвоения атрибутовЭта проблема не в модификаторе, там рядом я функцию выложил заменой которой решит эту проблему сегодня уже точно выложу Навь версию, пришлось тщательно тестироватьОтправлено с моего Power Five Evo через Tapatalk 1 Надіслати Поділитися на інших сайтах More sharing options... 3 р dinox changed the title to Модуль обмена для opencart v2.3 с учетной системой по стандарту CommerceML [Поддержка] Назад 25 26 27 28 29 30 31 32 33 34 35 Вперед Сторінка 30 з 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 080 переглядів Sha 17 листопада 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 427 переглядів 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 061 перегляд 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 832 перегляди 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 і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність. Я даю згоду
abadrozadub Опубліковано: 3 червня 2017 Share Опубліковано: 3 червня 2017 42 minutes ago, Kirillove said: Коды у единиц измерений имеют международный стандарт или с потолка забиты в 1С? Уточню. Надіслати Поділитися на інших сайтах More sharing options...
SoundMonster Опубліковано: 3 червня 2017 Share Опубліковано: 3 червня 2017 Kirillove, Я вам в личку кинул конфигурацию. Посмотрите пожалуйста! Надіслати Поділитися на інших сайтах More sharing options...
Kirillove Опубліковано: 3 червня 2017 Автор Share Опубліковано: 3 червня 2017 52 минуты назад, abadrozadub сказал: Уточню. Для версии 2.3 найдена ошибка при выводе общего остатка по всем складам... Возможно это она вылезла. Уже исправлена 1.6.3.11 1 Надіслати Поділитися на інших сайтах More sharing options... Kirillove Опубліковано: 3 червня 2017 Автор Share Опубліковано: 3 червня 2017 В 02.06.2017 в 15:36, abadrozadub сказал: Аналогично как у Furious Растет в прогрессии После отладки отключите лог... Если включен, то расти он и будет, настройте ротацию. Если лог в режиме отладки, то при большом обмене он может достигать размера несколько гигабайт. 1 Надіслати Поділитися на інших сайтах More sharing options... Kirillove Опубліковано: 3 червня 2017 Автор Share Опубліковано: 3 червня 2017 В 03.06.2017 в 00:20, Dobromila сказал: Здравствуйте. Подскажите, пожалуйста, будет ли модуль работать, 1с у нас розница 8.3 версия 2.1, opencart 2.1.0.1? И будет ли работать с модулем Связанные опции, у нас идет связь цвет-размер? То есть у Вас два свойства у характеристики? Работать будет, но только без модуля "связанные опций". Для этого включите режим загрузки характеристик "связанные опции" и произведите обмен, опции появятся и будут связаны между собой. На дефолтном шаблоне работает, если на вашем не заработало, тогда нужно подправить модификатор под ваш шаблон. 1 Надіслати Поділитися на інших сайтах More sharing options... Kirillove Опубліковано: 3 червня 2017 Автор Share Опубліковано: 3 червня 2017 В 02.06.2017 в 18:57, SusereN сказал: Доброго дня. Обновился на 1.6.3.10, выгрузка не проходит. Гружу вручную, получаю ошибку Откатился на 3.9 - всё успешно Ошибка была, потом исправил... поторопился после переделки заказов не все проверил... Проверил у себя для версии 2.3, функция есть, если у Вас в файле model/extension/exchange1c.php есть такая функция, проверьте public она или private. Она должна быть public. 1 Надіслати Поділитися на інших сайтах More sharing options... Kirillove Опубліковано: 3 червня 2017 Автор Share Опубліковано: 3 червня 2017 /** * ver 3 * update 2017-06-04 * Удаляет в кэше эту картинку */ private function deleteCacheImage($image_info) { if (!$image_info) { // Нечего удалять return false; } // Путь в папке кэш к картинке $path = str_replace(DIR_IMAGE, DIR_IMAGE . "cache/" , $image_info['dirname']); // Откроем папку для чтения $delete_files = array(); $dh = @opendir($path); // Если каталог не открывается if (!$dh) { $this->log("Каталог не существует: " . $path); return false; } while(($file = readdir($dh)) !== false) { $find = strstr($file, $image_info['filename']); if ($find != "") { $delete_files[] = $find; } } closedir($dh); if ($delete_files) { foreach ($delete_files as $filename) { unlink($path . "/" . $filename); $this->log("Удалена картинка из кэша: " . $filename); } } return true; } // deleteCacheImage() 1 Надіслати Поділитися на інших сайтах More sharing options... Kirillove Опубліковано: 3 червня 2017 Автор Share Опубліковано: 3 червня 2017 Обновленный модификатор для opencart 2.3 для модуля версий 1.6.3 Скрытый текст <modification> <name>Exchange Module for OpenCart 2.3</name> <version>1.6.3.11_oc2.3</version> <id>OpenCart Exchange</id> <author>KirilLoveVE</author> <link>https://github.com/KirilLoveVE/opencart2-exchange1c</link> <code>exchange1c</code> <file path="admin/controller/common/menu.php"> <operation> <search><![CDATA[$data['text_option'] = $this->language->get('text_option');]]></search> <add position="after"><![CDATA[$data['text_warehouse'] = $this->language->get('text_warehouse');]]></add> </operation> <operation> <search><![CDATA[$data['module'] = $this->url->link('extension/module', 'token=' . $this->session->data['token'], 'SSL');]]></search> <add position="after"><![CDATA[$data['exchange1c'] = $this->url->link('module/exchange1c', 'token=' . $this->session->data['token'], 'SSL');]]></add> </operation> <operation> <search><![CDATA[$data['option'] = $this->url->link('catalog/option', 'token=' . $this->session->data['token'], 'SSL');]]></search> <add position="after"><![CDATA[$data['warehouse'] = $this->url->link('catalog/warehouse', 'token=' . $this->session->data['token'], 'SSL');]]></add> </operation> </file> <file path="admin/view/template/common/menu.tpl"> <operation> <search><![CDATA[<li><a href="<?php echo $modification; ?>"><?php echo $text_modification; ?></a></li>]]></search> <add position="after"><![CDATA[ <li><a href="<?php echo $exchange1c; ?>">Exchange 1C 8.x</a></li>]]></add> </operation> <operation> <search><![CDATA[<li><a href="<?php echo $option; ?>"><?php echo $text_option; ?></a></li>]]></search> <add position="after"><![CDATA[ <li><a href="<?php echo $warehouse; ?>"><?php echo $text_warehouse; ?></a></li>]]></add> </operation> </file> <file path="admin/language/russian/common/menu.php"> <operation> <search><![CDATA[$_['text_option'] = 'Опции';]]></search> <add position="after"><![CDATA[$_['text_warehouse'] = 'Склады';]]></add> </operation> </file> <file path="admin/language/english/common/menu.php"> <operation> <search><![CDATA[$_['text_option'] = 'Options';]]></search> <add position="after"><![CDATA[$_['text_warehouse'] = 'Warehouses';]]></add> </operation> </file> <file path="system/library/image.php"> <operation> <search><![CDATA[$mime = $this->info['mime'];]]></search> <add position="replace"><![CDATA[$info = getimagesize($image); $mime = isset($info['mime']) ? $info['mime'] : '';]]></add> </operation> <operation> <search><![CDATA[imagecopy($this->image, $watermark, $watermark_pos_x, $watermark_pos_y, 0, 0, 120, 40);]]></search> <add position="replace"><![CDATA[imagecopy($this->image, $watermark, $watermark_pos_x, $watermark_pos_y, 0, 0, $watermark_width, $watermark_height);]]></add> </operation> </file> <file path="catalog/controller/product/product.php"> <operation> <search><![CDATA[if ($product_info['quantity'] <= 0) {]]></search> <add position="before"><![CDATA[ // +++ TESLA-CHITA $product_id = (int)$this->request->get['product_id']; // Характеристики $product_option_values = array(); $sql = "SELECT `pfv`.`product_feature_id`, `pov`.`product_option_id`, `pfv`.`product_option_value_id` FROM `" . DB_PREFIX . "product_feature_value` `pfv` LEFT JOIN `" . DB_PREFIX . "product_option_value` `pov` ON (`pfv`.`product_option_value_id` = `pov`.`product_option_value_id`) LEFT JOIN `" . DB_PREFIX . "option` `o` ON (`pov`.`option_id` = `o`.`option_id`) WHERE `pfv`.`product_id` = " . $this->request->get['product_id'] . " ORDER BY `o`.`sort_order`"; $query = $this->db->query($sql); $features = $query->rows; foreach ($features as $feature_value) { if (empty($product_option_values[$feature_value['product_option_value_id']])) { $product_option_values[$feature_value['product_option_value_id']] = array(); } foreach ($features as $feature_value1) { if ($feature_value1['product_feature_id'] == $feature_value['product_feature_id'] && $feature_value1['product_option_value_id'] <> $feature_value['product_option_value_id']) { $product_option_values[$feature_value['product_option_value_id']][] = $feature_value1['product_option_value_id']; } } } unset($query); $customer_group_id = $this->customer->isLogged()? $this->customer->getGroupId() : $this->config->get('config_customer_group_id'); $product_features_price = array(); $query = $this->db->query("SELECT `product_feature_id`, `price` FROM `" . DB_PREFIX . "product_price` WHERE `product_id` = " . (int)$this->request->get['product_id'] . " AND `customer_group_id` = " . $customer_group_id); $data['currency_data'] = array( 'symbol' => $this->currency->getSymbolRight($this->session->data['currency']), 'decimal' => $this->currency->getDecimalPlace($this->session->data['currency']), 'value' => $this->currency->getValue($this->session->data['currency']) ); $product_features_price = array(); $product_features_options = array(); $product_features_options_values = array(); foreach ($query->rows as $query_price) { $product_features_price[$query_price['product_feature_id']] = array( 'value' => $query_price['price'] * $data['currency_data']['value'], 'tax' => $this->tax->calculate($query_price['price'], $product_info['tax_class_id'], $this->config->get('config_tax')) * $data['currency_data']['value'] ); foreach ($features as $feature) { if ($feature['product_feature_id'] == $query_price['product_feature_id']) { if (!isset($product_features_options[$feature['product_feature_id']])) { $product_features_options[$feature['product_feature_id']] = array(); } $product_features_options[$feature['product_feature_id']][$feature['product_option_id']] = $feature['product_option_value_id']; $product_features_options_values[$feature['product_option_value_id']] = $feature['product_feature_id']; } } } $data['product_features_price'] = $product_features_price; $data['product_features_options'] = $product_features_options; $data['product_features_options_values'] = $product_features_options_values; // Остатки в базовой единице $product_quantity = array(); $product_units = array(); $quantity_total = 0; if ($this->config->get('config_stock_display') && !empty($product_features_options)) { $query = $this->db->query("SELECT * FROM `" . DB_PREFIX . "product_quantity` WHERE `product_id` = " . (int)$this->request->get['product_id']); foreach ($query->rows as $query_quantity) { if (!isset($product_quantity[$query_quantity['product_feature_id']])) { $product_quantity[$query_quantity['product_feature_id']] = array(); } $quantity = &$product_quantity[$query_quantity['product_feature_id']]; if (!isset($quantity[$query_quantity['warehouse_id']])) { $quantity[$query_quantity['warehouse_id']] = $query_quantity['quantity']; $quantity_total += $query_quantity['quantity']; } $query = $this->db->query("SELECT `u`.`name`, `u`.`rus_name1`, `pu`.`ratio`, `pu`.`product_feature_id`, `u`.`unit_id` FROM `" . DB_PREFIX . "product_unit` `pu` LEFT JOIN `" . DB_PREFIX . "unit` `u` ON (`pu`.`unit_id` = `u`.`unit_id`) WHERE `pu`.`product_id` = " . $product_id); if ($query->num_rows) { foreach ($query->rows as $row) { if (isset($product_units[$row['unit_id']])) continue; $product_units[$row['unit_id']] = array( 'rus_name' => $row['rus_name1'], 'name' => $row['name'], 'ratio' => $row['ratio'], 'product_feature_id' => $row['product_feature_id'] ); } } } } $product_quantity[0] = $quantity_total; $data['product_quantity'] = $product_quantity; $data['product_units'] = $product_units; // Список складов $sql = "SELECT * FROM `" . DB_PREFIX . "warehouse`"; $query = $this->db->query($sql); $data['warehouses'] = array(); foreach ($query->rows as $query_warehouse) { $data['warehouses'][$query_warehouse['warehouse_id']] = $query_warehouse['name']; } // --- TESLA-CHITA ]]></add> </operation> <operation> <search><![CDATA[$product_option_value_data[] = array(]]></search> <add position="before"><![CDATA[ // +++ TESLA-CHITA $class = ""; foreach ($product_option_values[$option_value['product_option_value_id']] as $value) { if (empty($class)) { $class = $value; } else { $class .= " " . $value; } } // --- TESLA-CHITA ]]></add> </operation> <operation> <search><![CDATA['product_option_value_id' => $option_value['product_option_value_id'],]]></search> <add position="after"><![CDATA[ // +++ TESLA-CHITA 'price_prefix' => $option_value['price_prefix'], 'class' => $class, // --- TESLA-CHITA]]></add> </operation> </file> <file path="catalog/model/catalog/product.php"> <operation> <search><![CDATA[public function getTotalProductSpecials() {]]></search> <add position="before"><![CDATA[ // +++ TESLA-CHITA public function getProductFeaturesPrice($product_id, $product_feature_id, $customer_group_id=0, $unit_id=0) { $str_customer_group_id = $customer_group_id ? " AND customer_group_id = " . $customer_group_id : ""; $str_unit_id = $unit_id? " AND unit_id = " . $unit_id : ""; $sql = "SELECT price FROM " . DB_PREFIX . "product_price WHERE product_id = " . $product_id . " AND product_feature_id = " . $product_feature_id . $str_customer_group_id . $str_unit_id; $this->log->write($sql); $query = $this->db->query($sql); if ($query->num_rows) { return $query->rows; } else { return 0; } } // --- TESLA-CHITA ]]></add> </operation> </file> <file path="admin/model/sale/order.php"> <operation> <search><![CDATA['order_id' => $order_query->row['order_id'],]]></search> <add position="after"><![CDATA[ // +++ TESLA-CHITA 'payment_inn' => isset($order_query->row['payment_inn']) ? $order_query->row['payment_inn'] : "", 'shipping_kpp' => isset($order_query->row['shipping_inn']) ? $order_query->row['shipping_inn'] : "", 'patronymic' => isset($order_query->row['patronymic']) ? $order_query->row['patronymic'] : "", 'payment_patronymic' => isset($order_query->row['payment_patronymic']) ? $order_query->row['payment_patronymic'] : "", 'shipping_patronymic' => isset($order_query->row['shipping_patronymic']) ? $order_query->row['shipping_patronymic'] : "", // --- TESLA-CHITA]]></add> </operation> </file> <file path="system/library/cart.php"> <operation> <search><![CDATA[$price = $product_query->row['price'];]]></search> <add position="replace"><![CDATA[// +++ TESLA-CHITA //-$price = $product_query->row['price']; $cart_option = json_decode($cart['option']); $product_feature_id = $this->getProductFeatureId($cart_option); if ($product_feature_id) { $customer_group_id = $this->customer->isLogged()? $this->customer->getGroupId() : $this->config->get('config_customer_group_id'); $price = $this->getProductFeaturesPrice($cart['product_id'], $product_feature_id, $customer_group_id); } else { $price = $product_query->row['price']; } // --- TESLA-CHITA]]></add> </operation> <operation> <search><![CDATA[ public function getProducts() {]]></search> <add position="before"><![CDATA[ // +++ TESLA-CHITA private function getProductFeaturesPrice($product_id, $product_feature_id, $customer_group_id=0, $unit_id=0) { $str_customer_group_id = $customer_group_id ? " AND customer_group_id = " . $customer_group_id : ""; $str_unit_id = $unit_id? " AND unit_id = " . $unit_id : ""; $sql = "SELECT price FROM " . DB_PREFIX . "product_price WHERE product_id = " . $product_id . " AND product_feature_id = " . $product_feature_id . $str_customer_group_id . $str_unit_id; $query = $this->db->query($sql); if ($query->num_rows == 1) { return $query->row['price']; } else { return 0; } } private function getProductFeatureId($options) { $where = ""; foreach ($options as $product_option_value_id) { $where .= $where ? ",".$product_option_value_id : $product_option_value_id; } if (!$where) return 0; $sql = "SELECT product_feature_id FROM " . DB_PREFIX . "product_feature_value WHERE product_option_value_id IN (" . $where . ") GROUP BY product_feature_id"; $query = $this->db->query($sql); if ($query->num_rows == 1) { return $query->row['product_feature_id']; } return 0; } // --- TESLA-CHITA ]]></add> </operation> <operation> <search><![CDATA[if ($option_value_query->row['price_prefix'] == '+') {]]></search> <add position="replace"><![CDATA[if ($option_value_query->row['price_prefix'] == 'off+') {]]></add> </operation> <operation> <search><![CDATA[} elseif ($option_value_query->row['price_prefix'] == '-') {]]></search> <add position="replace"><![CDATA[} elseif ($option_value_query->row['price_prefix'] == 'off-') {]]></add> </operation> </file> <file path="catalog/view/theme/*/template/product/product.tpl"> <operation> <search><![CDATA[<li><?php echo $text_stock; ?> <?php echo $stock; ?></li>]]></search> <add position="replace"><![CDATA[<li id="stock"><?php echo $text_stock; ?> <?php echo $stock; ?></li>]]></add> </operation> <operation> <search><![CDATA[<h2><?php echo $price; ?></h2>]]></search> <add position="replace"><![CDATA[<h2 id="price"><?php echo $price; ?></h2>]]></add> </operation> <operation> <search><![CDATA[<li><?php echo $text_tax; ?> <?php echo $tax; ?></li>]]></search> <add position="replace"><![CDATA[<li id="tax"><?php echo $text_tax; ?> <?php echo $tax; ?></li>]]></add> </operation> <operation> <search><![CDATA[<li><?php echo $text_points; ?> <?php echo $points; ?></li>]]></search> <add position="replace"><![CDATA[<li id="points"><?php echo $text_points; ?> <?php echo $points; ?></li>]]></add> </operation> <operation> <search><![CDATA[<option value="<?php echo $option_value['product_option_value_id']; ?>">]]></search> <add position="replace"><![CDATA[<option class="<?php echo $option_value['class']; ?>" value="<?php echo $option_value['product_option_value_id']; ?>">]]></add> </operation> <operation> <search><![CDATA[<input type="radio" name="option[<?php echo $option['product_option_id']; ?>]"]]></search> <add position="replace"><![CDATA[<input class="<?php echo $option_value['class']; ?>" type="radio" name="option[<?php echo $option['product_option_id']; ?>]"]]></add> </operation> <operation> <search><![CDATA[<input type="checkbox" name="option[<?php echo $option['product_option_id']; ?>][]"]]></search> <add position="replace"><![CDATA[<input class="<?php echo $option_value['class']; ?>" type="checkbox" name="option[<?php echo $option['product_option_id']; ?>]"]]></add> </operation> <operation> <search><![CDATA[<input type="hidden" name="product_id" value="<?php echo $product_id; ?>" />]]></search> <add position="after"><![CDATA[ <input type="hidden" name="product_feature_id" value="0" /> <input type="hidden" name="unit_id" value="0" /> ]]></add> </operation> <operation> <search><![CDATA[$(document).ready(function() {]]></search> <add position="before"><![CDATA[var text_stock = "<?php echo $text_stock; ?>"; var text_tax = "<?php echo $text_tax; ?>"; <?php if (isset($warehouses)) { echo "var \$warehouses = {"; foreach ($warehouses as $warehouse_id => $name) { echo "'" . $warehouse_id . "':'" . $name . "',"; } echo "}\n"; } ?> <?php if ($options) {?> //------------------------------------------------------------------------------------------------------------------------------ // Определение переменных для характеристик var $options_type = {<?php foreach ($options as $option) { echo $option['product_option_id'].":'".$option['type']."',"; }?>}; var options_order = [<?php foreach ($options as $option) { echo $option['product_option_id'].","; }?>]; var $options_required = {<?php foreach ($options as $option) { echo $option['product_option_id'].":true,"; }?>}; var $options = {<?php foreach ($product_features_options as $product_feature_id => $feature) { $str_value = $product_feature_id.":{"; foreach ($feature as $product_option_id => $product_option_value_id) { $str_value .= $product_option_id.":".$product_option_value_id.","; } $str_value .= "},"; echo $str_value; } echo "};\n";?> // Тут хранится id выбранной характеристики var product_feature_id = 0; var unit_id = 0; <?php $str_features = "var \$features = {"; $str_price = "var \$price = {"; $str_quantity = "// quantity{product_feature_id:{warehouse_id:{unit_id:quantity}}}\n"; $quantity_total = 0; $str_quantity .= "var \$quantity = {"; foreach ($product_features_options as $product_feature_id => $feature_option) { // Цены $str_price .= "'" . $product_feature_id . "':{'value':" . $product_features_price[$product_feature_id]['value'] . ",'tax':" . $product_features_price[$product_feature_id]['tax'] . "},"; // Характеристики $str_features .= "'" . implode("_", $feature_option) . "':" . $product_feature_id . ","; // Остатки $quantity_array = isset($product_quantity[$product_feature_id]) ? $product_quantity[$product_feature_id] : array(); $str_quantity .= "'" . $product_feature_id . "':"; $str_quantity .= "{"; foreach ($quantity_array as $warehouse_id => $quantity) { $str_quantity .= "'" . $warehouse_id . "':" . $quantity . ","; $quantity_total += $quantity; } $str_quantity .= "},"; } echo $str_features . "};\n"; echo $str_price . "};\n"; echo $str_quantity . "};\n"; echo "var quantity_total = " . $quantity_total . ";\n"; echo "var \$product_units = {"; $num = 1; foreach ($product_units as $unit_id => $unit) { if ($unit['ratio'] == 1) { echo "0:{'unit_id':'" . $unit_id . "','name':'" . $unit['rus_name'] . "','ratio':".$unit['ratio']."},"; } else { echo $num . ":{'unit_id':'" . $unit_id . "','name':'" . $unit['rus_name'] . "','ratio':".$unit['ratio']."},"; $num++; } } echo "};\n"; echo "var \$currency_data = {'symbol':'".$currency_data['symbol']."','decimal':".$currency_data['decimal']."};\n"; ?> //------------------------------------------------------------------------------------------------------------------------------ // Функция отображает остатки по складам // Возвращает строковую переменную в которой перечислены названия всех складов с остатками и единицами измерений function displayQuantity() { if ($.type($quantity[product_feature_id]) == "string") { // Если переменная строка, то есть нет складов, возвращается только количество return $quantity[product_feature_id]; } else { var str = ""; var quantity_warehouse = 0; var str_war = ""; // Базовая единица if ($product_units[0]['name']) { str_unit = " ("+$product_units[0]['name']+")"; } else { str_unit = ""; } // Перебираем все остатки по складам $.each($quantity[product_feature_id],function(warehouse_id, product_quantity) { // Нет складов, если warehouse_id = 0 if (warehouse_id == "0") { // Перебираем все единицы измерений $.each(product_quantity,function(unit_id, quantity) { //str += quantity+" ("+$product_units[unit_id]+"),"; str += "\n" + quantity; }); } // Остатки в выбранной единице else if (unit_id != 0) { // Название склада str_war = " Склад: "+$warehouses[warehouse_id]+": "; } else { if (product_quantity > 0) { quantity_warehouse++; str_war += " "+$warehouses[warehouse_id]+" = "+product_quantity+str_unit; } } }); if (quantity_warehouse > 0) { str = " "+quantity_total+str_unit+" в "+quantity_warehouse+" магазинах: ("+str_war+")"; } else if (quantity_total > 0) { str = " "+quantity_total+str_unit+" по опциям: " + $quantity[product_feature_id][0]; } else { str = " нет в наличии"; } return str; } } // displayQuantity() //------------------------------------------------------------------------------------------------------------------------------ // Функция отображает на странице цену, налоги, остатки, // а также, для передачи в корзину, устанавливает значение product_feature_id function displaySelect() { if (product_feature_id){ $('#price').text(Math.round($price[product_feature_id]['value']).toFixed($currency_data['decimal'])+$currency_data['symbol']); $('#tax').text(text_tax+" "+Math.round($price[product_feature_id]['tax']).toFixed($currency_data['decimal'])+$currency_data['symbol']); $('#stock').text(text_stock+" "+displayQuantity()); $('input[name=\'product_feature_id\']').val(product_feature_id); //$('input[name=\'unit_id\']').val($product_units[unit_id]); } else { $('#price').text(""); $('#tax').text(""); $('#stock').text(text_stock+" "+quantity_total+" ("+$product_units[0]['name']+")"); $('input[name=\'product_feature_id\']').val(0); //$('input[name=\'unit_id\']').val(0); } } // displaySelect() //------------------------------------------------------------------------------------------------------------------------------ // Функция очищает все опции и разблокирует их, сбрасывает ид характеристики, а также обновляет надписи на страничке function clearOptions() { // Перебираем все опции $.each($options_type,function(product_option_id, value) { if (value == "select") { // Делаем доступным опцию $('select[name="option['+product_option_id+']"]').attr("disabled",false); // Сбрасываем выбор, по-умолчанию будет выбран первый элемент $('select[name="option['+product_option_id+']"]').val(''); // Делаем доступным все значения опции $('select[name="option['+product_option_id+']"] option').each(function(){ $(this).removeAttr("disabled"); }); } else { // Делаем доступным опцию $('input[name="option['+product_option_id+']"]').attr("disabled",false); // Снимаем выбор со всех значений $('input[name="option['+product_option_id+']"]').attr('checked', false); } $options_required[product_option_id] = true; }); // Проверка на обязательные опции checkRequired(); // Сбрасываем выбранную характеристику product_feature_id = 0; // Обновляем надписи на страничке displaySelect(); } // clearOptions() //------------------------------------------------------------------------------------------------------------------------------ // Функция проверяет и устанавливает какие опции обязательные, бывает что некоторые характеристики имеют разное количество опций function checkRequired() { // Перебираем все опции $.each($options_required,function(product_option_id, required) { if ($options_type[product_option_id] == "select") { // Получаем элемент в котором устанавливается класс обязательной опции $form = $('select[name="option['+product_option_id+']"]').parents("div.form-group"); // Если опция должна быть обязательной, а она не содержит класс "required", устанавливает этот класс или наоборот убираем его if (required && !$form.hasClass("required")) { $form.addClass("required"); } else if (!required && $form.hasClass("required")) { $form.removeClass("required"); } } else { // Получаем элемент в котором устанавливается класс обязательной опции $form = $('input[name="option['+product_option_id+']"]').parents("div.form-group"); // Если опция должна быть обязательной, а она не содержит класс "required", устанавливает этот класс или наоборот убираем его if (required && !$form.hasClass("required")) { $form.addClass("required"); } else if (!required && $form.hasClass("required")) { $form.removeClass("required"); } } }); } // checkRequired() //------------------------------------------------------------------------------------------------------------------------------ // Функция возвращает выбранные опции значений в виде объекта // Возвращает $option_values - объект с опция и значениями function getOptionValues() { var $option_values = {}; // Перебираем опции в том порядке в каком они заданы на сайте $.each(options_order,function(index, product_option_id) { if ($options_type[product_option_id] == 'select') { // Если опция типа select $option_values[product_option_id] = $('select[name="option['+product_option_id+']"] :selected').val(); } else { // Если опция типа input $option_values[product_option_id] = $('input[name="option['+product_option_id+']"]:checked').val(); } }); return $option_values; } // getOptionValues() //------------------------------------------------------------------------------------------------------------------------------ // Функция по выбранным опциям возвращает product_feature_id // $option_values - объект с опциями и значений // Возвращает ид характеристики, если вариант выбранныхопций не существует ни в одной характеристики, то вернет 0 function getProductFeature($option_values) { var new_product_feature_id = 0; $.each($options,function(feature_id, $product_options) { // Количество совпадений var matches = 0; // Перебираем все опции характеристики $.each($product_options,function(product_option_id, product_option_value_id) { // Ищем совпадение значений if ($option_values[product_option_id] == product_option_value_id) { matches ++; } }); // Если совпали все опции if (matches == options_order.length) { // Сохраним значение характеристики где совпали все опции new_product_feature_id = feature_id; // Прервем цикл return false; } }); return new_product_feature_id; } // getProductFeature() //------------------------------------------------------------------------------------------------------------------------------ // Функция устанавливает доступность опции типа input и ее значения // current_product_option_value_id - текущее выбранное значение опции // current_option_id - текущая опция в которой выбрано значение // $option_values - объект в котором заданы все значения опций текущей характеристики // Возвращает значение текущей опции function setAccessInputOption(current_option_id, current_product_option_value_id, $option_values) { var val = 0; var required = false; // Перебираем все значения опций $('div#input-option'+current_option_id+' div label input').each(function(index){ // Если в классе не содержится значение выбранной опции, то отключаем эту опцию и снимаем флажок if (!$(this).hasClass(current_product_option_value_id) && (current_product_option_value_id)) { $(this).attr("disabled",true); $(this).prop("checked",false); } else { required = true; // Включаем,если была отключена ранее $(this).attr("disabled",false); // Если есть в варианте текущее значение опции if ($option_values[current_option_id] == $(this).val()) { // И еще не выбрано значение if (!val) { val = $(this).val(); $(this).prop("checked",true); } else { // Если значение уже было установлено, то с других опций снимаем выбор $(this).prop("checked",false); } } else { // Если вариант не содержит значение, снимаем выбор $(this).prop("checked",false); //$(this).attr("disabled",true); } } }); $options_required[current_option_id] = required; return val; } // setAccessSelectOption() //------------------------------------------------------------------------------------------------------------------------------ // Функция устанавливает доступность опции типа select и ее значения // current_product_option_value_id - текущее выбранное значение опции // current_option_id - текущая опция в которой выбрано значение // $option_values - объект в котором заданы все значения опций текущей характеристики // Возвращает значение текущей опции function setAccessSelectOption(current_option_id, current_product_option_value_id, $option_values) { var val = 0; var required = false; // Перебираем все значения опций $('select#input-option'+current_option_id+' option').each(function(index){ // Если в классе не содержится значение выбранной опции, // и есть само значение и не первое, тогда отключаем эту опцию и снимаем флажок if (!$(this).hasClass(current_product_option_value_id) && (current_product_option_value_id) && index > 0) { $(this).attr("disabled",true); $(this).prop("selected",false); } else { required = true; // Значение содержится в классе, значит разблокируем если был заблокирован $(this).attr("disabled",false); // Если не было ранее выбрано значение, и не первое, // и в варианте для этой опции есть текущее значение if (!val && index > 0 && $option_values[current_option_id] == $(this).val()) { // Записываем выбранное значение val = $(this).val(); // Выбираем его в селекте $(this).prop("selected",true); } } }); $options_required[current_option_id] = required; return val; } // setAccessSelectOption() //------------------------------------------------------------------------------------------------------------------------------ // Функция устанавливает доступность опций и их значений // current_product_option_value_id - текущее выбранное значение опции // current_option_id - текущая опция в которой выбрано значение // $option_values - объект в котором заданы все значения опций текущей характеристики // Возвращает объект $option_values, теоретически он не меняется, оставлено временно для тестирования function setAccessOptions(current_product_option_value_id, current_option_id, $option_values) { // Выберем опции по варианту $.each(options_order,function(index, product_option_id) { if (current_option_id == product_option_id) { $option_values[product_option_id] = current_product_option_value_id; } else { if ($options_type[product_option_id] == 'select') { // Установим доступность значений в опции типа select //$option_values[product_option_id] = setAccessSelectOption(product_option_id, current_product_option_value_id, $option_values); setAccessSelectOption(product_option_id, current_product_option_value_id, $option_values); } else { // Установим доступность значений в опции типа input //$option_values[product_option_id] = setAccessInputOption(product_option_id, current_product_option_value_id, $option_values); setAccessInputOption(product_option_id, current_product_option_value_id, $option_values); } } }); return $option_values; } // setAccessOptions() //------------------------------------------------------------------------------------------------------------------------------ // Функция получает первый вариант опция по выбранному значению одной из опций // product_option_value_id - значение выбранной опции // Возвращает объект (index = product_option_id, value = product_option_value_id) function getRightOption(product_option_value_id) { // Тут хранится вариант опций выбранной характеристики var $option_values = {}; // Перебирем все опции $.each($options, function(sel_product_feature_id, $product_options) { // Прервем цикл, если ид характеристики уже определена if (product_feature_id) { return false; } // Перебираем все опции характеристики $.each($product_options, function(option_id, sel_product_option_value_id) { // Если значение неопределено, берем первую попавшуюся характеристику if (product_option_value_id == undefined) { // Запишем id характеристики, чтобы потом передать ее в корзину product_feature_id = sel_product_feature_id; // Получим вариант опций и значений этой характеристики $option_values = $product_options; // Прервем цикл return false; } // Если совпало значение опции в первой попавшейся характеристики, тогда выбираем ее, и получаем остальные значения опций else if (sel_product_option_value_id == product_option_value_id) { // Запишем id характеристики, чтобы потом передать ее в корзину product_feature_id = sel_product_feature_id; // Получим вариант опций и значений этой характеристики $option_values = $product_options; // Прервем цикл return false; } }); }); return $option_values; } // getRightOption() //------------------------------------------------------------------------------------------------------------------------------ // Функция вызывается при изменении любой опции // current_option_id - это номер опции в которой выбрано значение // selected - выбранное значение опции, product_option_value_id // type - тип опции, может иметь значение: select, input, radio, image function selectOption(current_option_id, selected, type) { // Объект опций с выбранными значениями (index = опция, value = значение) var $option_values = {}; // Получим существующие значения опций $option_values = getOptionValues(); // Проверим вариант и получим id характеристики, если вариант неверный, тогда id = 0 product_feature_id = getProductFeature($option_values); // Если опции не соответствуют ни одной характеристики, выставляем другие опции по первому совпадению в первой найденой характеристики if (!product_feature_id) { // Получим вариант опции по выбранному значению одной из опций // option_values это объект index = product_option_id, value = product_option_value_id $option_values = getRightOption(selected); // Устанавливает доступность значений всех опций setAccessOptions(selected, current_option_id, $option_values); } // Проверим опции на обязательные checkRequired(); // Отображает выбранные данные displaySelect(); } <?php } ?> ]]></add> </operation> <operation> <search><![CDATA[$(document).ready(function() {]]></search> <add position="after"><![CDATA[<?php if ($options) {?> // Кнопки очистки опций, под каждый шаблон возможно придется править //$('select[name="option[9]"]').parent('div').before('<div class="form-group"><a href="#" id="clear_options">Очистить опции</a></div>'); $('div#input-option7').parent('div').after('<div class="form-group"><a href="#" id="clear_options">Очистить опции</a></div>'); //$('div#form-group').parent('div').after('<div class="form-group"><a href="#" id="clear_options">Очистить опции</a></div>'); $('#product').find('h3').after('<div class="form-group"><a href="#" id="clear_options">Очистить опции</a></div>'); <?php foreach ($options as $option) { ?> //------------------------------------------------------------------------------------------------------------------------------ // Функция обрабатывает значение при выборе опции <?php $select_type = $option['type'] == "select" ? "select" : "input"; $html = " $('".$select_type."[name=\"option[".$option['product_option_id']."]\"]').change(function(){\n"; $html .= " var selected = ".($select_type == "select" ? "$(':selected', this).val();" : "this.value;") . "\n"; $html .= " selectOption(".$option['product_option_id'].",selected,'".$select_type."');\n"; $html .= " });\n\n"; echo $html; } ?> $('#product').on('click', '#clear_options', function(e){ e.preventDefault(); clearOptions(); }); selectOption(); <?php } ?> ]]></add> </operation> </file> </modification> 2 Надіслати Поділитися на інших сайтах More sharing options... Kirillove Опубліковано: 4 червня 2017 Автор Share Опубліковано: 4 червня 2017 Kirillove, затираются картинки товаров если не ставлю галочки "выгружать картинки" в 1с, это недочет моей версии 1.6.3.6 или так задумано? В последней версии модуля это исправлено? если да, то какие примерно строки нужно заменитьИзменил опцию в настройках, теперь и физически на диске картинки проверяет, и не будет даже распаковывать если обмен картинками отключен.Отправлено с моего Power Five Evo через Tapatalk 2 Надіслати Поділитися на інших сайтах More sharing options... abadrozadub Опубліковано: 4 червня 2017 Share Опубліковано: 4 червня 2017 13 hours ago, Kirillove said: Для версии 2.3 найдена ошибка при выводе общего остатка по всем складам... Возможно это она вылезла. Уже исправлена 1.6.3.11 Но у меня версия 2.1.0.2 (rs.1) Надіслати Поділитися на інших сайтах More sharing options... abadrozadub Опубліковано: 4 червня 2017 Share Опубліковано: 4 червня 2017 13 hours ago, Kirillove said: После отладки отключите лог... Если включен, то расти он и будет, настройте ротацию. Если лог в режиме отладки, то при большом обмене он может достигать размера несколько гигабайт. Попробую, но опять же, обмен минимальный. А вот собственно ошибка которая заполняет файл error.log 2017-06-03 19:18:13 - PHP Notice: Undefined variable: dir in /admin/model/tool/exchange1c.php on line 3091 2017-06-03 19:18:13 - PHP Warning: readdir() expects parameter 1 to be resource, null given in /admin/model/tool/exchange1c.php on line 3091 Надіслати Поділитися на інших сайтах More sharing options... Kirillove Опубліковано: 4 червня 2017 Автор Share Опубліковано: 4 червня 2017 В 02.06.2017 в 18:57, SusereN сказал: Доброго дня. Обновился на 1.6.3.10, выгрузка не проходит. Гружу вручную, получаю ошибку Откатился на 3.9 - всё успешно Нашел ошибку, перед этой строчкой вставь : для opencart 2.1: $this->load->model('tool/exchange1c'); для opencart 2.3 $this->load->model('extension/exchange1c'); И там далее в этой функции есть такая же строчка, ее удалите 1 Надіслати Поділитися на інших сайтах More sharing options... AAK Опубліковано: 4 червня 2017 Share Опубліковано: 4 червня 2017 Большое спасибо за проделанную работу. Настроил выгрузку из Управление производственным предприятием 1.3 (1.3.89.1). Версия модуля 1.6.3.10. Почему-то не всегда вставляются описания к товарам. Методом проб и ошибок нашел нижеприведенный код. Вывел в лог $this->log($this->ERROR) - пустое значение, но SEO был сгенерирован. В чем ошибка не разобрался, просто закомментировал //if ($this->ERROR) return false; // SEO формируем когда известен product_id и товар записан $update = $this->seoGenerateProduct($data); //if ($this->ERROR) return false; if ($update || $new) { // Обновляем описание товара после генерации SEO $this->setProductDescription($data, $new); } return true; } // setProduct() Еще заметил, если изменить в 1с описание товара и произвести обмен, описание на сайте меняется, но при этом картинка исчезает. Если загрузка полная, все нормально. 1с не выгружает картинку, если она не менялась. Надіслати Поділитися на інших сайтах More sharing options... uvers Опубліковано: 5 червня 2017 Share Опубліковано: 5 червня 2017 (змінено) Всем доброго дня. Автору огромное спасибо за проделанную работу!! Теперь, собственно вопрос: ocStore 2.1.0.2 скачал и поставил opencart2.1-exchange1c_1.6.3.10.ocmod. После установки открыл товары и сразу получил ошибку Undefined index: affiliate_commission in /var/www/admin/www/dev2.ru/vqmod/vqcache/vq2-system_storage_modification_admin_controller_catalog_product.php on line 486 Почистил кэш vqmod/vqcache. Не помогло Пожалуйста, подскажите, в чем может быть проблема? Змінено 5 червня 2017 користувачем uvers Надіслати Поділитися на інших сайтах More sharing options... Blade Опубліковано: 5 червня 2017 Share Опубліковано: 5 червня 2017 (змінено) Виталий, добрый день, нужна помощь что эначит эта ошибка ? версия последняя 1.6.3.10 1С Управление нашей фирмой, редакция 1.6 (1.6.10.43) 2017-06-05 15:43:42 - 3.830 Mb | 7121 | >>>>>>>>>>>>>>>>>>>> НАЧАЛО ЗАГРУЗКИ ДАННЫХ <<<<<<<<<<<<<<<<<<<< 2017-06-05 15:43:42 - PHP Unknown: Object of class LibXMLError could not be converted to string in /var/www/*******/data/www/**********.ru/admin/model/tool/exchange1c.php on line 7137 2017-06-05 15:43:42 - 3.832 Mb | 7138 | Ошибка при загрузке файла: /var/www/*******/data/www/***********.ru/system/storage/cache/exchange1c/import.xml 2017-06-05 15:43:42 - 3.832 Mb | 0036 | Файл не является стандартом XML, подробности в журнале 2017-06-05 15:43:42 - modeImport(): Ошибка загрузки файла: /var/www/form/data/www/test.form-m.ru/system/storage/cache/exchange1c/import.xml Змінено 5 червня 2017 користувачем Blade 1 Надіслати Поділитися на інших сайтах More sharing options... rutskoifp Опубліковано: 5 червня 2017 Share Опубліковано: 5 червня 2017 Здравствуйте! Очень нужна помощь! При установке модуля 1.6.3.10 выдает ошибку! Модуль был установлен, но после обновления все пошло наперекосяк, решил снести и установить снова, результат плачевный.... теперь вообще не могу установить модуль! Движок 2.3 вот лог сайта [Mon Jun 05 19:43:14.234928 2017] [:error] [pid 8896] [client 78.29.9.4:34940] PHP Fatal error: Uncaught exception 'Exception' with message 'Error: Duplicate column name 'product_feature_id'<br />Error No: 1060<br />ALTER TABLE `oc_cart` ADD `product_feature_id` INT( 11 ) NOT NULL DEFAULT 0 AFTER `option`' in /home/c/xxx/public_html/system/library/db/mysqli.php:40\nStack trace:\n#0 /home/xxx/xxx/public_html/system/library/db.php(16): DB\\MySQLi->query('ALTER TABLE `o...', Array)\n#1 /home/c/xxx/public_html/admin/controller/extension/module/exchange1c.php(812): DB->query('ALTER TABLE `o...')\n#2 [internal function]: ControllerExtensionModuleExchange1c->install(Array)\n#3 /home/c/xxx/public_html/vqmod/vqcache/vq2-system_storage_modification_system_engine_action.php(51): call_user_func_array(Array, Array)\n#4 /home/c/xxx/public_html/vqmod/vqcache/vq2-system_storage_modification_system_engine_loader.php(24): Action->execute(Object(Registry), Array)\n#5 /home/c/xxx/public_html/admin/contro in /home/c/xxx/public_html/system/library/db/mysqli.php on line 40, referer: http://xxx/admin/index.php?route=extension/extension&token=3bmKhu87YSMU5NFbaAY2ceApVUb7Wo1j Помогите кто знает как решить, буду очень признателен! Надіслати Поділитися на інших сайтах More sharing options... rutskoifp Опубліковано: 5 червня 2017 Share Опубліковано: 5 червня 2017 (змінено) 1 час назад, rutskoifp сказал: Здравствуйте! Очень нужна помощь! При установке модуля 1.6.3.10 выдает ошибку! Модуль был установлен, но после обновления все пошло наперекосяк, решил снести и установить снова, результат плачевный.... теперь вообще не могу установить модуль! Движок 2.3 вот лог сайта [Mon Jun 05 19:43:14.234928 2017] [:error] [pid 8896] [client 78.29.9.4:34940] PHP Fatal error: Uncaught exception 'Exception' with message 'Error: Duplicate column name 'product_feature_id'<br />Error No: 1060<br />ALTER TABLE `oc_cart` ADD `product_feature_id` INT( 11 ) NOT NULL DEFAULT 0 AFTER `option`' in /home/c/xxx/public_html/system/library/db/mysqli.php:40\nStack trace:\n#0 /home/xxx/xxx/public_html/system/library/db.php(16): DB\\MySQLi->query('ALTER TABLE `o...', Array)\n#1 /home/c/xxx/public_html/admin/controller/extension/module/exchange1c.php(812): DB->query('ALTER TABLE `o...')\n#2 [internal function]: ControllerExtensionModuleExchange1c->install(Array)\n#3 /home/c/xxx/public_html/vqmod/vqcache/vq2-system_storage_modification_system_engine_action.php(51): call_user_func_array(Array, Array)\n#4 /home/c/xxx/public_html/vqmod/vqcache/vq2-system_storage_modification_system_engine_loader.php(24): Action->execute(Object(Registry), Array)\n#5 /home/c/xxx/public_html/admin/contro in /home/c/xxx/public_html/system/library/db/mysqli.php on line 40, referer: http://xxx/admin/index.php?route=extension/extension&token=3bmKhu87YSMU5NFbaAY2ceApVUb7Wo1j Помогите кто знает как решить, буду очень признателен! Решено! Удалил все устанавливаемые модулем таблицы, и изменил изменяемые им значение! модуль установился! Пробуем работать дальше...)))) Единственное, модуль не прописался в админке-во вкладке дополнение! Выгрузка идет порядка 20 мин, выкрузилось все кроме товаров! (УНФ 1.6.10.44) Для справки товаров около 1000 Змінено 5 червня 2017 користувачем rutskoifp Надіслати Поділитися на інших сайтах More sharing options... Furious Опубліковано: 5 червня 2017 Share Опубліковано: 5 червня 2017 Доброго времени суток. А когда планируете 1.6.3.11? установил 1.6.3.10. обновил на модификатор 1.6.3.11 вами выложенный (не знаю можно ли так ) Ошибка та же: 2017-06-05 22:24:30 - PHP Warning: opendir(/home/***/test/image/cache/import_files/23): failed to open dir: No such file or directory in /home/***/test/admin/model/extension/exchange1c.php on line 3091 2017-06-05 22:24:30 - PHP Warning: readdir() expects parameter 1 to be resource, boolean given in /home/***/test/admin/model/extension/exchange1c.php on line 3092 2017-06-05 22:24:30 - PHP Warning: readdir() expects parameter 1 to be resource, boolean given in /home/***/test/admin/model/extension/exchange1c.php on line 3092 2017-06-05 22:24:30 - PHP Warning: readdir() expects parameter 1 to be resource, boolean given in /home/***/test/admin/model/extension/exchange1c.php on line 3092 2017-06-05 22:24:30 - PHP Warning: readdir() expects parameter 1 to be resource, boolean given in /home/***/test/admin/model/extension/exchange1c.php on line 3092 2017-06-05 22:24:30 - PHP Warning: readdir() expects parameter 1 to be resource, boolean given in 1с УТ3.1 Украина OcStore ocStore 2.3.0.2.2 Шаблон Демо Стабильно работает 1.6.3.9 но без присвоения атрибутов Надіслати Поділитися на інших сайтах More sharing options... Kirillove Опубліковано: 6 червня 2017 Автор Share Опубліковано: 6 червня 2017 Решено! Удалил все устанавливаемые модулем таблицы, и изменил изменяемые им значение! модуль установился! Пробуем работать дальше...)))) Единственное, модуль не прописался в админке-во вкладке дополнение! Выгрузка идет порядка 20 мин, выкрузилось все кроме товаров! (УНФ 1.6.10.44) Для справки товаров около 1000Многовато для 1000 товаров, на моем сервере вроде было не дольше 5 мин, сегодня вечером уже точно выложу 1.6.3.11 и проверим ещё раз вместе. А лог есть? Очень интересно посмотреть что он там долго делает.Отправлено с моего Power Five Evo через Tapatalk Надіслати Поділитися на інших сайтах More sharing options... Kirillove Опубліковано: 6 червня 2017 Автор Share Опубліковано: 6 червня 2017 Доброго времени суток. А когда планируете 1.6.3.11? установил 1.6.3.10. обновил на модификатор 1.6.3.11 вами выложенный (не знаю можно ли так [emoji4] ) Ошибка та же:2017-06-05 22:24:30 - PHP Warning: opendir(/home/***/test/image/cache/import_files/23): failed to open dir: No such file or directory in /home/***/test/admin/model/extension/exchange1c.php on line 30912017-06-05 22:24:30 - PHP Warning: readdir() expects parameter 1 to be resource, boolean given in /home/***/test/admin/model/extension/exchange1c.php on line 30922017-06-05 22:24:30 - PHP Warning: readdir() expects parameter 1 to be resource, boolean given in /home/***/test/admin/model/extension/exchange1c.php on line 30922017-06-05 22:24:30 - PHP Warning: readdir() expects parameter 1 to be resource, boolean given in /home/***/test/admin/model/extension/exchange1c.php on line 30922017-06-05 22:24:30 - PHP Warning: readdir() expects parameter 1 to be resource, boolean given in /home/***/test/admin/model/extension/exchange1c.php on line 30922017-06-05 22:24:30 - PHP Warning: readdir() expects parameter 1 to be resource, boolean given in 1с УТ3.1 Украина OcStore ocStore 2.3.0.2.2 Шаблон ДемоСтабильно работает 1.6.3.9 но без присвоения атрибутовЭта проблема не в модификаторе, там рядом я функцию выложил заменой которой решит эту проблему сегодня уже точно выложу Навь версию, пришлось тщательно тестироватьОтправлено с моего Power Five Evo через Tapatalk 1 Надіслати Поділитися на інших сайтах More sharing options... 3 р dinox changed the title to Модуль обмена для opencart v2.3 с учетной системой по стандарту CommerceML [Поддержка] Назад 25 26 27 28 29 30 31 32 33 34 35 Вперед Сторінка 30 з 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 080 переглядів Sha 17 листопада 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 427 переглядів 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 061 перегляд 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 832 перегляди 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 Опубліковано: 3 червня 2017 Автор Share Опубліковано: 3 червня 2017 В 02.06.2017 в 15:36, abadrozadub сказал: Аналогично как у Furious Растет в прогрессии После отладки отключите лог... Если включен, то расти он и будет, настройте ротацию. Если лог в режиме отладки, то при большом обмене он может достигать размера несколько гигабайт. 1 Надіслати Поділитися на інших сайтах More sharing options... Kirillove Опубліковано: 3 червня 2017 Автор Share Опубліковано: 3 червня 2017 В 03.06.2017 в 00:20, Dobromila сказал: Здравствуйте. Подскажите, пожалуйста, будет ли модуль работать, 1с у нас розница 8.3 версия 2.1, opencart 2.1.0.1? И будет ли работать с модулем Связанные опции, у нас идет связь цвет-размер? То есть у Вас два свойства у характеристики? Работать будет, но только без модуля "связанные опций". Для этого включите режим загрузки характеристик "связанные опции" и произведите обмен, опции появятся и будут связаны между собой. На дефолтном шаблоне работает, если на вашем не заработало, тогда нужно подправить модификатор под ваш шаблон. 1 Надіслати Поділитися на інших сайтах More sharing options... Kirillove Опубліковано: 3 червня 2017 Автор Share Опубліковано: 3 червня 2017 В 02.06.2017 в 18:57, SusereN сказал: Доброго дня. Обновился на 1.6.3.10, выгрузка не проходит. Гружу вручную, получаю ошибку Откатился на 3.9 - всё успешно Ошибка была, потом исправил... поторопился после переделки заказов не все проверил... Проверил у себя для версии 2.3, функция есть, если у Вас в файле model/extension/exchange1c.php есть такая функция, проверьте public она или private. Она должна быть public. 1 Надіслати Поділитися на інших сайтах More sharing options... Kirillove Опубліковано: 3 червня 2017 Автор Share Опубліковано: 3 червня 2017 /** * ver 3 * update 2017-06-04 * Удаляет в кэше эту картинку */ private function deleteCacheImage($image_info) { if (!$image_info) { // Нечего удалять return false; } // Путь в папке кэш к картинке $path = str_replace(DIR_IMAGE, DIR_IMAGE . "cache/" , $image_info['dirname']); // Откроем папку для чтения $delete_files = array(); $dh = @opendir($path); // Если каталог не открывается if (!$dh) { $this->log("Каталог не существует: " . $path); return false; } while(($file = readdir($dh)) !== false) { $find = strstr($file, $image_info['filename']); if ($find != "") { $delete_files[] = $find; } } closedir($dh); if ($delete_files) { foreach ($delete_files as $filename) { unlink($path . "/" . $filename); $this->log("Удалена картинка из кэша: " . $filename); } } return true; } // deleteCacheImage() 1 Надіслати Поділитися на інших сайтах More sharing options... Kirillove Опубліковано: 3 червня 2017 Автор Share Опубліковано: 3 червня 2017 Обновленный модификатор для opencart 2.3 для модуля версий 1.6.3 Скрытый текст <modification> <name>Exchange Module for OpenCart 2.3</name> <version>1.6.3.11_oc2.3</version> <id>OpenCart Exchange</id> <author>KirilLoveVE</author> <link>https://github.com/KirilLoveVE/opencart2-exchange1c</link> <code>exchange1c</code> <file path="admin/controller/common/menu.php"> <operation> <search><![CDATA[$data['text_option'] = $this->language->get('text_option');]]></search> <add position="after"><![CDATA[$data['text_warehouse'] = $this->language->get('text_warehouse');]]></add> </operation> <operation> <search><![CDATA[$data['module'] = $this->url->link('extension/module', 'token=' . $this->session->data['token'], 'SSL');]]></search> <add position="after"><![CDATA[$data['exchange1c'] = $this->url->link('module/exchange1c', 'token=' . $this->session->data['token'], 'SSL');]]></add> </operation> <operation> <search><![CDATA[$data['option'] = $this->url->link('catalog/option', 'token=' . $this->session->data['token'], 'SSL');]]></search> <add position="after"><![CDATA[$data['warehouse'] = $this->url->link('catalog/warehouse', 'token=' . $this->session->data['token'], 'SSL');]]></add> </operation> </file> <file path="admin/view/template/common/menu.tpl"> <operation> <search><![CDATA[<li><a href="<?php echo $modification; ?>"><?php echo $text_modification; ?></a></li>]]></search> <add position="after"><![CDATA[ <li><a href="<?php echo $exchange1c; ?>">Exchange 1C 8.x</a></li>]]></add> </operation> <operation> <search><![CDATA[<li><a href="<?php echo $option; ?>"><?php echo $text_option; ?></a></li>]]></search> <add position="after"><![CDATA[ <li><a href="<?php echo $warehouse; ?>"><?php echo $text_warehouse; ?></a></li>]]></add> </operation> </file> <file path="admin/language/russian/common/menu.php"> <operation> <search><![CDATA[$_['text_option'] = 'Опции';]]></search> <add position="after"><![CDATA[$_['text_warehouse'] = 'Склады';]]></add> </operation> </file> <file path="admin/language/english/common/menu.php"> <operation> <search><![CDATA[$_['text_option'] = 'Options';]]></search> <add position="after"><![CDATA[$_['text_warehouse'] = 'Warehouses';]]></add> </operation> </file> <file path="system/library/image.php"> <operation> <search><![CDATA[$mime = $this->info['mime'];]]></search> <add position="replace"><![CDATA[$info = getimagesize($image); $mime = isset($info['mime']) ? $info['mime'] : '';]]></add> </operation> <operation> <search><![CDATA[imagecopy($this->image, $watermark, $watermark_pos_x, $watermark_pos_y, 0, 0, 120, 40);]]></search> <add position="replace"><![CDATA[imagecopy($this->image, $watermark, $watermark_pos_x, $watermark_pos_y, 0, 0, $watermark_width, $watermark_height);]]></add> </operation> </file> <file path="catalog/controller/product/product.php"> <operation> <search><![CDATA[if ($product_info['quantity'] <= 0) {]]></search> <add position="before"><![CDATA[ // +++ TESLA-CHITA $product_id = (int)$this->request->get['product_id']; // Характеристики $product_option_values = array(); $sql = "SELECT `pfv`.`product_feature_id`, `pov`.`product_option_id`, `pfv`.`product_option_value_id` FROM `" . DB_PREFIX . "product_feature_value` `pfv` LEFT JOIN `" . DB_PREFIX . "product_option_value` `pov` ON (`pfv`.`product_option_value_id` = `pov`.`product_option_value_id`) LEFT JOIN `" . DB_PREFIX . "option` `o` ON (`pov`.`option_id` = `o`.`option_id`) WHERE `pfv`.`product_id` = " . $this->request->get['product_id'] . " ORDER BY `o`.`sort_order`"; $query = $this->db->query($sql); $features = $query->rows; foreach ($features as $feature_value) { if (empty($product_option_values[$feature_value['product_option_value_id']])) { $product_option_values[$feature_value['product_option_value_id']] = array(); } foreach ($features as $feature_value1) { if ($feature_value1['product_feature_id'] == $feature_value['product_feature_id'] && $feature_value1['product_option_value_id'] <> $feature_value['product_option_value_id']) { $product_option_values[$feature_value['product_option_value_id']][] = $feature_value1['product_option_value_id']; } } } unset($query); $customer_group_id = $this->customer->isLogged()? $this->customer->getGroupId() : $this->config->get('config_customer_group_id'); $product_features_price = array(); $query = $this->db->query("SELECT `product_feature_id`, `price` FROM `" . DB_PREFIX . "product_price` WHERE `product_id` = " . (int)$this->request->get['product_id'] . " AND `customer_group_id` = " . $customer_group_id); $data['currency_data'] = array( 'symbol' => $this->currency->getSymbolRight($this->session->data['currency']), 'decimal' => $this->currency->getDecimalPlace($this->session->data['currency']), 'value' => $this->currency->getValue($this->session->data['currency']) ); $product_features_price = array(); $product_features_options = array(); $product_features_options_values = array(); foreach ($query->rows as $query_price) { $product_features_price[$query_price['product_feature_id']] = array( 'value' => $query_price['price'] * $data['currency_data']['value'], 'tax' => $this->tax->calculate($query_price['price'], $product_info['tax_class_id'], $this->config->get('config_tax')) * $data['currency_data']['value'] ); foreach ($features as $feature) { if ($feature['product_feature_id'] == $query_price['product_feature_id']) { if (!isset($product_features_options[$feature['product_feature_id']])) { $product_features_options[$feature['product_feature_id']] = array(); } $product_features_options[$feature['product_feature_id']][$feature['product_option_id']] = $feature['product_option_value_id']; $product_features_options_values[$feature['product_option_value_id']] = $feature['product_feature_id']; } } } $data['product_features_price'] = $product_features_price; $data['product_features_options'] = $product_features_options; $data['product_features_options_values'] = $product_features_options_values; // Остатки в базовой единице $product_quantity = array(); $product_units = array(); $quantity_total = 0; if ($this->config->get('config_stock_display') && !empty($product_features_options)) { $query = $this->db->query("SELECT * FROM `" . DB_PREFIX . "product_quantity` WHERE `product_id` = " . (int)$this->request->get['product_id']); foreach ($query->rows as $query_quantity) { if (!isset($product_quantity[$query_quantity['product_feature_id']])) { $product_quantity[$query_quantity['product_feature_id']] = array(); } $quantity = &$product_quantity[$query_quantity['product_feature_id']]; if (!isset($quantity[$query_quantity['warehouse_id']])) { $quantity[$query_quantity['warehouse_id']] = $query_quantity['quantity']; $quantity_total += $query_quantity['quantity']; } $query = $this->db->query("SELECT `u`.`name`, `u`.`rus_name1`, `pu`.`ratio`, `pu`.`product_feature_id`, `u`.`unit_id` FROM `" . DB_PREFIX . "product_unit` `pu` LEFT JOIN `" . DB_PREFIX . "unit` `u` ON (`pu`.`unit_id` = `u`.`unit_id`) WHERE `pu`.`product_id` = " . $product_id); if ($query->num_rows) { foreach ($query->rows as $row) { if (isset($product_units[$row['unit_id']])) continue; $product_units[$row['unit_id']] = array( 'rus_name' => $row['rus_name1'], 'name' => $row['name'], 'ratio' => $row['ratio'], 'product_feature_id' => $row['product_feature_id'] ); } } } } $product_quantity[0] = $quantity_total; $data['product_quantity'] = $product_quantity; $data['product_units'] = $product_units; // Список складов $sql = "SELECT * FROM `" . DB_PREFIX . "warehouse`"; $query = $this->db->query($sql); $data['warehouses'] = array(); foreach ($query->rows as $query_warehouse) { $data['warehouses'][$query_warehouse['warehouse_id']] = $query_warehouse['name']; } // --- TESLA-CHITA ]]></add> </operation> <operation> <search><![CDATA[$product_option_value_data[] = array(]]></search> <add position="before"><![CDATA[ // +++ TESLA-CHITA $class = ""; foreach ($product_option_values[$option_value['product_option_value_id']] as $value) { if (empty($class)) { $class = $value; } else { $class .= " " . $value; } } // --- TESLA-CHITA ]]></add> </operation> <operation> <search><![CDATA['product_option_value_id' => $option_value['product_option_value_id'],]]></search> <add position="after"><![CDATA[ // +++ TESLA-CHITA 'price_prefix' => $option_value['price_prefix'], 'class' => $class, // --- TESLA-CHITA]]></add> </operation> </file> <file path="catalog/model/catalog/product.php"> <operation> <search><![CDATA[public function getTotalProductSpecials() {]]></search> <add position="before"><![CDATA[ // +++ TESLA-CHITA public function getProductFeaturesPrice($product_id, $product_feature_id, $customer_group_id=0, $unit_id=0) { $str_customer_group_id = $customer_group_id ? " AND customer_group_id = " . $customer_group_id : ""; $str_unit_id = $unit_id? " AND unit_id = " . $unit_id : ""; $sql = "SELECT price FROM " . DB_PREFIX . "product_price WHERE product_id = " . $product_id . " AND product_feature_id = " . $product_feature_id . $str_customer_group_id . $str_unit_id; $this->log->write($sql); $query = $this->db->query($sql); if ($query->num_rows) { return $query->rows; } else { return 0; } } // --- TESLA-CHITA ]]></add> </operation> </file> <file path="admin/model/sale/order.php"> <operation> <search><![CDATA['order_id' => $order_query->row['order_id'],]]></search> <add position="after"><![CDATA[ // +++ TESLA-CHITA 'payment_inn' => isset($order_query->row['payment_inn']) ? $order_query->row['payment_inn'] : "", 'shipping_kpp' => isset($order_query->row['shipping_inn']) ? $order_query->row['shipping_inn'] : "", 'patronymic' => isset($order_query->row['patronymic']) ? $order_query->row['patronymic'] : "", 'payment_patronymic' => isset($order_query->row['payment_patronymic']) ? $order_query->row['payment_patronymic'] : "", 'shipping_patronymic' => isset($order_query->row['shipping_patronymic']) ? $order_query->row['shipping_patronymic'] : "", // --- TESLA-CHITA]]></add> </operation> </file> <file path="system/library/cart.php"> <operation> <search><![CDATA[$price = $product_query->row['price'];]]></search> <add position="replace"><![CDATA[// +++ TESLA-CHITA //-$price = $product_query->row['price']; $cart_option = json_decode($cart['option']); $product_feature_id = $this->getProductFeatureId($cart_option); if ($product_feature_id) { $customer_group_id = $this->customer->isLogged()? $this->customer->getGroupId() : $this->config->get('config_customer_group_id'); $price = $this->getProductFeaturesPrice($cart['product_id'], $product_feature_id, $customer_group_id); } else { $price = $product_query->row['price']; } // --- TESLA-CHITA]]></add> </operation> <operation> <search><![CDATA[ public function getProducts() {]]></search> <add position="before"><![CDATA[ // +++ TESLA-CHITA private function getProductFeaturesPrice($product_id, $product_feature_id, $customer_group_id=0, $unit_id=0) { $str_customer_group_id = $customer_group_id ? " AND customer_group_id = " . $customer_group_id : ""; $str_unit_id = $unit_id? " AND unit_id = " . $unit_id : ""; $sql = "SELECT price FROM " . DB_PREFIX . "product_price WHERE product_id = " . $product_id . " AND product_feature_id = " . $product_feature_id . $str_customer_group_id . $str_unit_id; $query = $this->db->query($sql); if ($query->num_rows == 1) { return $query->row['price']; } else { return 0; } } private function getProductFeatureId($options) { $where = ""; foreach ($options as $product_option_value_id) { $where .= $where ? ",".$product_option_value_id : $product_option_value_id; } if (!$where) return 0; $sql = "SELECT product_feature_id FROM " . DB_PREFIX . "product_feature_value WHERE product_option_value_id IN (" . $where . ") GROUP BY product_feature_id"; $query = $this->db->query($sql); if ($query->num_rows == 1) { return $query->row['product_feature_id']; } return 0; } // --- TESLA-CHITA ]]></add> </operation> <operation> <search><![CDATA[if ($option_value_query->row['price_prefix'] == '+') {]]></search> <add position="replace"><![CDATA[if ($option_value_query->row['price_prefix'] == 'off+') {]]></add> </operation> <operation> <search><![CDATA[} elseif ($option_value_query->row['price_prefix'] == '-') {]]></search> <add position="replace"><![CDATA[} elseif ($option_value_query->row['price_prefix'] == 'off-') {]]></add> </operation> </file> <file path="catalog/view/theme/*/template/product/product.tpl"> <operation> <search><![CDATA[<li><?php echo $text_stock; ?> <?php echo $stock; ?></li>]]></search> <add position="replace"><![CDATA[<li id="stock"><?php echo $text_stock; ?> <?php echo $stock; ?></li>]]></add> </operation> <operation> <search><![CDATA[<h2><?php echo $price; ?></h2>]]></search> <add position="replace"><![CDATA[<h2 id="price"><?php echo $price; ?></h2>]]></add> </operation> <operation> <search><![CDATA[<li><?php echo $text_tax; ?> <?php echo $tax; ?></li>]]></search> <add position="replace"><![CDATA[<li id="tax"><?php echo $text_tax; ?> <?php echo $tax; ?></li>]]></add> </operation> <operation> <search><![CDATA[<li><?php echo $text_points; ?> <?php echo $points; ?></li>]]></search> <add position="replace"><![CDATA[<li id="points"><?php echo $text_points; ?> <?php echo $points; ?></li>]]></add> </operation> <operation> <search><![CDATA[<option value="<?php echo $option_value['product_option_value_id']; ?>">]]></search> <add position="replace"><![CDATA[<option class="<?php echo $option_value['class']; ?>" value="<?php echo $option_value['product_option_value_id']; ?>">]]></add> </operation> <operation> <search><![CDATA[<input type="radio" name="option[<?php echo $option['product_option_id']; ?>]"]]></search> <add position="replace"><![CDATA[<input class="<?php echo $option_value['class']; ?>" type="radio" name="option[<?php echo $option['product_option_id']; ?>]"]]></add> </operation> <operation> <search><![CDATA[<input type="checkbox" name="option[<?php echo $option['product_option_id']; ?>][]"]]></search> <add position="replace"><![CDATA[<input class="<?php echo $option_value['class']; ?>" type="checkbox" name="option[<?php echo $option['product_option_id']; ?>]"]]></add> </operation> <operation> <search><![CDATA[<input type="hidden" name="product_id" value="<?php echo $product_id; ?>" />]]></search> <add position="after"><![CDATA[ <input type="hidden" name="product_feature_id" value="0" /> <input type="hidden" name="unit_id" value="0" /> ]]></add> </operation> <operation> <search><![CDATA[$(document).ready(function() {]]></search> <add position="before"><![CDATA[var text_stock = "<?php echo $text_stock; ?>"; var text_tax = "<?php echo $text_tax; ?>"; <?php if (isset($warehouses)) { echo "var \$warehouses = {"; foreach ($warehouses as $warehouse_id => $name) { echo "'" . $warehouse_id . "':'" . $name . "',"; } echo "}\n"; } ?> <?php if ($options) {?> //------------------------------------------------------------------------------------------------------------------------------ // Определение переменных для характеристик var $options_type = {<?php foreach ($options as $option) { echo $option['product_option_id'].":'".$option['type']."',"; }?>}; var options_order = [<?php foreach ($options as $option) { echo $option['product_option_id'].","; }?>]; var $options_required = {<?php foreach ($options as $option) { echo $option['product_option_id'].":true,"; }?>}; var $options = {<?php foreach ($product_features_options as $product_feature_id => $feature) { $str_value = $product_feature_id.":{"; foreach ($feature as $product_option_id => $product_option_value_id) { $str_value .= $product_option_id.":".$product_option_value_id.","; } $str_value .= "},"; echo $str_value; } echo "};\n";?> // Тут хранится id выбранной характеристики var product_feature_id = 0; var unit_id = 0; <?php $str_features = "var \$features = {"; $str_price = "var \$price = {"; $str_quantity = "// quantity{product_feature_id:{warehouse_id:{unit_id:quantity}}}\n"; $quantity_total = 0; $str_quantity .= "var \$quantity = {"; foreach ($product_features_options as $product_feature_id => $feature_option) { // Цены $str_price .= "'" . $product_feature_id . "':{'value':" . $product_features_price[$product_feature_id]['value'] . ",'tax':" . $product_features_price[$product_feature_id]['tax'] . "},"; // Характеристики $str_features .= "'" . implode("_", $feature_option) . "':" . $product_feature_id . ","; // Остатки $quantity_array = isset($product_quantity[$product_feature_id]) ? $product_quantity[$product_feature_id] : array(); $str_quantity .= "'" . $product_feature_id . "':"; $str_quantity .= "{"; foreach ($quantity_array as $warehouse_id => $quantity) { $str_quantity .= "'" . $warehouse_id . "':" . $quantity . ","; $quantity_total += $quantity; } $str_quantity .= "},"; } echo $str_features . "};\n"; echo $str_price . "};\n"; echo $str_quantity . "};\n"; echo "var quantity_total = " . $quantity_total . ";\n"; echo "var \$product_units = {"; $num = 1; foreach ($product_units as $unit_id => $unit) { if ($unit['ratio'] == 1) { echo "0:{'unit_id':'" . $unit_id . "','name':'" . $unit['rus_name'] . "','ratio':".$unit['ratio']."},"; } else { echo $num . ":{'unit_id':'" . $unit_id . "','name':'" . $unit['rus_name'] . "','ratio':".$unit['ratio']."},"; $num++; } } echo "};\n"; echo "var \$currency_data = {'symbol':'".$currency_data['symbol']."','decimal':".$currency_data['decimal']."};\n"; ?> //------------------------------------------------------------------------------------------------------------------------------ // Функция отображает остатки по складам // Возвращает строковую переменную в которой перечислены названия всех складов с остатками и единицами измерений function displayQuantity() { if ($.type($quantity[product_feature_id]) == "string") { // Если переменная строка, то есть нет складов, возвращается только количество return $quantity[product_feature_id]; } else { var str = ""; var quantity_warehouse = 0; var str_war = ""; // Базовая единица if ($product_units[0]['name']) { str_unit = " ("+$product_units[0]['name']+")"; } else { str_unit = ""; } // Перебираем все остатки по складам $.each($quantity[product_feature_id],function(warehouse_id, product_quantity) { // Нет складов, если warehouse_id = 0 if (warehouse_id == "0") { // Перебираем все единицы измерений $.each(product_quantity,function(unit_id, quantity) { //str += quantity+" ("+$product_units[unit_id]+"),"; str += "\n" + quantity; }); } // Остатки в выбранной единице else if (unit_id != 0) { // Название склада str_war = " Склад: "+$warehouses[warehouse_id]+": "; } else { if (product_quantity > 0) { quantity_warehouse++; str_war += " "+$warehouses[warehouse_id]+" = "+product_quantity+str_unit; } } }); if (quantity_warehouse > 0) { str = " "+quantity_total+str_unit+" в "+quantity_warehouse+" магазинах: ("+str_war+")"; } else if (quantity_total > 0) { str = " "+quantity_total+str_unit+" по опциям: " + $quantity[product_feature_id][0]; } else { str = " нет в наличии"; } return str; } } // displayQuantity() //------------------------------------------------------------------------------------------------------------------------------ // Функция отображает на странице цену, налоги, остатки, // а также, для передачи в корзину, устанавливает значение product_feature_id function displaySelect() { if (product_feature_id){ $('#price').text(Math.round($price[product_feature_id]['value']).toFixed($currency_data['decimal'])+$currency_data['symbol']); $('#tax').text(text_tax+" "+Math.round($price[product_feature_id]['tax']).toFixed($currency_data['decimal'])+$currency_data['symbol']); $('#stock').text(text_stock+" "+displayQuantity()); $('input[name=\'product_feature_id\']').val(product_feature_id); //$('input[name=\'unit_id\']').val($product_units[unit_id]); } else { $('#price').text(""); $('#tax').text(""); $('#stock').text(text_stock+" "+quantity_total+" ("+$product_units[0]['name']+")"); $('input[name=\'product_feature_id\']').val(0); //$('input[name=\'unit_id\']').val(0); } } // displaySelect() //------------------------------------------------------------------------------------------------------------------------------ // Функция очищает все опции и разблокирует их, сбрасывает ид характеристики, а также обновляет надписи на страничке function clearOptions() { // Перебираем все опции $.each($options_type,function(product_option_id, value) { if (value == "select") { // Делаем доступным опцию $('select[name="option['+product_option_id+']"]').attr("disabled",false); // Сбрасываем выбор, по-умолчанию будет выбран первый элемент $('select[name="option['+product_option_id+']"]').val(''); // Делаем доступным все значения опции $('select[name="option['+product_option_id+']"] option').each(function(){ $(this).removeAttr("disabled"); }); } else { // Делаем доступным опцию $('input[name="option['+product_option_id+']"]').attr("disabled",false); // Снимаем выбор со всех значений $('input[name="option['+product_option_id+']"]').attr('checked', false); } $options_required[product_option_id] = true; }); // Проверка на обязательные опции checkRequired(); // Сбрасываем выбранную характеристику product_feature_id = 0; // Обновляем надписи на страничке displaySelect(); } // clearOptions() //------------------------------------------------------------------------------------------------------------------------------ // Функция проверяет и устанавливает какие опции обязательные, бывает что некоторые характеристики имеют разное количество опций function checkRequired() { // Перебираем все опции $.each($options_required,function(product_option_id, required) { if ($options_type[product_option_id] == "select") { // Получаем элемент в котором устанавливается класс обязательной опции $form = $('select[name="option['+product_option_id+']"]').parents("div.form-group"); // Если опция должна быть обязательной, а она не содержит класс "required", устанавливает этот класс или наоборот убираем его if (required && !$form.hasClass("required")) { $form.addClass("required"); } else if (!required && $form.hasClass("required")) { $form.removeClass("required"); } } else { // Получаем элемент в котором устанавливается класс обязательной опции $form = $('input[name="option['+product_option_id+']"]').parents("div.form-group"); // Если опция должна быть обязательной, а она не содержит класс "required", устанавливает этот класс или наоборот убираем его if (required && !$form.hasClass("required")) { $form.addClass("required"); } else if (!required && $form.hasClass("required")) { $form.removeClass("required"); } } }); } // checkRequired() //------------------------------------------------------------------------------------------------------------------------------ // Функция возвращает выбранные опции значений в виде объекта // Возвращает $option_values - объект с опция и значениями function getOptionValues() { var $option_values = {}; // Перебираем опции в том порядке в каком они заданы на сайте $.each(options_order,function(index, product_option_id) { if ($options_type[product_option_id] == 'select') { // Если опция типа select $option_values[product_option_id] = $('select[name="option['+product_option_id+']"] :selected').val(); } else { // Если опция типа input $option_values[product_option_id] = $('input[name="option['+product_option_id+']"]:checked').val(); } }); return $option_values; } // getOptionValues() //------------------------------------------------------------------------------------------------------------------------------ // Функция по выбранным опциям возвращает product_feature_id // $option_values - объект с опциями и значений // Возвращает ид характеристики, если вариант выбранныхопций не существует ни в одной характеристики, то вернет 0 function getProductFeature($option_values) { var new_product_feature_id = 0; $.each($options,function(feature_id, $product_options) { // Количество совпадений var matches = 0; // Перебираем все опции характеристики $.each($product_options,function(product_option_id, product_option_value_id) { // Ищем совпадение значений if ($option_values[product_option_id] == product_option_value_id) { matches ++; } }); // Если совпали все опции if (matches == options_order.length) { // Сохраним значение характеристики где совпали все опции new_product_feature_id = feature_id; // Прервем цикл return false; } }); return new_product_feature_id; } // getProductFeature() //------------------------------------------------------------------------------------------------------------------------------ // Функция устанавливает доступность опции типа input и ее значения // current_product_option_value_id - текущее выбранное значение опции // current_option_id - текущая опция в которой выбрано значение // $option_values - объект в котором заданы все значения опций текущей характеристики // Возвращает значение текущей опции function setAccessInputOption(current_option_id, current_product_option_value_id, $option_values) { var val = 0; var required = false; // Перебираем все значения опций $('div#input-option'+current_option_id+' div label input').each(function(index){ // Если в классе не содержится значение выбранной опции, то отключаем эту опцию и снимаем флажок if (!$(this).hasClass(current_product_option_value_id) && (current_product_option_value_id)) { $(this).attr("disabled",true); $(this).prop("checked",false); } else { required = true; // Включаем,если была отключена ранее $(this).attr("disabled",false); // Если есть в варианте текущее значение опции if ($option_values[current_option_id] == $(this).val()) { // И еще не выбрано значение if (!val) { val = $(this).val(); $(this).prop("checked",true); } else { // Если значение уже было установлено, то с других опций снимаем выбор $(this).prop("checked",false); } } else { // Если вариант не содержит значение, снимаем выбор $(this).prop("checked",false); //$(this).attr("disabled",true); } } }); $options_required[current_option_id] = required; return val; } // setAccessSelectOption() //------------------------------------------------------------------------------------------------------------------------------ // Функция устанавливает доступность опции типа select и ее значения // current_product_option_value_id - текущее выбранное значение опции // current_option_id - текущая опция в которой выбрано значение // $option_values - объект в котором заданы все значения опций текущей характеристики // Возвращает значение текущей опции function setAccessSelectOption(current_option_id, current_product_option_value_id, $option_values) { var val = 0; var required = false; // Перебираем все значения опций $('select#input-option'+current_option_id+' option').each(function(index){ // Если в классе не содержится значение выбранной опции, // и есть само значение и не первое, тогда отключаем эту опцию и снимаем флажок if (!$(this).hasClass(current_product_option_value_id) && (current_product_option_value_id) && index > 0) { $(this).attr("disabled",true); $(this).prop("selected",false); } else { required = true; // Значение содержится в классе, значит разблокируем если был заблокирован $(this).attr("disabled",false); // Если не было ранее выбрано значение, и не первое, // и в варианте для этой опции есть текущее значение if (!val && index > 0 && $option_values[current_option_id] == $(this).val()) { // Записываем выбранное значение val = $(this).val(); // Выбираем его в селекте $(this).prop("selected",true); } } }); $options_required[current_option_id] = required; return val; } // setAccessSelectOption() //------------------------------------------------------------------------------------------------------------------------------ // Функция устанавливает доступность опций и их значений // current_product_option_value_id - текущее выбранное значение опции // current_option_id - текущая опция в которой выбрано значение // $option_values - объект в котором заданы все значения опций текущей характеристики // Возвращает объект $option_values, теоретически он не меняется, оставлено временно для тестирования function setAccessOptions(current_product_option_value_id, current_option_id, $option_values) { // Выберем опции по варианту $.each(options_order,function(index, product_option_id) { if (current_option_id == product_option_id) { $option_values[product_option_id] = current_product_option_value_id; } else { if ($options_type[product_option_id] == 'select') { // Установим доступность значений в опции типа select //$option_values[product_option_id] = setAccessSelectOption(product_option_id, current_product_option_value_id, $option_values); setAccessSelectOption(product_option_id, current_product_option_value_id, $option_values); } else { // Установим доступность значений в опции типа input //$option_values[product_option_id] = setAccessInputOption(product_option_id, current_product_option_value_id, $option_values); setAccessInputOption(product_option_id, current_product_option_value_id, $option_values); } } }); return $option_values; } // setAccessOptions() //------------------------------------------------------------------------------------------------------------------------------ // Функция получает первый вариант опция по выбранному значению одной из опций // product_option_value_id - значение выбранной опции // Возвращает объект (index = product_option_id, value = product_option_value_id) function getRightOption(product_option_value_id) { // Тут хранится вариант опций выбранной характеристики var $option_values = {}; // Перебирем все опции $.each($options, function(sel_product_feature_id, $product_options) { // Прервем цикл, если ид характеристики уже определена if (product_feature_id) { return false; } // Перебираем все опции характеристики $.each($product_options, function(option_id, sel_product_option_value_id) { // Если значение неопределено, берем первую попавшуюся характеристику if (product_option_value_id == undefined) { // Запишем id характеристики, чтобы потом передать ее в корзину product_feature_id = sel_product_feature_id; // Получим вариант опций и значений этой характеристики $option_values = $product_options; // Прервем цикл return false; } // Если совпало значение опции в первой попавшейся характеристики, тогда выбираем ее, и получаем остальные значения опций else if (sel_product_option_value_id == product_option_value_id) { // Запишем id характеристики, чтобы потом передать ее в корзину product_feature_id = sel_product_feature_id; // Получим вариант опций и значений этой характеристики $option_values = $product_options; // Прервем цикл return false; } }); }); return $option_values; } // getRightOption() //------------------------------------------------------------------------------------------------------------------------------ // Функция вызывается при изменении любой опции // current_option_id - это номер опции в которой выбрано значение // selected - выбранное значение опции, product_option_value_id // type - тип опции, может иметь значение: select, input, radio, image function selectOption(current_option_id, selected, type) { // Объект опций с выбранными значениями (index = опция, value = значение) var $option_values = {}; // Получим существующие значения опций $option_values = getOptionValues(); // Проверим вариант и получим id характеристики, если вариант неверный, тогда id = 0 product_feature_id = getProductFeature($option_values); // Если опции не соответствуют ни одной характеристики, выставляем другие опции по первому совпадению в первой найденой характеристики if (!product_feature_id) { // Получим вариант опции по выбранному значению одной из опций // option_values это объект index = product_option_id, value = product_option_value_id $option_values = getRightOption(selected); // Устанавливает доступность значений всех опций setAccessOptions(selected, current_option_id, $option_values); } // Проверим опции на обязательные checkRequired(); // Отображает выбранные данные displaySelect(); } <?php } ?> ]]></add> </operation> <operation> <search><![CDATA[$(document).ready(function() {]]></search> <add position="after"><![CDATA[<?php if ($options) {?> // Кнопки очистки опций, под каждый шаблон возможно придется править //$('select[name="option[9]"]').parent('div').before('<div class="form-group"><a href="#" id="clear_options">Очистить опции</a></div>'); $('div#input-option7').parent('div').after('<div class="form-group"><a href="#" id="clear_options">Очистить опции</a></div>'); //$('div#form-group').parent('div').after('<div class="form-group"><a href="#" id="clear_options">Очистить опции</a></div>'); $('#product').find('h3').after('<div class="form-group"><a href="#" id="clear_options">Очистить опции</a></div>'); <?php foreach ($options as $option) { ?> //------------------------------------------------------------------------------------------------------------------------------ // Функция обрабатывает значение при выборе опции <?php $select_type = $option['type'] == "select" ? "select" : "input"; $html = " $('".$select_type."[name=\"option[".$option['product_option_id']."]\"]').change(function(){\n"; $html .= " var selected = ".($select_type == "select" ? "$(':selected', this).val();" : "this.value;") . "\n"; $html .= " selectOption(".$option['product_option_id'].",selected,'".$select_type."');\n"; $html .= " });\n\n"; echo $html; } ?> $('#product').on('click', '#clear_options', function(e){ e.preventDefault(); clearOptions(); }); selectOption(); <?php } ?> ]]></add> </operation> </file> </modification> 2 Надіслати Поділитися на інших сайтах More sharing options... Kirillove Опубліковано: 4 червня 2017 Автор Share Опубліковано: 4 червня 2017 Kirillove, затираются картинки товаров если не ставлю галочки "выгружать картинки" в 1с, это недочет моей версии 1.6.3.6 или так задумано? В последней версии модуля это исправлено? если да, то какие примерно строки нужно заменитьИзменил опцию в настройках, теперь и физически на диске картинки проверяет, и не будет даже распаковывать если обмен картинками отключен.Отправлено с моего Power Five Evo через Tapatalk 2 Надіслати Поділитися на інших сайтах More sharing options... abadrozadub Опубліковано: 4 червня 2017 Share Опубліковано: 4 червня 2017 13 hours ago, Kirillove said: Для версии 2.3 найдена ошибка при выводе общего остатка по всем складам... Возможно это она вылезла. Уже исправлена 1.6.3.11 Но у меня версия 2.1.0.2 (rs.1) Надіслати Поділитися на інших сайтах More sharing options... abadrozadub Опубліковано: 4 червня 2017 Share Опубліковано: 4 червня 2017 13 hours ago, Kirillove said: После отладки отключите лог... Если включен, то расти он и будет, настройте ротацию. Если лог в режиме отладки, то при большом обмене он может достигать размера несколько гигабайт. Попробую, но опять же, обмен минимальный. А вот собственно ошибка которая заполняет файл error.log 2017-06-03 19:18:13 - PHP Notice: Undefined variable: dir in /admin/model/tool/exchange1c.php on line 3091 2017-06-03 19:18:13 - PHP Warning: readdir() expects parameter 1 to be resource, null given in /admin/model/tool/exchange1c.php on line 3091 Надіслати Поділитися на інших сайтах More sharing options... Kirillove Опубліковано: 4 червня 2017 Автор Share Опубліковано: 4 червня 2017 В 02.06.2017 в 18:57, SusereN сказал: Доброго дня. Обновился на 1.6.3.10, выгрузка не проходит. Гружу вручную, получаю ошибку Откатился на 3.9 - всё успешно Нашел ошибку, перед этой строчкой вставь : для opencart 2.1: $this->load->model('tool/exchange1c'); для opencart 2.3 $this->load->model('extension/exchange1c'); И там далее в этой функции есть такая же строчка, ее удалите 1 Надіслати Поділитися на інших сайтах More sharing options... AAK Опубліковано: 4 червня 2017 Share Опубліковано: 4 червня 2017 Большое спасибо за проделанную работу. Настроил выгрузку из Управление производственным предприятием 1.3 (1.3.89.1). Версия модуля 1.6.3.10. Почему-то не всегда вставляются описания к товарам. Методом проб и ошибок нашел нижеприведенный код. Вывел в лог $this->log($this->ERROR) - пустое значение, но SEO был сгенерирован. В чем ошибка не разобрался, просто закомментировал //if ($this->ERROR) return false; // SEO формируем когда известен product_id и товар записан $update = $this->seoGenerateProduct($data); //if ($this->ERROR) return false; if ($update || $new) { // Обновляем описание товара после генерации SEO $this->setProductDescription($data, $new); } return true; } // setProduct() Еще заметил, если изменить в 1с описание товара и произвести обмен, описание на сайте меняется, но при этом картинка исчезает. Если загрузка полная, все нормально. 1с не выгружает картинку, если она не менялась. Надіслати Поділитися на інших сайтах More sharing options... uvers Опубліковано: 5 червня 2017 Share Опубліковано: 5 червня 2017 (змінено) Всем доброго дня. Автору огромное спасибо за проделанную работу!! Теперь, собственно вопрос: ocStore 2.1.0.2 скачал и поставил opencart2.1-exchange1c_1.6.3.10.ocmod. После установки открыл товары и сразу получил ошибку Undefined index: affiliate_commission in /var/www/admin/www/dev2.ru/vqmod/vqcache/vq2-system_storage_modification_admin_controller_catalog_product.php on line 486 Почистил кэш vqmod/vqcache. Не помогло Пожалуйста, подскажите, в чем может быть проблема? Змінено 5 червня 2017 користувачем uvers Надіслати Поділитися на інших сайтах More sharing options... Blade Опубліковано: 5 червня 2017 Share Опубліковано: 5 червня 2017 (змінено) Виталий, добрый день, нужна помощь что эначит эта ошибка ? версия последняя 1.6.3.10 1С Управление нашей фирмой, редакция 1.6 (1.6.10.43) 2017-06-05 15:43:42 - 3.830 Mb | 7121 | >>>>>>>>>>>>>>>>>>>> НАЧАЛО ЗАГРУЗКИ ДАННЫХ <<<<<<<<<<<<<<<<<<<< 2017-06-05 15:43:42 - PHP Unknown: Object of class LibXMLError could not be converted to string in /var/www/*******/data/www/**********.ru/admin/model/tool/exchange1c.php on line 7137 2017-06-05 15:43:42 - 3.832 Mb | 7138 | Ошибка при загрузке файла: /var/www/*******/data/www/***********.ru/system/storage/cache/exchange1c/import.xml 2017-06-05 15:43:42 - 3.832 Mb | 0036 | Файл не является стандартом XML, подробности в журнале 2017-06-05 15:43:42 - modeImport(): Ошибка загрузки файла: /var/www/form/data/www/test.form-m.ru/system/storage/cache/exchange1c/import.xml Змінено 5 червня 2017 користувачем Blade 1 Надіслати Поділитися на інших сайтах More sharing options... rutskoifp Опубліковано: 5 червня 2017 Share Опубліковано: 5 червня 2017 Здравствуйте! Очень нужна помощь! При установке модуля 1.6.3.10 выдает ошибку! Модуль был установлен, но после обновления все пошло наперекосяк, решил снести и установить снова, результат плачевный.... теперь вообще не могу установить модуль! Движок 2.3 вот лог сайта [Mon Jun 05 19:43:14.234928 2017] [:error] [pid 8896] [client 78.29.9.4:34940] PHP Fatal error: Uncaught exception 'Exception' with message 'Error: Duplicate column name 'product_feature_id'<br />Error No: 1060<br />ALTER TABLE `oc_cart` ADD `product_feature_id` INT( 11 ) NOT NULL DEFAULT 0 AFTER `option`' in /home/c/xxx/public_html/system/library/db/mysqli.php:40\nStack trace:\n#0 /home/xxx/xxx/public_html/system/library/db.php(16): DB\\MySQLi->query('ALTER TABLE `o...', Array)\n#1 /home/c/xxx/public_html/admin/controller/extension/module/exchange1c.php(812): DB->query('ALTER TABLE `o...')\n#2 [internal function]: ControllerExtensionModuleExchange1c->install(Array)\n#3 /home/c/xxx/public_html/vqmod/vqcache/vq2-system_storage_modification_system_engine_action.php(51): call_user_func_array(Array, Array)\n#4 /home/c/xxx/public_html/vqmod/vqcache/vq2-system_storage_modification_system_engine_loader.php(24): Action->execute(Object(Registry), Array)\n#5 /home/c/xxx/public_html/admin/contro in /home/c/xxx/public_html/system/library/db/mysqli.php on line 40, referer: http://xxx/admin/index.php?route=extension/extension&token=3bmKhu87YSMU5NFbaAY2ceApVUb7Wo1j Помогите кто знает как решить, буду очень признателен! Надіслати Поділитися на інших сайтах More sharing options... rutskoifp Опубліковано: 5 червня 2017 Share Опубліковано: 5 червня 2017 (змінено) 1 час назад, rutskoifp сказал: Здравствуйте! Очень нужна помощь! При установке модуля 1.6.3.10 выдает ошибку! Модуль был установлен, но после обновления все пошло наперекосяк, решил снести и установить снова, результат плачевный.... теперь вообще не могу установить модуль! Движок 2.3 вот лог сайта [Mon Jun 05 19:43:14.234928 2017] [:error] [pid 8896] [client 78.29.9.4:34940] PHP Fatal error: Uncaught exception 'Exception' with message 'Error: Duplicate column name 'product_feature_id'<br />Error No: 1060<br />ALTER TABLE `oc_cart` ADD `product_feature_id` INT( 11 ) NOT NULL DEFAULT 0 AFTER `option`' in /home/c/xxx/public_html/system/library/db/mysqli.php:40\nStack trace:\n#0 /home/xxx/xxx/public_html/system/library/db.php(16): DB\\MySQLi->query('ALTER TABLE `o...', Array)\n#1 /home/c/xxx/public_html/admin/controller/extension/module/exchange1c.php(812): DB->query('ALTER TABLE `o...')\n#2 [internal function]: ControllerExtensionModuleExchange1c->install(Array)\n#3 /home/c/xxx/public_html/vqmod/vqcache/vq2-system_storage_modification_system_engine_action.php(51): call_user_func_array(Array, Array)\n#4 /home/c/xxx/public_html/vqmod/vqcache/vq2-system_storage_modification_system_engine_loader.php(24): Action->execute(Object(Registry), Array)\n#5 /home/c/xxx/public_html/admin/contro in /home/c/xxx/public_html/system/library/db/mysqli.php on line 40, referer: http://xxx/admin/index.php?route=extension/extension&token=3bmKhu87YSMU5NFbaAY2ceApVUb7Wo1j Помогите кто знает как решить, буду очень признателен! Решено! Удалил все устанавливаемые модулем таблицы, и изменил изменяемые им значение! модуль установился! Пробуем работать дальше...)))) Единственное, модуль не прописался в админке-во вкладке дополнение! Выгрузка идет порядка 20 мин, выкрузилось все кроме товаров! (УНФ 1.6.10.44) Для справки товаров около 1000 Змінено 5 червня 2017 користувачем rutskoifp Надіслати Поділитися на інших сайтах More sharing options... Furious Опубліковано: 5 червня 2017 Share Опубліковано: 5 червня 2017 Доброго времени суток. А когда планируете 1.6.3.11? установил 1.6.3.10. обновил на модификатор 1.6.3.11 вами выложенный (не знаю можно ли так ) Ошибка та же: 2017-06-05 22:24:30 - PHP Warning: opendir(/home/***/test/image/cache/import_files/23): failed to open dir: No such file or directory in /home/***/test/admin/model/extension/exchange1c.php on line 3091 2017-06-05 22:24:30 - PHP Warning: readdir() expects parameter 1 to be resource, boolean given in /home/***/test/admin/model/extension/exchange1c.php on line 3092 2017-06-05 22:24:30 - PHP Warning: readdir() expects parameter 1 to be resource, boolean given in /home/***/test/admin/model/extension/exchange1c.php on line 3092 2017-06-05 22:24:30 - PHP Warning: readdir() expects parameter 1 to be resource, boolean given in /home/***/test/admin/model/extension/exchange1c.php on line 3092 2017-06-05 22:24:30 - PHP Warning: readdir() expects parameter 1 to be resource, boolean given in /home/***/test/admin/model/extension/exchange1c.php on line 3092 2017-06-05 22:24:30 - PHP Warning: readdir() expects parameter 1 to be resource, boolean given in 1с УТ3.1 Украина OcStore ocStore 2.3.0.2.2 Шаблон Демо Стабильно работает 1.6.3.9 но без присвоения атрибутов Надіслати Поділитися на інших сайтах More sharing options... Kirillove Опубліковано: 6 червня 2017 Автор Share Опубліковано: 6 червня 2017 Решено! Удалил все устанавливаемые модулем таблицы, и изменил изменяемые им значение! модуль установился! Пробуем работать дальше...)))) Единственное, модуль не прописался в админке-во вкладке дополнение! Выгрузка идет порядка 20 мин, выкрузилось все кроме товаров! (УНФ 1.6.10.44) Для справки товаров около 1000Многовато для 1000 товаров, на моем сервере вроде было не дольше 5 мин, сегодня вечером уже точно выложу 1.6.3.11 и проверим ещё раз вместе. А лог есть? Очень интересно посмотреть что он там долго делает.Отправлено с моего Power Five Evo через Tapatalk Надіслати Поділитися на інших сайтах More sharing options... Kirillove Опубліковано: 6 червня 2017 Автор Share Опубліковано: 6 червня 2017 Доброго времени суток. А когда планируете 1.6.3.11? установил 1.6.3.10. обновил на модификатор 1.6.3.11 вами выложенный (не знаю можно ли так [emoji4] ) Ошибка та же:2017-06-05 22:24:30 - PHP Warning: opendir(/home/***/test/image/cache/import_files/23): failed to open dir: No such file or directory in /home/***/test/admin/model/extension/exchange1c.php on line 30912017-06-05 22:24:30 - PHP Warning: readdir() expects parameter 1 to be resource, boolean given in /home/***/test/admin/model/extension/exchange1c.php on line 30922017-06-05 22:24:30 - PHP Warning: readdir() expects parameter 1 to be resource, boolean given in /home/***/test/admin/model/extension/exchange1c.php on line 30922017-06-05 22:24:30 - PHP Warning: readdir() expects parameter 1 to be resource, boolean given in /home/***/test/admin/model/extension/exchange1c.php on line 30922017-06-05 22:24:30 - PHP Warning: readdir() expects parameter 1 to be resource, boolean given in /home/***/test/admin/model/extension/exchange1c.php on line 30922017-06-05 22:24:30 - PHP Warning: readdir() expects parameter 1 to be resource, boolean given in 1с УТ3.1 Украина OcStore ocStore 2.3.0.2.2 Шаблон ДемоСтабильно работает 1.6.3.9 но без присвоения атрибутовЭта проблема не в модификаторе, там рядом я функцию выложил заменой которой решит эту проблему сегодня уже точно выложу Навь версию, пришлось тщательно тестироватьОтправлено с моего Power Five Evo через Tapatalk 1 Надіслати Поділитися на інших сайтах More sharing options... 3 р dinox changed the title to Модуль обмена для opencart v2.3 с учетной системой по стандарту CommerceML [Поддержка] Назад 25 26 27 28 29 30 31 32 33 34 35 Вперед Сторінка 30 з 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 080 переглядів Sha 17 листопада 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 427 переглядів 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 061 перегляд 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 832 перегляди 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 Опубліковано: 3 червня 2017 Автор Share Опубліковано: 3 червня 2017 В 03.06.2017 в 00:20, Dobromila сказал: Здравствуйте. Подскажите, пожалуйста, будет ли модуль работать, 1с у нас розница 8.3 версия 2.1, opencart 2.1.0.1? И будет ли работать с модулем Связанные опции, у нас идет связь цвет-размер? То есть у Вас два свойства у характеристики? Работать будет, но только без модуля "связанные опций". Для этого включите режим загрузки характеристик "связанные опции" и произведите обмен, опции появятся и будут связаны между собой. На дефолтном шаблоне работает, если на вашем не заработало, тогда нужно подправить модификатор под ваш шаблон. 1 Надіслати Поділитися на інших сайтах More sharing options... Kirillove Опубліковано: 3 червня 2017 Автор Share Опубліковано: 3 червня 2017 В 02.06.2017 в 18:57, SusereN сказал: Доброго дня. Обновился на 1.6.3.10, выгрузка не проходит. Гружу вручную, получаю ошибку Откатился на 3.9 - всё успешно Ошибка была, потом исправил... поторопился после переделки заказов не все проверил... Проверил у себя для версии 2.3, функция есть, если у Вас в файле model/extension/exchange1c.php есть такая функция, проверьте public она или private. Она должна быть public. 1 Надіслати Поділитися на інших сайтах More sharing options... Kirillove Опубліковано: 3 червня 2017 Автор Share Опубліковано: 3 червня 2017 /** * ver 3 * update 2017-06-04 * Удаляет в кэше эту картинку */ private function deleteCacheImage($image_info) { if (!$image_info) { // Нечего удалять return false; } // Путь в папке кэш к картинке $path = str_replace(DIR_IMAGE, DIR_IMAGE . "cache/" , $image_info['dirname']); // Откроем папку для чтения $delete_files = array(); $dh = @opendir($path); // Если каталог не открывается if (!$dh) { $this->log("Каталог не существует: " . $path); return false; } while(($file = readdir($dh)) !== false) { $find = strstr($file, $image_info['filename']); if ($find != "") { $delete_files[] = $find; } } closedir($dh); if ($delete_files) { foreach ($delete_files as $filename) { unlink($path . "/" . $filename); $this->log("Удалена картинка из кэша: " . $filename); } } return true; } // deleteCacheImage() 1 Надіслати Поділитися на інших сайтах More sharing options... Kirillove Опубліковано: 3 червня 2017 Автор Share Опубліковано: 3 червня 2017 Обновленный модификатор для opencart 2.3 для модуля версий 1.6.3 Скрытый текст <modification> <name>Exchange Module for OpenCart 2.3</name> <version>1.6.3.11_oc2.3</version> <id>OpenCart Exchange</id> <author>KirilLoveVE</author> <link>https://github.com/KirilLoveVE/opencart2-exchange1c</link> <code>exchange1c</code> <file path="admin/controller/common/menu.php"> <operation> <search><![CDATA[$data['text_option'] = $this->language->get('text_option');]]></search> <add position="after"><![CDATA[$data['text_warehouse'] = $this->language->get('text_warehouse');]]></add> </operation> <operation> <search><![CDATA[$data['module'] = $this->url->link('extension/module', 'token=' . $this->session->data['token'], 'SSL');]]></search> <add position="after"><![CDATA[$data['exchange1c'] = $this->url->link('module/exchange1c', 'token=' . $this->session->data['token'], 'SSL');]]></add> </operation> <operation> <search><![CDATA[$data['option'] = $this->url->link('catalog/option', 'token=' . $this->session->data['token'], 'SSL');]]></search> <add position="after"><![CDATA[$data['warehouse'] = $this->url->link('catalog/warehouse', 'token=' . $this->session->data['token'], 'SSL');]]></add> </operation> </file> <file path="admin/view/template/common/menu.tpl"> <operation> <search><![CDATA[<li><a href="<?php echo $modification; ?>"><?php echo $text_modification; ?></a></li>]]></search> <add position="after"><![CDATA[ <li><a href="<?php echo $exchange1c; ?>">Exchange 1C 8.x</a></li>]]></add> </operation> <operation> <search><![CDATA[<li><a href="<?php echo $option; ?>"><?php echo $text_option; ?></a></li>]]></search> <add position="after"><![CDATA[ <li><a href="<?php echo $warehouse; ?>"><?php echo $text_warehouse; ?></a></li>]]></add> </operation> </file> <file path="admin/language/russian/common/menu.php"> <operation> <search><![CDATA[$_['text_option'] = 'Опции';]]></search> <add position="after"><![CDATA[$_['text_warehouse'] = 'Склады';]]></add> </operation> </file> <file path="admin/language/english/common/menu.php"> <operation> <search><![CDATA[$_['text_option'] = 'Options';]]></search> <add position="after"><![CDATA[$_['text_warehouse'] = 'Warehouses';]]></add> </operation> </file> <file path="system/library/image.php"> <operation> <search><![CDATA[$mime = $this->info['mime'];]]></search> <add position="replace"><![CDATA[$info = getimagesize($image); $mime = isset($info['mime']) ? $info['mime'] : '';]]></add> </operation> <operation> <search><![CDATA[imagecopy($this->image, $watermark, $watermark_pos_x, $watermark_pos_y, 0, 0, 120, 40);]]></search> <add position="replace"><![CDATA[imagecopy($this->image, $watermark, $watermark_pos_x, $watermark_pos_y, 0, 0, $watermark_width, $watermark_height);]]></add> </operation> </file> <file path="catalog/controller/product/product.php"> <operation> <search><![CDATA[if ($product_info['quantity'] <= 0) {]]></search> <add position="before"><![CDATA[ // +++ TESLA-CHITA $product_id = (int)$this->request->get['product_id']; // Характеристики $product_option_values = array(); $sql = "SELECT `pfv`.`product_feature_id`, `pov`.`product_option_id`, `pfv`.`product_option_value_id` FROM `" . DB_PREFIX . "product_feature_value` `pfv` LEFT JOIN `" . DB_PREFIX . "product_option_value` `pov` ON (`pfv`.`product_option_value_id` = `pov`.`product_option_value_id`) LEFT JOIN `" . DB_PREFIX . "option` `o` ON (`pov`.`option_id` = `o`.`option_id`) WHERE `pfv`.`product_id` = " . $this->request->get['product_id'] . " ORDER BY `o`.`sort_order`"; $query = $this->db->query($sql); $features = $query->rows; foreach ($features as $feature_value) { if (empty($product_option_values[$feature_value['product_option_value_id']])) { $product_option_values[$feature_value['product_option_value_id']] = array(); } foreach ($features as $feature_value1) { if ($feature_value1['product_feature_id'] == $feature_value['product_feature_id'] && $feature_value1['product_option_value_id'] <> $feature_value['product_option_value_id']) { $product_option_values[$feature_value['product_option_value_id']][] = $feature_value1['product_option_value_id']; } } } unset($query); $customer_group_id = $this->customer->isLogged()? $this->customer->getGroupId() : $this->config->get('config_customer_group_id'); $product_features_price = array(); $query = $this->db->query("SELECT `product_feature_id`, `price` FROM `" . DB_PREFIX . "product_price` WHERE `product_id` = " . (int)$this->request->get['product_id'] . " AND `customer_group_id` = " . $customer_group_id); $data['currency_data'] = array( 'symbol' => $this->currency->getSymbolRight($this->session->data['currency']), 'decimal' => $this->currency->getDecimalPlace($this->session->data['currency']), 'value' => $this->currency->getValue($this->session->data['currency']) ); $product_features_price = array(); $product_features_options = array(); $product_features_options_values = array(); foreach ($query->rows as $query_price) { $product_features_price[$query_price['product_feature_id']] = array( 'value' => $query_price['price'] * $data['currency_data']['value'], 'tax' => $this->tax->calculate($query_price['price'], $product_info['tax_class_id'], $this->config->get('config_tax')) * $data['currency_data']['value'] ); foreach ($features as $feature) { if ($feature['product_feature_id'] == $query_price['product_feature_id']) { if (!isset($product_features_options[$feature['product_feature_id']])) { $product_features_options[$feature['product_feature_id']] = array(); } $product_features_options[$feature['product_feature_id']][$feature['product_option_id']] = $feature['product_option_value_id']; $product_features_options_values[$feature['product_option_value_id']] = $feature['product_feature_id']; } } } $data['product_features_price'] = $product_features_price; $data['product_features_options'] = $product_features_options; $data['product_features_options_values'] = $product_features_options_values; // Остатки в базовой единице $product_quantity = array(); $product_units = array(); $quantity_total = 0; if ($this->config->get('config_stock_display') && !empty($product_features_options)) { $query = $this->db->query("SELECT * FROM `" . DB_PREFIX . "product_quantity` WHERE `product_id` = " . (int)$this->request->get['product_id']); foreach ($query->rows as $query_quantity) { if (!isset($product_quantity[$query_quantity['product_feature_id']])) { $product_quantity[$query_quantity['product_feature_id']] = array(); } $quantity = &$product_quantity[$query_quantity['product_feature_id']]; if (!isset($quantity[$query_quantity['warehouse_id']])) { $quantity[$query_quantity['warehouse_id']] = $query_quantity['quantity']; $quantity_total += $query_quantity['quantity']; } $query = $this->db->query("SELECT `u`.`name`, `u`.`rus_name1`, `pu`.`ratio`, `pu`.`product_feature_id`, `u`.`unit_id` FROM `" . DB_PREFIX . "product_unit` `pu` LEFT JOIN `" . DB_PREFIX . "unit` `u` ON (`pu`.`unit_id` = `u`.`unit_id`) WHERE `pu`.`product_id` = " . $product_id); if ($query->num_rows) { foreach ($query->rows as $row) { if (isset($product_units[$row['unit_id']])) continue; $product_units[$row['unit_id']] = array( 'rus_name' => $row['rus_name1'], 'name' => $row['name'], 'ratio' => $row['ratio'], 'product_feature_id' => $row['product_feature_id'] ); } } } } $product_quantity[0] = $quantity_total; $data['product_quantity'] = $product_quantity; $data['product_units'] = $product_units; // Список складов $sql = "SELECT * FROM `" . DB_PREFIX . "warehouse`"; $query = $this->db->query($sql); $data['warehouses'] = array(); foreach ($query->rows as $query_warehouse) { $data['warehouses'][$query_warehouse['warehouse_id']] = $query_warehouse['name']; } // --- TESLA-CHITA ]]></add> </operation> <operation> <search><![CDATA[$product_option_value_data[] = array(]]></search> <add position="before"><![CDATA[ // +++ TESLA-CHITA $class = ""; foreach ($product_option_values[$option_value['product_option_value_id']] as $value) { if (empty($class)) { $class = $value; } else { $class .= " " . $value; } } // --- TESLA-CHITA ]]></add> </operation> <operation> <search><![CDATA['product_option_value_id' => $option_value['product_option_value_id'],]]></search> <add position="after"><![CDATA[ // +++ TESLA-CHITA 'price_prefix' => $option_value['price_prefix'], 'class' => $class, // --- TESLA-CHITA]]></add> </operation> </file> <file path="catalog/model/catalog/product.php"> <operation> <search><![CDATA[public function getTotalProductSpecials() {]]></search> <add position="before"><![CDATA[ // +++ TESLA-CHITA public function getProductFeaturesPrice($product_id, $product_feature_id, $customer_group_id=0, $unit_id=0) { $str_customer_group_id = $customer_group_id ? " AND customer_group_id = " . $customer_group_id : ""; $str_unit_id = $unit_id? " AND unit_id = " . $unit_id : ""; $sql = "SELECT price FROM " . DB_PREFIX . "product_price WHERE product_id = " . $product_id . " AND product_feature_id = " . $product_feature_id . $str_customer_group_id . $str_unit_id; $this->log->write($sql); $query = $this->db->query($sql); if ($query->num_rows) { return $query->rows; } else { return 0; } } // --- TESLA-CHITA ]]></add> </operation> </file> <file path="admin/model/sale/order.php"> <operation> <search><![CDATA['order_id' => $order_query->row['order_id'],]]></search> <add position="after"><![CDATA[ // +++ TESLA-CHITA 'payment_inn' => isset($order_query->row['payment_inn']) ? $order_query->row['payment_inn'] : "", 'shipping_kpp' => isset($order_query->row['shipping_inn']) ? $order_query->row['shipping_inn'] : "", 'patronymic' => isset($order_query->row['patronymic']) ? $order_query->row['patronymic'] : "", 'payment_patronymic' => isset($order_query->row['payment_patronymic']) ? $order_query->row['payment_patronymic'] : "", 'shipping_patronymic' => isset($order_query->row['shipping_patronymic']) ? $order_query->row['shipping_patronymic'] : "", // --- TESLA-CHITA]]></add> </operation> </file> <file path="system/library/cart.php"> <operation> <search><![CDATA[$price = $product_query->row['price'];]]></search> <add position="replace"><![CDATA[// +++ TESLA-CHITA //-$price = $product_query->row['price']; $cart_option = json_decode($cart['option']); $product_feature_id = $this->getProductFeatureId($cart_option); if ($product_feature_id) { $customer_group_id = $this->customer->isLogged()? $this->customer->getGroupId() : $this->config->get('config_customer_group_id'); $price = $this->getProductFeaturesPrice($cart['product_id'], $product_feature_id, $customer_group_id); } else { $price = $product_query->row['price']; } // --- TESLA-CHITA]]></add> </operation> <operation> <search><![CDATA[ public function getProducts() {]]></search> <add position="before"><![CDATA[ // +++ TESLA-CHITA private function getProductFeaturesPrice($product_id, $product_feature_id, $customer_group_id=0, $unit_id=0) { $str_customer_group_id = $customer_group_id ? " AND customer_group_id = " . $customer_group_id : ""; $str_unit_id = $unit_id? " AND unit_id = " . $unit_id : ""; $sql = "SELECT price FROM " . DB_PREFIX . "product_price WHERE product_id = " . $product_id . " AND product_feature_id = " . $product_feature_id . $str_customer_group_id . $str_unit_id; $query = $this->db->query($sql); if ($query->num_rows == 1) { return $query->row['price']; } else { return 0; } } private function getProductFeatureId($options) { $where = ""; foreach ($options as $product_option_value_id) { $where .= $where ? ",".$product_option_value_id : $product_option_value_id; } if (!$where) return 0; $sql = "SELECT product_feature_id FROM " . DB_PREFIX . "product_feature_value WHERE product_option_value_id IN (" . $where . ") GROUP BY product_feature_id"; $query = $this->db->query($sql); if ($query->num_rows == 1) { return $query->row['product_feature_id']; } return 0; } // --- TESLA-CHITA ]]></add> </operation> <operation> <search><![CDATA[if ($option_value_query->row['price_prefix'] == '+') {]]></search> <add position="replace"><![CDATA[if ($option_value_query->row['price_prefix'] == 'off+') {]]></add> </operation> <operation> <search><![CDATA[} elseif ($option_value_query->row['price_prefix'] == '-') {]]></search> <add position="replace"><![CDATA[} elseif ($option_value_query->row['price_prefix'] == 'off-') {]]></add> </operation> </file> <file path="catalog/view/theme/*/template/product/product.tpl"> <operation> <search><![CDATA[<li><?php echo $text_stock; ?> <?php echo $stock; ?></li>]]></search> <add position="replace"><![CDATA[<li id="stock"><?php echo $text_stock; ?> <?php echo $stock; ?></li>]]></add> </operation> <operation> <search><![CDATA[<h2><?php echo $price; ?></h2>]]></search> <add position="replace"><![CDATA[<h2 id="price"><?php echo $price; ?></h2>]]></add> </operation> <operation> <search><![CDATA[<li><?php echo $text_tax; ?> <?php echo $tax; ?></li>]]></search> <add position="replace"><![CDATA[<li id="tax"><?php echo $text_tax; ?> <?php echo $tax; ?></li>]]></add> </operation> <operation> <search><![CDATA[<li><?php echo $text_points; ?> <?php echo $points; ?></li>]]></search> <add position="replace"><![CDATA[<li id="points"><?php echo $text_points; ?> <?php echo $points; ?></li>]]></add> </operation> <operation> <search><![CDATA[<option value="<?php echo $option_value['product_option_value_id']; ?>">]]></search> <add position="replace"><![CDATA[<option class="<?php echo $option_value['class']; ?>" value="<?php echo $option_value['product_option_value_id']; ?>">]]></add> </operation> <operation> <search><![CDATA[<input type="radio" name="option[<?php echo $option['product_option_id']; ?>]"]]></search> <add position="replace"><![CDATA[<input class="<?php echo $option_value['class']; ?>" type="radio" name="option[<?php echo $option['product_option_id']; ?>]"]]></add> </operation> <operation> <search><![CDATA[<input type="checkbox" name="option[<?php echo $option['product_option_id']; ?>][]"]]></search> <add position="replace"><![CDATA[<input class="<?php echo $option_value['class']; ?>" type="checkbox" name="option[<?php echo $option['product_option_id']; ?>]"]]></add> </operation> <operation> <search><![CDATA[<input type="hidden" name="product_id" value="<?php echo $product_id; ?>" />]]></search> <add position="after"><![CDATA[ <input type="hidden" name="product_feature_id" value="0" /> <input type="hidden" name="unit_id" value="0" /> ]]></add> </operation> <operation> <search><![CDATA[$(document).ready(function() {]]></search> <add position="before"><![CDATA[var text_stock = "<?php echo $text_stock; ?>"; var text_tax = "<?php echo $text_tax; ?>"; <?php if (isset($warehouses)) { echo "var \$warehouses = {"; foreach ($warehouses as $warehouse_id => $name) { echo "'" . $warehouse_id . "':'" . $name . "',"; } echo "}\n"; } ?> <?php if ($options) {?> //------------------------------------------------------------------------------------------------------------------------------ // Определение переменных для характеристик var $options_type = {<?php foreach ($options as $option) { echo $option['product_option_id'].":'".$option['type']."',"; }?>}; var options_order = [<?php foreach ($options as $option) { echo $option['product_option_id'].","; }?>]; var $options_required = {<?php foreach ($options as $option) { echo $option['product_option_id'].":true,"; }?>}; var $options = {<?php foreach ($product_features_options as $product_feature_id => $feature) { $str_value = $product_feature_id.":{"; foreach ($feature as $product_option_id => $product_option_value_id) { $str_value .= $product_option_id.":".$product_option_value_id.","; } $str_value .= "},"; echo $str_value; } echo "};\n";?> // Тут хранится id выбранной характеристики var product_feature_id = 0; var unit_id = 0; <?php $str_features = "var \$features = {"; $str_price = "var \$price = {"; $str_quantity = "// quantity{product_feature_id:{warehouse_id:{unit_id:quantity}}}\n"; $quantity_total = 0; $str_quantity .= "var \$quantity = {"; foreach ($product_features_options as $product_feature_id => $feature_option) { // Цены $str_price .= "'" . $product_feature_id . "':{'value':" . $product_features_price[$product_feature_id]['value'] . ",'tax':" . $product_features_price[$product_feature_id]['tax'] . "},"; // Характеристики $str_features .= "'" . implode("_", $feature_option) . "':" . $product_feature_id . ","; // Остатки $quantity_array = isset($product_quantity[$product_feature_id]) ? $product_quantity[$product_feature_id] : array(); $str_quantity .= "'" . $product_feature_id . "':"; $str_quantity .= "{"; foreach ($quantity_array as $warehouse_id => $quantity) { $str_quantity .= "'" . $warehouse_id . "':" . $quantity . ","; $quantity_total += $quantity; } $str_quantity .= "},"; } echo $str_features . "};\n"; echo $str_price . "};\n"; echo $str_quantity . "};\n"; echo "var quantity_total = " . $quantity_total . ";\n"; echo "var \$product_units = {"; $num = 1; foreach ($product_units as $unit_id => $unit) { if ($unit['ratio'] == 1) { echo "0:{'unit_id':'" . $unit_id . "','name':'" . $unit['rus_name'] . "','ratio':".$unit['ratio']."},"; } else { echo $num . ":{'unit_id':'" . $unit_id . "','name':'" . $unit['rus_name'] . "','ratio':".$unit['ratio']."},"; $num++; } } echo "};\n"; echo "var \$currency_data = {'symbol':'".$currency_data['symbol']."','decimal':".$currency_data['decimal']."};\n"; ?> //------------------------------------------------------------------------------------------------------------------------------ // Функция отображает остатки по складам // Возвращает строковую переменную в которой перечислены названия всех складов с остатками и единицами измерений function displayQuantity() { if ($.type($quantity[product_feature_id]) == "string") { // Если переменная строка, то есть нет складов, возвращается только количество return $quantity[product_feature_id]; } else { var str = ""; var quantity_warehouse = 0; var str_war = ""; // Базовая единица if ($product_units[0]['name']) { str_unit = " ("+$product_units[0]['name']+")"; } else { str_unit = ""; } // Перебираем все остатки по складам $.each($quantity[product_feature_id],function(warehouse_id, product_quantity) { // Нет складов, если warehouse_id = 0 if (warehouse_id == "0") { // Перебираем все единицы измерений $.each(product_quantity,function(unit_id, quantity) { //str += quantity+" ("+$product_units[unit_id]+"),"; str += "\n" + quantity; }); } // Остатки в выбранной единице else if (unit_id != 0) { // Название склада str_war = " Склад: "+$warehouses[warehouse_id]+": "; } else { if (product_quantity > 0) { quantity_warehouse++; str_war += " "+$warehouses[warehouse_id]+" = "+product_quantity+str_unit; } } }); if (quantity_warehouse > 0) { str = " "+quantity_total+str_unit+" в "+quantity_warehouse+" магазинах: ("+str_war+")"; } else if (quantity_total > 0) { str = " "+quantity_total+str_unit+" по опциям: " + $quantity[product_feature_id][0]; } else { str = " нет в наличии"; } return str; } } // displayQuantity() //------------------------------------------------------------------------------------------------------------------------------ // Функция отображает на странице цену, налоги, остатки, // а также, для передачи в корзину, устанавливает значение product_feature_id function displaySelect() { if (product_feature_id){ $('#price').text(Math.round($price[product_feature_id]['value']).toFixed($currency_data['decimal'])+$currency_data['symbol']); $('#tax').text(text_tax+" "+Math.round($price[product_feature_id]['tax']).toFixed($currency_data['decimal'])+$currency_data['symbol']); $('#stock').text(text_stock+" "+displayQuantity()); $('input[name=\'product_feature_id\']').val(product_feature_id); //$('input[name=\'unit_id\']').val($product_units[unit_id]); } else { $('#price').text(""); $('#tax').text(""); $('#stock').text(text_stock+" "+quantity_total+" ("+$product_units[0]['name']+")"); $('input[name=\'product_feature_id\']').val(0); //$('input[name=\'unit_id\']').val(0); } } // displaySelect() //------------------------------------------------------------------------------------------------------------------------------ // Функция очищает все опции и разблокирует их, сбрасывает ид характеристики, а также обновляет надписи на страничке function clearOptions() { // Перебираем все опции $.each($options_type,function(product_option_id, value) { if (value == "select") { // Делаем доступным опцию $('select[name="option['+product_option_id+']"]').attr("disabled",false); // Сбрасываем выбор, по-умолчанию будет выбран первый элемент $('select[name="option['+product_option_id+']"]').val(''); // Делаем доступным все значения опции $('select[name="option['+product_option_id+']"] option').each(function(){ $(this).removeAttr("disabled"); }); } else { // Делаем доступным опцию $('input[name="option['+product_option_id+']"]').attr("disabled",false); // Снимаем выбор со всех значений $('input[name="option['+product_option_id+']"]').attr('checked', false); } $options_required[product_option_id] = true; }); // Проверка на обязательные опции checkRequired(); // Сбрасываем выбранную характеристику product_feature_id = 0; // Обновляем надписи на страничке displaySelect(); } // clearOptions() //------------------------------------------------------------------------------------------------------------------------------ // Функция проверяет и устанавливает какие опции обязательные, бывает что некоторые характеристики имеют разное количество опций function checkRequired() { // Перебираем все опции $.each($options_required,function(product_option_id, required) { if ($options_type[product_option_id] == "select") { // Получаем элемент в котором устанавливается класс обязательной опции $form = $('select[name="option['+product_option_id+']"]').parents("div.form-group"); // Если опция должна быть обязательной, а она не содержит класс "required", устанавливает этот класс или наоборот убираем его if (required && !$form.hasClass("required")) { $form.addClass("required"); } else if (!required && $form.hasClass("required")) { $form.removeClass("required"); } } else { // Получаем элемент в котором устанавливается класс обязательной опции $form = $('input[name="option['+product_option_id+']"]').parents("div.form-group"); // Если опция должна быть обязательной, а она не содержит класс "required", устанавливает этот класс или наоборот убираем его if (required && !$form.hasClass("required")) { $form.addClass("required"); } else if (!required && $form.hasClass("required")) { $form.removeClass("required"); } } }); } // checkRequired() //------------------------------------------------------------------------------------------------------------------------------ // Функция возвращает выбранные опции значений в виде объекта // Возвращает $option_values - объект с опция и значениями function getOptionValues() { var $option_values = {}; // Перебираем опции в том порядке в каком они заданы на сайте $.each(options_order,function(index, product_option_id) { if ($options_type[product_option_id] == 'select') { // Если опция типа select $option_values[product_option_id] = $('select[name="option['+product_option_id+']"] :selected').val(); } else { // Если опция типа input $option_values[product_option_id] = $('input[name="option['+product_option_id+']"]:checked').val(); } }); return $option_values; } // getOptionValues() //------------------------------------------------------------------------------------------------------------------------------ // Функция по выбранным опциям возвращает product_feature_id // $option_values - объект с опциями и значений // Возвращает ид характеристики, если вариант выбранныхопций не существует ни в одной характеристики, то вернет 0 function getProductFeature($option_values) { var new_product_feature_id = 0; $.each($options,function(feature_id, $product_options) { // Количество совпадений var matches = 0; // Перебираем все опции характеристики $.each($product_options,function(product_option_id, product_option_value_id) { // Ищем совпадение значений if ($option_values[product_option_id] == product_option_value_id) { matches ++; } }); // Если совпали все опции if (matches == options_order.length) { // Сохраним значение характеристики где совпали все опции new_product_feature_id = feature_id; // Прервем цикл return false; } }); return new_product_feature_id; } // getProductFeature() //------------------------------------------------------------------------------------------------------------------------------ // Функция устанавливает доступность опции типа input и ее значения // current_product_option_value_id - текущее выбранное значение опции // current_option_id - текущая опция в которой выбрано значение // $option_values - объект в котором заданы все значения опций текущей характеристики // Возвращает значение текущей опции function setAccessInputOption(current_option_id, current_product_option_value_id, $option_values) { var val = 0; var required = false; // Перебираем все значения опций $('div#input-option'+current_option_id+' div label input').each(function(index){ // Если в классе не содержится значение выбранной опции, то отключаем эту опцию и снимаем флажок if (!$(this).hasClass(current_product_option_value_id) && (current_product_option_value_id)) { $(this).attr("disabled",true); $(this).prop("checked",false); } else { required = true; // Включаем,если была отключена ранее $(this).attr("disabled",false); // Если есть в варианте текущее значение опции if ($option_values[current_option_id] == $(this).val()) { // И еще не выбрано значение if (!val) { val = $(this).val(); $(this).prop("checked",true); } else { // Если значение уже было установлено, то с других опций снимаем выбор $(this).prop("checked",false); } } else { // Если вариант не содержит значение, снимаем выбор $(this).prop("checked",false); //$(this).attr("disabled",true); } } }); $options_required[current_option_id] = required; return val; } // setAccessSelectOption() //------------------------------------------------------------------------------------------------------------------------------ // Функция устанавливает доступность опции типа select и ее значения // current_product_option_value_id - текущее выбранное значение опции // current_option_id - текущая опция в которой выбрано значение // $option_values - объект в котором заданы все значения опций текущей характеристики // Возвращает значение текущей опции function setAccessSelectOption(current_option_id, current_product_option_value_id, $option_values) { var val = 0; var required = false; // Перебираем все значения опций $('select#input-option'+current_option_id+' option').each(function(index){ // Если в классе не содержится значение выбранной опции, // и есть само значение и не первое, тогда отключаем эту опцию и снимаем флажок if (!$(this).hasClass(current_product_option_value_id) && (current_product_option_value_id) && index > 0) { $(this).attr("disabled",true); $(this).prop("selected",false); } else { required = true; // Значение содержится в классе, значит разблокируем если был заблокирован $(this).attr("disabled",false); // Если не было ранее выбрано значение, и не первое, // и в варианте для этой опции есть текущее значение if (!val && index > 0 && $option_values[current_option_id] == $(this).val()) { // Записываем выбранное значение val = $(this).val(); // Выбираем его в селекте $(this).prop("selected",true); } } }); $options_required[current_option_id] = required; return val; } // setAccessSelectOption() //------------------------------------------------------------------------------------------------------------------------------ // Функция устанавливает доступность опций и их значений // current_product_option_value_id - текущее выбранное значение опции // current_option_id - текущая опция в которой выбрано значение // $option_values - объект в котором заданы все значения опций текущей характеристики // Возвращает объект $option_values, теоретически он не меняется, оставлено временно для тестирования function setAccessOptions(current_product_option_value_id, current_option_id, $option_values) { // Выберем опции по варианту $.each(options_order,function(index, product_option_id) { if (current_option_id == product_option_id) { $option_values[product_option_id] = current_product_option_value_id; } else { if ($options_type[product_option_id] == 'select') { // Установим доступность значений в опции типа select //$option_values[product_option_id] = setAccessSelectOption(product_option_id, current_product_option_value_id, $option_values); setAccessSelectOption(product_option_id, current_product_option_value_id, $option_values); } else { // Установим доступность значений в опции типа input //$option_values[product_option_id] = setAccessInputOption(product_option_id, current_product_option_value_id, $option_values); setAccessInputOption(product_option_id, current_product_option_value_id, $option_values); } } }); return $option_values; } // setAccessOptions() //------------------------------------------------------------------------------------------------------------------------------ // Функция получает первый вариант опция по выбранному значению одной из опций // product_option_value_id - значение выбранной опции // Возвращает объект (index = product_option_id, value = product_option_value_id) function getRightOption(product_option_value_id) { // Тут хранится вариант опций выбранной характеристики var $option_values = {}; // Перебирем все опции $.each($options, function(sel_product_feature_id, $product_options) { // Прервем цикл, если ид характеристики уже определена if (product_feature_id) { return false; } // Перебираем все опции характеристики $.each($product_options, function(option_id, sel_product_option_value_id) { // Если значение неопределено, берем первую попавшуюся характеристику if (product_option_value_id == undefined) { // Запишем id характеристики, чтобы потом передать ее в корзину product_feature_id = sel_product_feature_id; // Получим вариант опций и значений этой характеристики $option_values = $product_options; // Прервем цикл return false; } // Если совпало значение опции в первой попавшейся характеристики, тогда выбираем ее, и получаем остальные значения опций else if (sel_product_option_value_id == product_option_value_id) { // Запишем id характеристики, чтобы потом передать ее в корзину product_feature_id = sel_product_feature_id; // Получим вариант опций и значений этой характеристики $option_values = $product_options; // Прервем цикл return false; } }); }); return $option_values; } // getRightOption() //------------------------------------------------------------------------------------------------------------------------------ // Функция вызывается при изменении любой опции // current_option_id - это номер опции в которой выбрано значение // selected - выбранное значение опции, product_option_value_id // type - тип опции, может иметь значение: select, input, radio, image function selectOption(current_option_id, selected, type) { // Объект опций с выбранными значениями (index = опция, value = значение) var $option_values = {}; // Получим существующие значения опций $option_values = getOptionValues(); // Проверим вариант и получим id характеристики, если вариант неверный, тогда id = 0 product_feature_id = getProductFeature($option_values); // Если опции не соответствуют ни одной характеристики, выставляем другие опции по первому совпадению в первой найденой характеристики if (!product_feature_id) { // Получим вариант опции по выбранному значению одной из опций // option_values это объект index = product_option_id, value = product_option_value_id $option_values = getRightOption(selected); // Устанавливает доступность значений всех опций setAccessOptions(selected, current_option_id, $option_values); } // Проверим опции на обязательные checkRequired(); // Отображает выбранные данные displaySelect(); } <?php } ?> ]]></add> </operation> <operation> <search><![CDATA[$(document).ready(function() {]]></search> <add position="after"><![CDATA[<?php if ($options) {?> // Кнопки очистки опций, под каждый шаблон возможно придется править //$('select[name="option[9]"]').parent('div').before('<div class="form-group"><a href="#" id="clear_options">Очистить опции</a></div>'); $('div#input-option7').parent('div').after('<div class="form-group"><a href="#" id="clear_options">Очистить опции</a></div>'); //$('div#form-group').parent('div').after('<div class="form-group"><a href="#" id="clear_options">Очистить опции</a></div>'); $('#product').find('h3').after('<div class="form-group"><a href="#" id="clear_options">Очистить опции</a></div>'); <?php foreach ($options as $option) { ?> //------------------------------------------------------------------------------------------------------------------------------ // Функция обрабатывает значение при выборе опции <?php $select_type = $option['type'] == "select" ? "select" : "input"; $html = " $('".$select_type."[name=\"option[".$option['product_option_id']."]\"]').change(function(){\n"; $html .= " var selected = ".($select_type == "select" ? "$(':selected', this).val();" : "this.value;") . "\n"; $html .= " selectOption(".$option['product_option_id'].",selected,'".$select_type."');\n"; $html .= " });\n\n"; echo $html; } ?> $('#product').on('click', '#clear_options', function(e){ e.preventDefault(); clearOptions(); }); selectOption(); <?php } ?> ]]></add> </operation> </file> </modification> 2 Надіслати Поділитися на інших сайтах More sharing options... Kirillove Опубліковано: 4 червня 2017 Автор Share Опубліковано: 4 червня 2017 Kirillove, затираются картинки товаров если не ставлю галочки "выгружать картинки" в 1с, это недочет моей версии 1.6.3.6 или так задумано? В последней версии модуля это исправлено? если да, то какие примерно строки нужно заменитьИзменил опцию в настройках, теперь и физически на диске картинки проверяет, и не будет даже распаковывать если обмен картинками отключен.Отправлено с моего Power Five Evo через Tapatalk 2 Надіслати Поділитися на інших сайтах More sharing options... abadrozadub Опубліковано: 4 червня 2017 Share Опубліковано: 4 червня 2017 13 hours ago, Kirillove said: Для версии 2.3 найдена ошибка при выводе общего остатка по всем складам... Возможно это она вылезла. Уже исправлена 1.6.3.11 Но у меня версия 2.1.0.2 (rs.1) Надіслати Поділитися на інших сайтах More sharing options... abadrozadub Опубліковано: 4 червня 2017 Share Опубліковано: 4 червня 2017 13 hours ago, Kirillove said: После отладки отключите лог... Если включен, то расти он и будет, настройте ротацию. Если лог в режиме отладки, то при большом обмене он может достигать размера несколько гигабайт. Попробую, но опять же, обмен минимальный. А вот собственно ошибка которая заполняет файл error.log 2017-06-03 19:18:13 - PHP Notice: Undefined variable: dir in /admin/model/tool/exchange1c.php on line 3091 2017-06-03 19:18:13 - PHP Warning: readdir() expects parameter 1 to be resource, null given in /admin/model/tool/exchange1c.php on line 3091 Надіслати Поділитися на інших сайтах More sharing options... Kirillove Опубліковано: 4 червня 2017 Автор Share Опубліковано: 4 червня 2017 В 02.06.2017 в 18:57, SusereN сказал: Доброго дня. Обновился на 1.6.3.10, выгрузка не проходит. Гружу вручную, получаю ошибку Откатился на 3.9 - всё успешно Нашел ошибку, перед этой строчкой вставь : для opencart 2.1: $this->load->model('tool/exchange1c'); для opencart 2.3 $this->load->model('extension/exchange1c'); И там далее в этой функции есть такая же строчка, ее удалите 1 Надіслати Поділитися на інших сайтах More sharing options... AAK Опубліковано: 4 червня 2017 Share Опубліковано: 4 червня 2017 Большое спасибо за проделанную работу. Настроил выгрузку из Управление производственным предприятием 1.3 (1.3.89.1). Версия модуля 1.6.3.10. Почему-то не всегда вставляются описания к товарам. Методом проб и ошибок нашел нижеприведенный код. Вывел в лог $this->log($this->ERROR) - пустое значение, но SEO был сгенерирован. В чем ошибка не разобрался, просто закомментировал //if ($this->ERROR) return false; // SEO формируем когда известен product_id и товар записан $update = $this->seoGenerateProduct($data); //if ($this->ERROR) return false; if ($update || $new) { // Обновляем описание товара после генерации SEO $this->setProductDescription($data, $new); } return true; } // setProduct() Еще заметил, если изменить в 1с описание товара и произвести обмен, описание на сайте меняется, но при этом картинка исчезает. Если загрузка полная, все нормально. 1с не выгружает картинку, если она не менялась. Надіслати Поділитися на інших сайтах More sharing options... uvers Опубліковано: 5 червня 2017 Share Опубліковано: 5 червня 2017 (змінено) Всем доброго дня. Автору огромное спасибо за проделанную работу!! Теперь, собственно вопрос: ocStore 2.1.0.2 скачал и поставил opencart2.1-exchange1c_1.6.3.10.ocmod. После установки открыл товары и сразу получил ошибку Undefined index: affiliate_commission in /var/www/admin/www/dev2.ru/vqmod/vqcache/vq2-system_storage_modification_admin_controller_catalog_product.php on line 486 Почистил кэш vqmod/vqcache. Не помогло Пожалуйста, подскажите, в чем может быть проблема? Змінено 5 червня 2017 користувачем uvers Надіслати Поділитися на інших сайтах More sharing options... Blade Опубліковано: 5 червня 2017 Share Опубліковано: 5 червня 2017 (змінено) Виталий, добрый день, нужна помощь что эначит эта ошибка ? версия последняя 1.6.3.10 1С Управление нашей фирмой, редакция 1.6 (1.6.10.43) 2017-06-05 15:43:42 - 3.830 Mb | 7121 | >>>>>>>>>>>>>>>>>>>> НАЧАЛО ЗАГРУЗКИ ДАННЫХ <<<<<<<<<<<<<<<<<<<< 2017-06-05 15:43:42 - PHP Unknown: Object of class LibXMLError could not be converted to string in /var/www/*******/data/www/**********.ru/admin/model/tool/exchange1c.php on line 7137 2017-06-05 15:43:42 - 3.832 Mb | 7138 | Ошибка при загрузке файла: /var/www/*******/data/www/***********.ru/system/storage/cache/exchange1c/import.xml 2017-06-05 15:43:42 - 3.832 Mb | 0036 | Файл не является стандартом XML, подробности в журнале 2017-06-05 15:43:42 - modeImport(): Ошибка загрузки файла: /var/www/form/data/www/test.form-m.ru/system/storage/cache/exchange1c/import.xml Змінено 5 червня 2017 користувачем Blade 1 Надіслати Поділитися на інших сайтах More sharing options... rutskoifp Опубліковано: 5 червня 2017 Share Опубліковано: 5 червня 2017 Здравствуйте! Очень нужна помощь! При установке модуля 1.6.3.10 выдает ошибку! Модуль был установлен, но после обновления все пошло наперекосяк, решил снести и установить снова, результат плачевный.... теперь вообще не могу установить модуль! Движок 2.3 вот лог сайта [Mon Jun 05 19:43:14.234928 2017] [:error] [pid 8896] [client 78.29.9.4:34940] PHP Fatal error: Uncaught exception 'Exception' with message 'Error: Duplicate column name 'product_feature_id'<br />Error No: 1060<br />ALTER TABLE `oc_cart` ADD `product_feature_id` INT( 11 ) NOT NULL DEFAULT 0 AFTER `option`' in /home/c/xxx/public_html/system/library/db/mysqli.php:40\nStack trace:\n#0 /home/xxx/xxx/public_html/system/library/db.php(16): DB\\MySQLi->query('ALTER TABLE `o...', Array)\n#1 /home/c/xxx/public_html/admin/controller/extension/module/exchange1c.php(812): DB->query('ALTER TABLE `o...')\n#2 [internal function]: ControllerExtensionModuleExchange1c->install(Array)\n#3 /home/c/xxx/public_html/vqmod/vqcache/vq2-system_storage_modification_system_engine_action.php(51): call_user_func_array(Array, Array)\n#4 /home/c/xxx/public_html/vqmod/vqcache/vq2-system_storage_modification_system_engine_loader.php(24): Action->execute(Object(Registry), Array)\n#5 /home/c/xxx/public_html/admin/contro in /home/c/xxx/public_html/system/library/db/mysqli.php on line 40, referer: http://xxx/admin/index.php?route=extension/extension&token=3bmKhu87YSMU5NFbaAY2ceApVUb7Wo1j Помогите кто знает как решить, буду очень признателен! Надіслати Поділитися на інших сайтах More sharing options... rutskoifp Опубліковано: 5 червня 2017 Share Опубліковано: 5 червня 2017 (змінено) 1 час назад, rutskoifp сказал: Здравствуйте! Очень нужна помощь! При установке модуля 1.6.3.10 выдает ошибку! Модуль был установлен, но после обновления все пошло наперекосяк, решил снести и установить снова, результат плачевный.... теперь вообще не могу установить модуль! Движок 2.3 вот лог сайта [Mon Jun 05 19:43:14.234928 2017] [:error] [pid 8896] [client 78.29.9.4:34940] PHP Fatal error: Uncaught exception 'Exception' with message 'Error: Duplicate column name 'product_feature_id'<br />Error No: 1060<br />ALTER TABLE `oc_cart` ADD `product_feature_id` INT( 11 ) NOT NULL DEFAULT 0 AFTER `option`' in /home/c/xxx/public_html/system/library/db/mysqli.php:40\nStack trace:\n#0 /home/xxx/xxx/public_html/system/library/db.php(16): DB\\MySQLi->query('ALTER TABLE `o...', Array)\n#1 /home/c/xxx/public_html/admin/controller/extension/module/exchange1c.php(812): DB->query('ALTER TABLE `o...')\n#2 [internal function]: ControllerExtensionModuleExchange1c->install(Array)\n#3 /home/c/xxx/public_html/vqmod/vqcache/vq2-system_storage_modification_system_engine_action.php(51): call_user_func_array(Array, Array)\n#4 /home/c/xxx/public_html/vqmod/vqcache/vq2-system_storage_modification_system_engine_loader.php(24): Action->execute(Object(Registry), Array)\n#5 /home/c/xxx/public_html/admin/contro in /home/c/xxx/public_html/system/library/db/mysqli.php on line 40, referer: http://xxx/admin/index.php?route=extension/extension&token=3bmKhu87YSMU5NFbaAY2ceApVUb7Wo1j Помогите кто знает как решить, буду очень признателен! Решено! Удалил все устанавливаемые модулем таблицы, и изменил изменяемые им значение! модуль установился! Пробуем работать дальше...)))) Единственное, модуль не прописался в админке-во вкладке дополнение! Выгрузка идет порядка 20 мин, выкрузилось все кроме товаров! (УНФ 1.6.10.44) Для справки товаров около 1000 Змінено 5 червня 2017 користувачем rutskoifp Надіслати Поділитися на інших сайтах More sharing options... Furious Опубліковано: 5 червня 2017 Share Опубліковано: 5 червня 2017 Доброго времени суток. А когда планируете 1.6.3.11? установил 1.6.3.10. обновил на модификатор 1.6.3.11 вами выложенный (не знаю можно ли так ) Ошибка та же: 2017-06-05 22:24:30 - PHP Warning: opendir(/home/***/test/image/cache/import_files/23): failed to open dir: No such file or directory in /home/***/test/admin/model/extension/exchange1c.php on line 3091 2017-06-05 22:24:30 - PHP Warning: readdir() expects parameter 1 to be resource, boolean given in /home/***/test/admin/model/extension/exchange1c.php on line 3092 2017-06-05 22:24:30 - PHP Warning: readdir() expects parameter 1 to be resource, boolean given in /home/***/test/admin/model/extension/exchange1c.php on line 3092 2017-06-05 22:24:30 - PHP Warning: readdir() expects parameter 1 to be resource, boolean given in /home/***/test/admin/model/extension/exchange1c.php on line 3092 2017-06-05 22:24:30 - PHP Warning: readdir() expects parameter 1 to be resource, boolean given in /home/***/test/admin/model/extension/exchange1c.php on line 3092 2017-06-05 22:24:30 - PHP Warning: readdir() expects parameter 1 to be resource, boolean given in 1с УТ3.1 Украина OcStore ocStore 2.3.0.2.2 Шаблон Демо Стабильно работает 1.6.3.9 но без присвоения атрибутов Надіслати Поділитися на інших сайтах More sharing options... Kirillove Опубліковано: 6 червня 2017 Автор Share Опубліковано: 6 червня 2017 Решено! Удалил все устанавливаемые модулем таблицы, и изменил изменяемые им значение! модуль установился! Пробуем работать дальше...)))) Единственное, модуль не прописался в админке-во вкладке дополнение! Выгрузка идет порядка 20 мин, выкрузилось все кроме товаров! (УНФ 1.6.10.44) Для справки товаров около 1000Многовато для 1000 товаров, на моем сервере вроде было не дольше 5 мин, сегодня вечером уже точно выложу 1.6.3.11 и проверим ещё раз вместе. А лог есть? Очень интересно посмотреть что он там долго делает.Отправлено с моего Power Five Evo через Tapatalk Надіслати Поділитися на інших сайтах More sharing options... Kirillove Опубліковано: 6 червня 2017 Автор Share Опубліковано: 6 червня 2017 Доброго времени суток. А когда планируете 1.6.3.11? установил 1.6.3.10. обновил на модификатор 1.6.3.11 вами выложенный (не знаю можно ли так [emoji4] ) Ошибка та же:2017-06-05 22:24:30 - PHP Warning: opendir(/home/***/test/image/cache/import_files/23): failed to open dir: No such file or directory in /home/***/test/admin/model/extension/exchange1c.php on line 30912017-06-05 22:24:30 - PHP Warning: readdir() expects parameter 1 to be resource, boolean given in /home/***/test/admin/model/extension/exchange1c.php on line 30922017-06-05 22:24:30 - PHP Warning: readdir() expects parameter 1 to be resource, boolean given in /home/***/test/admin/model/extension/exchange1c.php on line 30922017-06-05 22:24:30 - PHP Warning: readdir() expects parameter 1 to be resource, boolean given in /home/***/test/admin/model/extension/exchange1c.php on line 30922017-06-05 22:24:30 - PHP Warning: readdir() expects parameter 1 to be resource, boolean given in /home/***/test/admin/model/extension/exchange1c.php on line 30922017-06-05 22:24:30 - PHP Warning: readdir() expects parameter 1 to be resource, boolean given in 1с УТ3.1 Украина OcStore ocStore 2.3.0.2.2 Шаблон ДемоСтабильно работает 1.6.3.9 но без присвоения атрибутовЭта проблема не в модификаторе, там рядом я функцию выложил заменой которой решит эту проблему сегодня уже точно выложу Навь версию, пришлось тщательно тестироватьОтправлено с моего Power Five Evo через Tapatalk 1 Надіслати Поділитися на інших сайтах More sharing options... 3 р dinox changed the title to Модуль обмена для opencart v2.3 с учетной системой по стандарту CommerceML [Поддержка] Назад 25 26 27 28 29 30 31 32 33 34 35 Вперед Сторінка 30 з 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 080 переглядів Sha 17 листопада 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 427 переглядів 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 061 перегляд 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 832 перегляди 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 Опубліковано: 3 червня 2017 Автор Share Опубліковано: 3 червня 2017 В 02.06.2017 в 18:57, SusereN сказал: Доброго дня. Обновился на 1.6.3.10, выгрузка не проходит. Гружу вручную, получаю ошибку Откатился на 3.9 - всё успешно Ошибка была, потом исправил... поторопился после переделки заказов не все проверил... Проверил у себя для версии 2.3, функция есть, если у Вас в файле model/extension/exchange1c.php есть такая функция, проверьте public она или private. Она должна быть public. 1 Надіслати Поділитися на інших сайтах More sharing options... Kirillove Опубліковано: 3 червня 2017 Автор Share Опубліковано: 3 червня 2017 /** * ver 3 * update 2017-06-04 * Удаляет в кэше эту картинку */ private function deleteCacheImage($image_info) { if (!$image_info) { // Нечего удалять return false; } // Путь в папке кэш к картинке $path = str_replace(DIR_IMAGE, DIR_IMAGE . "cache/" , $image_info['dirname']); // Откроем папку для чтения $delete_files = array(); $dh = @opendir($path); // Если каталог не открывается if (!$dh) { $this->log("Каталог не существует: " . $path); return false; } while(($file = readdir($dh)) !== false) { $find = strstr($file, $image_info['filename']); if ($find != "") { $delete_files[] = $find; } } closedir($dh); if ($delete_files) { foreach ($delete_files as $filename) { unlink($path . "/" . $filename); $this->log("Удалена картинка из кэша: " . $filename); } } return true; } // deleteCacheImage() 1 Надіслати Поділитися на інших сайтах More sharing options... Kirillove Опубліковано: 3 червня 2017 Автор Share Опубліковано: 3 червня 2017 Обновленный модификатор для opencart 2.3 для модуля версий 1.6.3 Скрытый текст <modification> <name>Exchange Module for OpenCart 2.3</name> <version>1.6.3.11_oc2.3</version> <id>OpenCart Exchange</id> <author>KirilLoveVE</author> <link>https://github.com/KirilLoveVE/opencart2-exchange1c</link> <code>exchange1c</code> <file path="admin/controller/common/menu.php"> <operation> <search><![CDATA[$data['text_option'] = $this->language->get('text_option');]]></search> <add position="after"><![CDATA[$data['text_warehouse'] = $this->language->get('text_warehouse');]]></add> </operation> <operation> <search><![CDATA[$data['module'] = $this->url->link('extension/module', 'token=' . $this->session->data['token'], 'SSL');]]></search> <add position="after"><![CDATA[$data['exchange1c'] = $this->url->link('module/exchange1c', 'token=' . $this->session->data['token'], 'SSL');]]></add> </operation> <operation> <search><![CDATA[$data['option'] = $this->url->link('catalog/option', 'token=' . $this->session->data['token'], 'SSL');]]></search> <add position="after"><![CDATA[$data['warehouse'] = $this->url->link('catalog/warehouse', 'token=' . $this->session->data['token'], 'SSL');]]></add> </operation> </file> <file path="admin/view/template/common/menu.tpl"> <operation> <search><![CDATA[<li><a href="<?php echo $modification; ?>"><?php echo $text_modification; ?></a></li>]]></search> <add position="after"><![CDATA[ <li><a href="<?php echo $exchange1c; ?>">Exchange 1C 8.x</a></li>]]></add> </operation> <operation> <search><![CDATA[<li><a href="<?php echo $option; ?>"><?php echo $text_option; ?></a></li>]]></search> <add position="after"><![CDATA[ <li><a href="<?php echo $warehouse; ?>"><?php echo $text_warehouse; ?></a></li>]]></add> </operation> </file> <file path="admin/language/russian/common/menu.php"> <operation> <search><![CDATA[$_['text_option'] = 'Опции';]]></search> <add position="after"><![CDATA[$_['text_warehouse'] = 'Склады';]]></add> </operation> </file> <file path="admin/language/english/common/menu.php"> <operation> <search><![CDATA[$_['text_option'] = 'Options';]]></search> <add position="after"><![CDATA[$_['text_warehouse'] = 'Warehouses';]]></add> </operation> </file> <file path="system/library/image.php"> <operation> <search><![CDATA[$mime = $this->info['mime'];]]></search> <add position="replace"><![CDATA[$info = getimagesize($image); $mime = isset($info['mime']) ? $info['mime'] : '';]]></add> </operation> <operation> <search><![CDATA[imagecopy($this->image, $watermark, $watermark_pos_x, $watermark_pos_y, 0, 0, 120, 40);]]></search> <add position="replace"><![CDATA[imagecopy($this->image, $watermark, $watermark_pos_x, $watermark_pos_y, 0, 0, $watermark_width, $watermark_height);]]></add> </operation> </file> <file path="catalog/controller/product/product.php"> <operation> <search><![CDATA[if ($product_info['quantity'] <= 0) {]]></search> <add position="before"><![CDATA[ // +++ TESLA-CHITA $product_id = (int)$this->request->get['product_id']; // Характеристики $product_option_values = array(); $sql = "SELECT `pfv`.`product_feature_id`, `pov`.`product_option_id`, `pfv`.`product_option_value_id` FROM `" . DB_PREFIX . "product_feature_value` `pfv` LEFT JOIN `" . DB_PREFIX . "product_option_value` `pov` ON (`pfv`.`product_option_value_id` = `pov`.`product_option_value_id`) LEFT JOIN `" . DB_PREFIX . "option` `o` ON (`pov`.`option_id` = `o`.`option_id`) WHERE `pfv`.`product_id` = " . $this->request->get['product_id'] . " ORDER BY `o`.`sort_order`"; $query = $this->db->query($sql); $features = $query->rows; foreach ($features as $feature_value) { if (empty($product_option_values[$feature_value['product_option_value_id']])) { $product_option_values[$feature_value['product_option_value_id']] = array(); } foreach ($features as $feature_value1) { if ($feature_value1['product_feature_id'] == $feature_value['product_feature_id'] && $feature_value1['product_option_value_id'] <> $feature_value['product_option_value_id']) { $product_option_values[$feature_value['product_option_value_id']][] = $feature_value1['product_option_value_id']; } } } unset($query); $customer_group_id = $this->customer->isLogged()? $this->customer->getGroupId() : $this->config->get('config_customer_group_id'); $product_features_price = array(); $query = $this->db->query("SELECT `product_feature_id`, `price` FROM `" . DB_PREFIX . "product_price` WHERE `product_id` = " . (int)$this->request->get['product_id'] . " AND `customer_group_id` = " . $customer_group_id); $data['currency_data'] = array( 'symbol' => $this->currency->getSymbolRight($this->session->data['currency']), 'decimal' => $this->currency->getDecimalPlace($this->session->data['currency']), 'value' => $this->currency->getValue($this->session->data['currency']) ); $product_features_price = array(); $product_features_options = array(); $product_features_options_values = array(); foreach ($query->rows as $query_price) { $product_features_price[$query_price['product_feature_id']] = array( 'value' => $query_price['price'] * $data['currency_data']['value'], 'tax' => $this->tax->calculate($query_price['price'], $product_info['tax_class_id'], $this->config->get('config_tax')) * $data['currency_data']['value'] ); foreach ($features as $feature) { if ($feature['product_feature_id'] == $query_price['product_feature_id']) { if (!isset($product_features_options[$feature['product_feature_id']])) { $product_features_options[$feature['product_feature_id']] = array(); } $product_features_options[$feature['product_feature_id']][$feature['product_option_id']] = $feature['product_option_value_id']; $product_features_options_values[$feature['product_option_value_id']] = $feature['product_feature_id']; } } } $data['product_features_price'] = $product_features_price; $data['product_features_options'] = $product_features_options; $data['product_features_options_values'] = $product_features_options_values; // Остатки в базовой единице $product_quantity = array(); $product_units = array(); $quantity_total = 0; if ($this->config->get('config_stock_display') && !empty($product_features_options)) { $query = $this->db->query("SELECT * FROM `" . DB_PREFIX . "product_quantity` WHERE `product_id` = " . (int)$this->request->get['product_id']); foreach ($query->rows as $query_quantity) { if (!isset($product_quantity[$query_quantity['product_feature_id']])) { $product_quantity[$query_quantity['product_feature_id']] = array(); } $quantity = &$product_quantity[$query_quantity['product_feature_id']]; if (!isset($quantity[$query_quantity['warehouse_id']])) { $quantity[$query_quantity['warehouse_id']] = $query_quantity['quantity']; $quantity_total += $query_quantity['quantity']; } $query = $this->db->query("SELECT `u`.`name`, `u`.`rus_name1`, `pu`.`ratio`, `pu`.`product_feature_id`, `u`.`unit_id` FROM `" . DB_PREFIX . "product_unit` `pu` LEFT JOIN `" . DB_PREFIX . "unit` `u` ON (`pu`.`unit_id` = `u`.`unit_id`) WHERE `pu`.`product_id` = " . $product_id); if ($query->num_rows) { foreach ($query->rows as $row) { if (isset($product_units[$row['unit_id']])) continue; $product_units[$row['unit_id']] = array( 'rus_name' => $row['rus_name1'], 'name' => $row['name'], 'ratio' => $row['ratio'], 'product_feature_id' => $row['product_feature_id'] ); } } } } $product_quantity[0] = $quantity_total; $data['product_quantity'] = $product_quantity; $data['product_units'] = $product_units; // Список складов $sql = "SELECT * FROM `" . DB_PREFIX . "warehouse`"; $query = $this->db->query($sql); $data['warehouses'] = array(); foreach ($query->rows as $query_warehouse) { $data['warehouses'][$query_warehouse['warehouse_id']] = $query_warehouse['name']; } // --- TESLA-CHITA ]]></add> </operation> <operation> <search><![CDATA[$product_option_value_data[] = array(]]></search> <add position="before"><![CDATA[ // +++ TESLA-CHITA $class = ""; foreach ($product_option_values[$option_value['product_option_value_id']] as $value) { if (empty($class)) { $class = $value; } else { $class .= " " . $value; } } // --- TESLA-CHITA ]]></add> </operation> <operation> <search><![CDATA['product_option_value_id' => $option_value['product_option_value_id'],]]></search> <add position="after"><![CDATA[ // +++ TESLA-CHITA 'price_prefix' => $option_value['price_prefix'], 'class' => $class, // --- TESLA-CHITA]]></add> </operation> </file> <file path="catalog/model/catalog/product.php"> <operation> <search><![CDATA[public function getTotalProductSpecials() {]]></search> <add position="before"><![CDATA[ // +++ TESLA-CHITA public function getProductFeaturesPrice($product_id, $product_feature_id, $customer_group_id=0, $unit_id=0) { $str_customer_group_id = $customer_group_id ? " AND customer_group_id = " . $customer_group_id : ""; $str_unit_id = $unit_id? " AND unit_id = " . $unit_id : ""; $sql = "SELECT price FROM " . DB_PREFIX . "product_price WHERE product_id = " . $product_id . " AND product_feature_id = " . $product_feature_id . $str_customer_group_id . $str_unit_id; $this->log->write($sql); $query = $this->db->query($sql); if ($query->num_rows) { return $query->rows; } else { return 0; } } // --- TESLA-CHITA ]]></add> </operation> </file> <file path="admin/model/sale/order.php"> <operation> <search><![CDATA['order_id' => $order_query->row['order_id'],]]></search> <add position="after"><![CDATA[ // +++ TESLA-CHITA 'payment_inn' => isset($order_query->row['payment_inn']) ? $order_query->row['payment_inn'] : "", 'shipping_kpp' => isset($order_query->row['shipping_inn']) ? $order_query->row['shipping_inn'] : "", 'patronymic' => isset($order_query->row['patronymic']) ? $order_query->row['patronymic'] : "", 'payment_patronymic' => isset($order_query->row['payment_patronymic']) ? $order_query->row['payment_patronymic'] : "", 'shipping_patronymic' => isset($order_query->row['shipping_patronymic']) ? $order_query->row['shipping_patronymic'] : "", // --- TESLA-CHITA]]></add> </operation> </file> <file path="system/library/cart.php"> <operation> <search><![CDATA[$price = $product_query->row['price'];]]></search> <add position="replace"><![CDATA[// +++ TESLA-CHITA //-$price = $product_query->row['price']; $cart_option = json_decode($cart['option']); $product_feature_id = $this->getProductFeatureId($cart_option); if ($product_feature_id) { $customer_group_id = $this->customer->isLogged()? $this->customer->getGroupId() : $this->config->get('config_customer_group_id'); $price = $this->getProductFeaturesPrice($cart['product_id'], $product_feature_id, $customer_group_id); } else { $price = $product_query->row['price']; } // --- TESLA-CHITA]]></add> </operation> <operation> <search><![CDATA[ public function getProducts() {]]></search> <add position="before"><![CDATA[ // +++ TESLA-CHITA private function getProductFeaturesPrice($product_id, $product_feature_id, $customer_group_id=0, $unit_id=0) { $str_customer_group_id = $customer_group_id ? " AND customer_group_id = " . $customer_group_id : ""; $str_unit_id = $unit_id? " AND unit_id = " . $unit_id : ""; $sql = "SELECT price FROM " . DB_PREFIX . "product_price WHERE product_id = " . $product_id . " AND product_feature_id = " . $product_feature_id . $str_customer_group_id . $str_unit_id; $query = $this->db->query($sql); if ($query->num_rows == 1) { return $query->row['price']; } else { return 0; } } private function getProductFeatureId($options) { $where = ""; foreach ($options as $product_option_value_id) { $where .= $where ? ",".$product_option_value_id : $product_option_value_id; } if (!$where) return 0; $sql = "SELECT product_feature_id FROM " . DB_PREFIX . "product_feature_value WHERE product_option_value_id IN (" . $where . ") GROUP BY product_feature_id"; $query = $this->db->query($sql); if ($query->num_rows == 1) { return $query->row['product_feature_id']; } return 0; } // --- TESLA-CHITA ]]></add> </operation> <operation> <search><![CDATA[if ($option_value_query->row['price_prefix'] == '+') {]]></search> <add position="replace"><![CDATA[if ($option_value_query->row['price_prefix'] == 'off+') {]]></add> </operation> <operation> <search><![CDATA[} elseif ($option_value_query->row['price_prefix'] == '-') {]]></search> <add position="replace"><![CDATA[} elseif ($option_value_query->row['price_prefix'] == 'off-') {]]></add> </operation> </file> <file path="catalog/view/theme/*/template/product/product.tpl"> <operation> <search><![CDATA[<li><?php echo $text_stock; ?> <?php echo $stock; ?></li>]]></search> <add position="replace"><![CDATA[<li id="stock"><?php echo $text_stock; ?> <?php echo $stock; ?></li>]]></add> </operation> <operation> <search><![CDATA[<h2><?php echo $price; ?></h2>]]></search> <add position="replace"><![CDATA[<h2 id="price"><?php echo $price; ?></h2>]]></add> </operation> <operation> <search><![CDATA[<li><?php echo $text_tax; ?> <?php echo $tax; ?></li>]]></search> <add position="replace"><![CDATA[<li id="tax"><?php echo $text_tax; ?> <?php echo $tax; ?></li>]]></add> </operation> <operation> <search><![CDATA[<li><?php echo $text_points; ?> <?php echo $points; ?></li>]]></search> <add position="replace"><![CDATA[<li id="points"><?php echo $text_points; ?> <?php echo $points; ?></li>]]></add> </operation> <operation> <search><![CDATA[<option value="<?php echo $option_value['product_option_value_id']; ?>">]]></search> <add position="replace"><![CDATA[<option class="<?php echo $option_value['class']; ?>" value="<?php echo $option_value['product_option_value_id']; ?>">]]></add> </operation> <operation> <search><![CDATA[<input type="radio" name="option[<?php echo $option['product_option_id']; ?>]"]]></search> <add position="replace"><![CDATA[<input class="<?php echo $option_value['class']; ?>" type="radio" name="option[<?php echo $option['product_option_id']; ?>]"]]></add> </operation> <operation> <search><![CDATA[<input type="checkbox" name="option[<?php echo $option['product_option_id']; ?>][]"]]></search> <add position="replace"><![CDATA[<input class="<?php echo $option_value['class']; ?>" type="checkbox" name="option[<?php echo $option['product_option_id']; ?>]"]]></add> </operation> <operation> <search><![CDATA[<input type="hidden" name="product_id" value="<?php echo $product_id; ?>" />]]></search> <add position="after"><![CDATA[ <input type="hidden" name="product_feature_id" value="0" /> <input type="hidden" name="unit_id" value="0" /> ]]></add> </operation> <operation> <search><![CDATA[$(document).ready(function() {]]></search> <add position="before"><![CDATA[var text_stock = "<?php echo $text_stock; ?>"; var text_tax = "<?php echo $text_tax; ?>"; <?php if (isset($warehouses)) { echo "var \$warehouses = {"; foreach ($warehouses as $warehouse_id => $name) { echo "'" . $warehouse_id . "':'" . $name . "',"; } echo "}\n"; } ?> <?php if ($options) {?> //------------------------------------------------------------------------------------------------------------------------------ // Определение переменных для характеристик var $options_type = {<?php foreach ($options as $option) { echo $option['product_option_id'].":'".$option['type']."',"; }?>}; var options_order = [<?php foreach ($options as $option) { echo $option['product_option_id'].","; }?>]; var $options_required = {<?php foreach ($options as $option) { echo $option['product_option_id'].":true,"; }?>}; var $options = {<?php foreach ($product_features_options as $product_feature_id => $feature) { $str_value = $product_feature_id.":{"; foreach ($feature as $product_option_id => $product_option_value_id) { $str_value .= $product_option_id.":".$product_option_value_id.","; } $str_value .= "},"; echo $str_value; } echo "};\n";?> // Тут хранится id выбранной характеристики var product_feature_id = 0; var unit_id = 0; <?php $str_features = "var \$features = {"; $str_price = "var \$price = {"; $str_quantity = "// quantity{product_feature_id:{warehouse_id:{unit_id:quantity}}}\n"; $quantity_total = 0; $str_quantity .= "var \$quantity = {"; foreach ($product_features_options as $product_feature_id => $feature_option) { // Цены $str_price .= "'" . $product_feature_id . "':{'value':" . $product_features_price[$product_feature_id]['value'] . ",'tax':" . $product_features_price[$product_feature_id]['tax'] . "},"; // Характеристики $str_features .= "'" . implode("_", $feature_option) . "':" . $product_feature_id . ","; // Остатки $quantity_array = isset($product_quantity[$product_feature_id]) ? $product_quantity[$product_feature_id] : array(); $str_quantity .= "'" . $product_feature_id . "':"; $str_quantity .= "{"; foreach ($quantity_array as $warehouse_id => $quantity) { $str_quantity .= "'" . $warehouse_id . "':" . $quantity . ","; $quantity_total += $quantity; } $str_quantity .= "},"; } echo $str_features . "};\n"; echo $str_price . "};\n"; echo $str_quantity . "};\n"; echo "var quantity_total = " . $quantity_total . ";\n"; echo "var \$product_units = {"; $num = 1; foreach ($product_units as $unit_id => $unit) { if ($unit['ratio'] == 1) { echo "0:{'unit_id':'" . $unit_id . "','name':'" . $unit['rus_name'] . "','ratio':".$unit['ratio']."},"; } else { echo $num . ":{'unit_id':'" . $unit_id . "','name':'" . $unit['rus_name'] . "','ratio':".$unit['ratio']."},"; $num++; } } echo "};\n"; echo "var \$currency_data = {'symbol':'".$currency_data['symbol']."','decimal':".$currency_data['decimal']."};\n"; ?> //------------------------------------------------------------------------------------------------------------------------------ // Функция отображает остатки по складам // Возвращает строковую переменную в которой перечислены названия всех складов с остатками и единицами измерений function displayQuantity() { if ($.type($quantity[product_feature_id]) == "string") { // Если переменная строка, то есть нет складов, возвращается только количество return $quantity[product_feature_id]; } else { var str = ""; var quantity_warehouse = 0; var str_war = ""; // Базовая единица if ($product_units[0]['name']) { str_unit = " ("+$product_units[0]['name']+")"; } else { str_unit = ""; } // Перебираем все остатки по складам $.each($quantity[product_feature_id],function(warehouse_id, product_quantity) { // Нет складов, если warehouse_id = 0 if (warehouse_id == "0") { // Перебираем все единицы измерений $.each(product_quantity,function(unit_id, quantity) { //str += quantity+" ("+$product_units[unit_id]+"),"; str += "\n" + quantity; }); } // Остатки в выбранной единице else if (unit_id != 0) { // Название склада str_war = " Склад: "+$warehouses[warehouse_id]+": "; } else { if (product_quantity > 0) { quantity_warehouse++; str_war += " "+$warehouses[warehouse_id]+" = "+product_quantity+str_unit; } } }); if (quantity_warehouse > 0) { str = " "+quantity_total+str_unit+" в "+quantity_warehouse+" магазинах: ("+str_war+")"; } else if (quantity_total > 0) { str = " "+quantity_total+str_unit+" по опциям: " + $quantity[product_feature_id][0]; } else { str = " нет в наличии"; } return str; } } // displayQuantity() //------------------------------------------------------------------------------------------------------------------------------ // Функция отображает на странице цену, налоги, остатки, // а также, для передачи в корзину, устанавливает значение product_feature_id function displaySelect() { if (product_feature_id){ $('#price').text(Math.round($price[product_feature_id]['value']).toFixed($currency_data['decimal'])+$currency_data['symbol']); $('#tax').text(text_tax+" "+Math.round($price[product_feature_id]['tax']).toFixed($currency_data['decimal'])+$currency_data['symbol']); $('#stock').text(text_stock+" "+displayQuantity()); $('input[name=\'product_feature_id\']').val(product_feature_id); //$('input[name=\'unit_id\']').val($product_units[unit_id]); } else { $('#price').text(""); $('#tax').text(""); $('#stock').text(text_stock+" "+quantity_total+" ("+$product_units[0]['name']+")"); $('input[name=\'product_feature_id\']').val(0); //$('input[name=\'unit_id\']').val(0); } } // displaySelect() //------------------------------------------------------------------------------------------------------------------------------ // Функция очищает все опции и разблокирует их, сбрасывает ид характеристики, а также обновляет надписи на страничке function clearOptions() { // Перебираем все опции $.each($options_type,function(product_option_id, value) { if (value == "select") { // Делаем доступным опцию $('select[name="option['+product_option_id+']"]').attr("disabled",false); // Сбрасываем выбор, по-умолчанию будет выбран первый элемент $('select[name="option['+product_option_id+']"]').val(''); // Делаем доступным все значения опции $('select[name="option['+product_option_id+']"] option').each(function(){ $(this).removeAttr("disabled"); }); } else { // Делаем доступным опцию $('input[name="option['+product_option_id+']"]').attr("disabled",false); // Снимаем выбор со всех значений $('input[name="option['+product_option_id+']"]').attr('checked', false); } $options_required[product_option_id] = true; }); // Проверка на обязательные опции checkRequired(); // Сбрасываем выбранную характеристику product_feature_id = 0; // Обновляем надписи на страничке displaySelect(); } // clearOptions() //------------------------------------------------------------------------------------------------------------------------------ // Функция проверяет и устанавливает какие опции обязательные, бывает что некоторые характеристики имеют разное количество опций function checkRequired() { // Перебираем все опции $.each($options_required,function(product_option_id, required) { if ($options_type[product_option_id] == "select") { // Получаем элемент в котором устанавливается класс обязательной опции $form = $('select[name="option['+product_option_id+']"]').parents("div.form-group"); // Если опция должна быть обязательной, а она не содержит класс "required", устанавливает этот класс или наоборот убираем его if (required && !$form.hasClass("required")) { $form.addClass("required"); } else if (!required && $form.hasClass("required")) { $form.removeClass("required"); } } else { // Получаем элемент в котором устанавливается класс обязательной опции $form = $('input[name="option['+product_option_id+']"]').parents("div.form-group"); // Если опция должна быть обязательной, а она не содержит класс "required", устанавливает этот класс или наоборот убираем его if (required && !$form.hasClass("required")) { $form.addClass("required"); } else if (!required && $form.hasClass("required")) { $form.removeClass("required"); } } }); } // checkRequired() //------------------------------------------------------------------------------------------------------------------------------ // Функция возвращает выбранные опции значений в виде объекта // Возвращает $option_values - объект с опция и значениями function getOptionValues() { var $option_values = {}; // Перебираем опции в том порядке в каком они заданы на сайте $.each(options_order,function(index, product_option_id) { if ($options_type[product_option_id] == 'select') { // Если опция типа select $option_values[product_option_id] = $('select[name="option['+product_option_id+']"] :selected').val(); } else { // Если опция типа input $option_values[product_option_id] = $('input[name="option['+product_option_id+']"]:checked').val(); } }); return $option_values; } // getOptionValues() //------------------------------------------------------------------------------------------------------------------------------ // Функция по выбранным опциям возвращает product_feature_id // $option_values - объект с опциями и значений // Возвращает ид характеристики, если вариант выбранныхопций не существует ни в одной характеристики, то вернет 0 function getProductFeature($option_values) { var new_product_feature_id = 0; $.each($options,function(feature_id, $product_options) { // Количество совпадений var matches = 0; // Перебираем все опции характеристики $.each($product_options,function(product_option_id, product_option_value_id) { // Ищем совпадение значений if ($option_values[product_option_id] == product_option_value_id) { matches ++; } }); // Если совпали все опции if (matches == options_order.length) { // Сохраним значение характеристики где совпали все опции new_product_feature_id = feature_id; // Прервем цикл return false; } }); return new_product_feature_id; } // getProductFeature() //------------------------------------------------------------------------------------------------------------------------------ // Функция устанавливает доступность опции типа input и ее значения // current_product_option_value_id - текущее выбранное значение опции // current_option_id - текущая опция в которой выбрано значение // $option_values - объект в котором заданы все значения опций текущей характеристики // Возвращает значение текущей опции function setAccessInputOption(current_option_id, current_product_option_value_id, $option_values) { var val = 0; var required = false; // Перебираем все значения опций $('div#input-option'+current_option_id+' div label input').each(function(index){ // Если в классе не содержится значение выбранной опции, то отключаем эту опцию и снимаем флажок if (!$(this).hasClass(current_product_option_value_id) && (current_product_option_value_id)) { $(this).attr("disabled",true); $(this).prop("checked",false); } else { required = true; // Включаем,если была отключена ранее $(this).attr("disabled",false); // Если есть в варианте текущее значение опции if ($option_values[current_option_id] == $(this).val()) { // И еще не выбрано значение if (!val) { val = $(this).val(); $(this).prop("checked",true); } else { // Если значение уже было установлено, то с других опций снимаем выбор $(this).prop("checked",false); } } else { // Если вариант не содержит значение, снимаем выбор $(this).prop("checked",false); //$(this).attr("disabled",true); } } }); $options_required[current_option_id] = required; return val; } // setAccessSelectOption() //------------------------------------------------------------------------------------------------------------------------------ // Функция устанавливает доступность опции типа select и ее значения // current_product_option_value_id - текущее выбранное значение опции // current_option_id - текущая опция в которой выбрано значение // $option_values - объект в котором заданы все значения опций текущей характеристики // Возвращает значение текущей опции function setAccessSelectOption(current_option_id, current_product_option_value_id, $option_values) { var val = 0; var required = false; // Перебираем все значения опций $('select#input-option'+current_option_id+' option').each(function(index){ // Если в классе не содержится значение выбранной опции, // и есть само значение и не первое, тогда отключаем эту опцию и снимаем флажок if (!$(this).hasClass(current_product_option_value_id) && (current_product_option_value_id) && index > 0) { $(this).attr("disabled",true); $(this).prop("selected",false); } else { required = true; // Значение содержится в классе, значит разблокируем если был заблокирован $(this).attr("disabled",false); // Если не было ранее выбрано значение, и не первое, // и в варианте для этой опции есть текущее значение if (!val && index > 0 && $option_values[current_option_id] == $(this).val()) { // Записываем выбранное значение val = $(this).val(); // Выбираем его в селекте $(this).prop("selected",true); } } }); $options_required[current_option_id] = required; return val; } // setAccessSelectOption() //------------------------------------------------------------------------------------------------------------------------------ // Функция устанавливает доступность опций и их значений // current_product_option_value_id - текущее выбранное значение опции // current_option_id - текущая опция в которой выбрано значение // $option_values - объект в котором заданы все значения опций текущей характеристики // Возвращает объект $option_values, теоретически он не меняется, оставлено временно для тестирования function setAccessOptions(current_product_option_value_id, current_option_id, $option_values) { // Выберем опции по варианту $.each(options_order,function(index, product_option_id) { if (current_option_id == product_option_id) { $option_values[product_option_id] = current_product_option_value_id; } else { if ($options_type[product_option_id] == 'select') { // Установим доступность значений в опции типа select //$option_values[product_option_id] = setAccessSelectOption(product_option_id, current_product_option_value_id, $option_values); setAccessSelectOption(product_option_id, current_product_option_value_id, $option_values); } else { // Установим доступность значений в опции типа input //$option_values[product_option_id] = setAccessInputOption(product_option_id, current_product_option_value_id, $option_values); setAccessInputOption(product_option_id, current_product_option_value_id, $option_values); } } }); return $option_values; } // setAccessOptions() //------------------------------------------------------------------------------------------------------------------------------ // Функция получает первый вариант опция по выбранному значению одной из опций // product_option_value_id - значение выбранной опции // Возвращает объект (index = product_option_id, value = product_option_value_id) function getRightOption(product_option_value_id) { // Тут хранится вариант опций выбранной характеристики var $option_values = {}; // Перебирем все опции $.each($options, function(sel_product_feature_id, $product_options) { // Прервем цикл, если ид характеристики уже определена if (product_feature_id) { return false; } // Перебираем все опции характеристики $.each($product_options, function(option_id, sel_product_option_value_id) { // Если значение неопределено, берем первую попавшуюся характеристику if (product_option_value_id == undefined) { // Запишем id характеристики, чтобы потом передать ее в корзину product_feature_id = sel_product_feature_id; // Получим вариант опций и значений этой характеристики $option_values = $product_options; // Прервем цикл return false; } // Если совпало значение опции в первой попавшейся характеристики, тогда выбираем ее, и получаем остальные значения опций else if (sel_product_option_value_id == product_option_value_id) { // Запишем id характеристики, чтобы потом передать ее в корзину product_feature_id = sel_product_feature_id; // Получим вариант опций и значений этой характеристики $option_values = $product_options; // Прервем цикл return false; } }); }); return $option_values; } // getRightOption() //------------------------------------------------------------------------------------------------------------------------------ // Функция вызывается при изменении любой опции // current_option_id - это номер опции в которой выбрано значение // selected - выбранное значение опции, product_option_value_id // type - тип опции, может иметь значение: select, input, radio, image function selectOption(current_option_id, selected, type) { // Объект опций с выбранными значениями (index = опция, value = значение) var $option_values = {}; // Получим существующие значения опций $option_values = getOptionValues(); // Проверим вариант и получим id характеристики, если вариант неверный, тогда id = 0 product_feature_id = getProductFeature($option_values); // Если опции не соответствуют ни одной характеристики, выставляем другие опции по первому совпадению в первой найденой характеристики if (!product_feature_id) { // Получим вариант опции по выбранному значению одной из опций // option_values это объект index = product_option_id, value = product_option_value_id $option_values = getRightOption(selected); // Устанавливает доступность значений всех опций setAccessOptions(selected, current_option_id, $option_values); } // Проверим опции на обязательные checkRequired(); // Отображает выбранные данные displaySelect(); } <?php } ?> ]]></add> </operation> <operation> <search><![CDATA[$(document).ready(function() {]]></search> <add position="after"><![CDATA[<?php if ($options) {?> // Кнопки очистки опций, под каждый шаблон возможно придется править //$('select[name="option[9]"]').parent('div').before('<div class="form-group"><a href="#" id="clear_options">Очистить опции</a></div>'); $('div#input-option7').parent('div').after('<div class="form-group"><a href="#" id="clear_options">Очистить опции</a></div>'); //$('div#form-group').parent('div').after('<div class="form-group"><a href="#" id="clear_options">Очистить опции</a></div>'); $('#product').find('h3').after('<div class="form-group"><a href="#" id="clear_options">Очистить опции</a></div>'); <?php foreach ($options as $option) { ?> //------------------------------------------------------------------------------------------------------------------------------ // Функция обрабатывает значение при выборе опции <?php $select_type = $option['type'] == "select" ? "select" : "input"; $html = " $('".$select_type."[name=\"option[".$option['product_option_id']."]\"]').change(function(){\n"; $html .= " var selected = ".($select_type == "select" ? "$(':selected', this).val();" : "this.value;") . "\n"; $html .= " selectOption(".$option['product_option_id'].",selected,'".$select_type."');\n"; $html .= " });\n\n"; echo $html; } ?> $('#product').on('click', '#clear_options', function(e){ e.preventDefault(); clearOptions(); }); selectOption(); <?php } ?> ]]></add> </operation> </file> </modification> 2 Надіслати Поділитися на інших сайтах More sharing options... Kirillove Опубліковано: 4 червня 2017 Автор Share Опубліковано: 4 червня 2017 Kirillove, затираются картинки товаров если не ставлю галочки "выгружать картинки" в 1с, это недочет моей версии 1.6.3.6 или так задумано? В последней версии модуля это исправлено? если да, то какие примерно строки нужно заменитьИзменил опцию в настройках, теперь и физически на диске картинки проверяет, и не будет даже распаковывать если обмен картинками отключен.Отправлено с моего Power Five Evo через Tapatalk 2 Надіслати Поділитися на інших сайтах More sharing options... abadrozadub Опубліковано: 4 червня 2017 Share Опубліковано: 4 червня 2017 13 hours ago, Kirillove said: Для версии 2.3 найдена ошибка при выводе общего остатка по всем складам... Возможно это она вылезла. Уже исправлена 1.6.3.11 Но у меня версия 2.1.0.2 (rs.1) Надіслати Поділитися на інших сайтах More sharing options... abadrozadub Опубліковано: 4 червня 2017 Share Опубліковано: 4 червня 2017 13 hours ago, Kirillove said: После отладки отключите лог... Если включен, то расти он и будет, настройте ротацию. Если лог в режиме отладки, то при большом обмене он может достигать размера несколько гигабайт. Попробую, но опять же, обмен минимальный. А вот собственно ошибка которая заполняет файл error.log 2017-06-03 19:18:13 - PHP Notice: Undefined variable: dir in /admin/model/tool/exchange1c.php on line 3091 2017-06-03 19:18:13 - PHP Warning: readdir() expects parameter 1 to be resource, null given in /admin/model/tool/exchange1c.php on line 3091 Надіслати Поділитися на інших сайтах More sharing options... Kirillove Опубліковано: 4 червня 2017 Автор Share Опубліковано: 4 червня 2017 В 02.06.2017 в 18:57, SusereN сказал: Доброго дня. Обновился на 1.6.3.10, выгрузка не проходит. Гружу вручную, получаю ошибку Откатился на 3.9 - всё успешно Нашел ошибку, перед этой строчкой вставь : для opencart 2.1: $this->load->model('tool/exchange1c'); для opencart 2.3 $this->load->model('extension/exchange1c'); И там далее в этой функции есть такая же строчка, ее удалите 1 Надіслати Поділитися на інших сайтах More sharing options... AAK Опубліковано: 4 червня 2017 Share Опубліковано: 4 червня 2017 Большое спасибо за проделанную работу. Настроил выгрузку из Управление производственным предприятием 1.3 (1.3.89.1). Версия модуля 1.6.3.10. Почему-то не всегда вставляются описания к товарам. Методом проб и ошибок нашел нижеприведенный код. Вывел в лог $this->log($this->ERROR) - пустое значение, но SEO был сгенерирован. В чем ошибка не разобрался, просто закомментировал //if ($this->ERROR) return false; // SEO формируем когда известен product_id и товар записан $update = $this->seoGenerateProduct($data); //if ($this->ERROR) return false; if ($update || $new) { // Обновляем описание товара после генерации SEO $this->setProductDescription($data, $new); } return true; } // setProduct() Еще заметил, если изменить в 1с описание товара и произвести обмен, описание на сайте меняется, но при этом картинка исчезает. Если загрузка полная, все нормально. 1с не выгружает картинку, если она не менялась. Надіслати Поділитися на інших сайтах More sharing options... uvers Опубліковано: 5 червня 2017 Share Опубліковано: 5 червня 2017 (змінено) Всем доброго дня. Автору огромное спасибо за проделанную работу!! Теперь, собственно вопрос: ocStore 2.1.0.2 скачал и поставил opencart2.1-exchange1c_1.6.3.10.ocmod. После установки открыл товары и сразу получил ошибку Undefined index: affiliate_commission in /var/www/admin/www/dev2.ru/vqmod/vqcache/vq2-system_storage_modification_admin_controller_catalog_product.php on line 486 Почистил кэш vqmod/vqcache. Не помогло Пожалуйста, подскажите, в чем может быть проблема? Змінено 5 червня 2017 користувачем uvers Надіслати Поділитися на інших сайтах More sharing options... Blade Опубліковано: 5 червня 2017 Share Опубліковано: 5 червня 2017 (змінено) Виталий, добрый день, нужна помощь что эначит эта ошибка ? версия последняя 1.6.3.10 1С Управление нашей фирмой, редакция 1.6 (1.6.10.43) 2017-06-05 15:43:42 - 3.830 Mb | 7121 | >>>>>>>>>>>>>>>>>>>> НАЧАЛО ЗАГРУЗКИ ДАННЫХ <<<<<<<<<<<<<<<<<<<< 2017-06-05 15:43:42 - PHP Unknown: Object of class LibXMLError could not be converted to string in /var/www/*******/data/www/**********.ru/admin/model/tool/exchange1c.php on line 7137 2017-06-05 15:43:42 - 3.832 Mb | 7138 | Ошибка при загрузке файла: /var/www/*******/data/www/***********.ru/system/storage/cache/exchange1c/import.xml 2017-06-05 15:43:42 - 3.832 Mb | 0036 | Файл не является стандартом XML, подробности в журнале 2017-06-05 15:43:42 - modeImport(): Ошибка загрузки файла: /var/www/form/data/www/test.form-m.ru/system/storage/cache/exchange1c/import.xml Змінено 5 червня 2017 користувачем Blade 1 Надіслати Поділитися на інших сайтах More sharing options... rutskoifp Опубліковано: 5 червня 2017 Share Опубліковано: 5 червня 2017 Здравствуйте! Очень нужна помощь! При установке модуля 1.6.3.10 выдает ошибку! Модуль был установлен, но после обновления все пошло наперекосяк, решил снести и установить снова, результат плачевный.... теперь вообще не могу установить модуль! Движок 2.3 вот лог сайта [Mon Jun 05 19:43:14.234928 2017] [:error] [pid 8896] [client 78.29.9.4:34940] PHP Fatal error: Uncaught exception 'Exception' with message 'Error: Duplicate column name 'product_feature_id'<br />Error No: 1060<br />ALTER TABLE `oc_cart` ADD `product_feature_id` INT( 11 ) NOT NULL DEFAULT 0 AFTER `option`' in /home/c/xxx/public_html/system/library/db/mysqli.php:40\nStack trace:\n#0 /home/xxx/xxx/public_html/system/library/db.php(16): DB\\MySQLi->query('ALTER TABLE `o...', Array)\n#1 /home/c/xxx/public_html/admin/controller/extension/module/exchange1c.php(812): DB->query('ALTER TABLE `o...')\n#2 [internal function]: ControllerExtensionModuleExchange1c->install(Array)\n#3 /home/c/xxx/public_html/vqmod/vqcache/vq2-system_storage_modification_system_engine_action.php(51): call_user_func_array(Array, Array)\n#4 /home/c/xxx/public_html/vqmod/vqcache/vq2-system_storage_modification_system_engine_loader.php(24): Action->execute(Object(Registry), Array)\n#5 /home/c/xxx/public_html/admin/contro in /home/c/xxx/public_html/system/library/db/mysqli.php on line 40, referer: http://xxx/admin/index.php?route=extension/extension&token=3bmKhu87YSMU5NFbaAY2ceApVUb7Wo1j Помогите кто знает как решить, буду очень признателен! Надіслати Поділитися на інших сайтах More sharing options... rutskoifp Опубліковано: 5 червня 2017 Share Опубліковано: 5 червня 2017 (змінено) 1 час назад, rutskoifp сказал: Здравствуйте! Очень нужна помощь! При установке модуля 1.6.3.10 выдает ошибку! Модуль был установлен, но после обновления все пошло наперекосяк, решил снести и установить снова, результат плачевный.... теперь вообще не могу установить модуль! Движок 2.3 вот лог сайта [Mon Jun 05 19:43:14.234928 2017] [:error] [pid 8896] [client 78.29.9.4:34940] PHP Fatal error: Uncaught exception 'Exception' with message 'Error: Duplicate column name 'product_feature_id'<br />Error No: 1060<br />ALTER TABLE `oc_cart` ADD `product_feature_id` INT( 11 ) NOT NULL DEFAULT 0 AFTER `option`' in /home/c/xxx/public_html/system/library/db/mysqli.php:40\nStack trace:\n#0 /home/xxx/xxx/public_html/system/library/db.php(16): DB\\MySQLi->query('ALTER TABLE `o...', Array)\n#1 /home/c/xxx/public_html/admin/controller/extension/module/exchange1c.php(812): DB->query('ALTER TABLE `o...')\n#2 [internal function]: ControllerExtensionModuleExchange1c->install(Array)\n#3 /home/c/xxx/public_html/vqmod/vqcache/vq2-system_storage_modification_system_engine_action.php(51): call_user_func_array(Array, Array)\n#4 /home/c/xxx/public_html/vqmod/vqcache/vq2-system_storage_modification_system_engine_loader.php(24): Action->execute(Object(Registry), Array)\n#5 /home/c/xxx/public_html/admin/contro in /home/c/xxx/public_html/system/library/db/mysqli.php on line 40, referer: http://xxx/admin/index.php?route=extension/extension&token=3bmKhu87YSMU5NFbaAY2ceApVUb7Wo1j Помогите кто знает как решить, буду очень признателен! Решено! Удалил все устанавливаемые модулем таблицы, и изменил изменяемые им значение! модуль установился! Пробуем работать дальше...)))) Единственное, модуль не прописался в админке-во вкладке дополнение! Выгрузка идет порядка 20 мин, выкрузилось все кроме товаров! (УНФ 1.6.10.44) Для справки товаров около 1000 Змінено 5 червня 2017 користувачем rutskoifp Надіслати Поділитися на інших сайтах More sharing options... Furious Опубліковано: 5 червня 2017 Share Опубліковано: 5 червня 2017 Доброго времени суток. А когда планируете 1.6.3.11? установил 1.6.3.10. обновил на модификатор 1.6.3.11 вами выложенный (не знаю можно ли так ) Ошибка та же: 2017-06-05 22:24:30 - PHP Warning: opendir(/home/***/test/image/cache/import_files/23): failed to open dir: No such file or directory in /home/***/test/admin/model/extension/exchange1c.php on line 3091 2017-06-05 22:24:30 - PHP Warning: readdir() expects parameter 1 to be resource, boolean given in /home/***/test/admin/model/extension/exchange1c.php on line 3092 2017-06-05 22:24:30 - PHP Warning: readdir() expects parameter 1 to be resource, boolean given in /home/***/test/admin/model/extension/exchange1c.php on line 3092 2017-06-05 22:24:30 - PHP Warning: readdir() expects parameter 1 to be resource, boolean given in /home/***/test/admin/model/extension/exchange1c.php on line 3092 2017-06-05 22:24:30 - PHP Warning: readdir() expects parameter 1 to be resource, boolean given in /home/***/test/admin/model/extension/exchange1c.php on line 3092 2017-06-05 22:24:30 - PHP Warning: readdir() expects parameter 1 to be resource, boolean given in 1с УТ3.1 Украина OcStore ocStore 2.3.0.2.2 Шаблон Демо Стабильно работает 1.6.3.9 но без присвоения атрибутов Надіслати Поділитися на інших сайтах More sharing options... Kirillove Опубліковано: 6 червня 2017 Автор Share Опубліковано: 6 червня 2017 Решено! Удалил все устанавливаемые модулем таблицы, и изменил изменяемые им значение! модуль установился! Пробуем работать дальше...)))) Единственное, модуль не прописался в админке-во вкладке дополнение! Выгрузка идет порядка 20 мин, выкрузилось все кроме товаров! (УНФ 1.6.10.44) Для справки товаров около 1000Многовато для 1000 товаров, на моем сервере вроде было не дольше 5 мин, сегодня вечером уже точно выложу 1.6.3.11 и проверим ещё раз вместе. А лог есть? Очень интересно посмотреть что он там долго делает.Отправлено с моего Power Five Evo через Tapatalk Надіслати Поділитися на інших сайтах More sharing options... Kirillove Опубліковано: 6 червня 2017 Автор Share Опубліковано: 6 червня 2017 Доброго времени суток. А когда планируете 1.6.3.11? установил 1.6.3.10. обновил на модификатор 1.6.3.11 вами выложенный (не знаю можно ли так [emoji4] ) Ошибка та же:2017-06-05 22:24:30 - PHP Warning: opendir(/home/***/test/image/cache/import_files/23): failed to open dir: No such file or directory in /home/***/test/admin/model/extension/exchange1c.php on line 30912017-06-05 22:24:30 - PHP Warning: readdir() expects parameter 1 to be resource, boolean given in /home/***/test/admin/model/extension/exchange1c.php on line 30922017-06-05 22:24:30 - PHP Warning: readdir() expects parameter 1 to be resource, boolean given in /home/***/test/admin/model/extension/exchange1c.php on line 30922017-06-05 22:24:30 - PHP Warning: readdir() expects parameter 1 to be resource, boolean given in /home/***/test/admin/model/extension/exchange1c.php on line 30922017-06-05 22:24:30 - PHP Warning: readdir() expects parameter 1 to be resource, boolean given in /home/***/test/admin/model/extension/exchange1c.php on line 30922017-06-05 22:24:30 - PHP Warning: readdir() expects parameter 1 to be resource, boolean given in 1с УТ3.1 Украина OcStore ocStore 2.3.0.2.2 Шаблон ДемоСтабильно работает 1.6.3.9 но без присвоения атрибутовЭта проблема не в модификаторе, там рядом я функцию выложил заменой которой решит эту проблему сегодня уже точно выложу Навь версию, пришлось тщательно тестироватьОтправлено с моего Power Five Evo через Tapatalk 1 Надіслати Поділитися на інших сайтах More sharing options... 3 р dinox changed the title to Модуль обмена для opencart v2.3 с учетной системой по стандарту CommerceML [Поддержка] Назад 25 26 27 28 29 30 31 32 33 34 35 Вперед Сторінка 30 з 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 080 переглядів Sha 17 листопада 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 427 переглядів 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 061 перегляд 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 832 перегляди 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 Опубліковано: 3 червня 2017 Автор Share Опубліковано: 3 червня 2017 /** * ver 3 * update 2017-06-04 * Удаляет в кэше эту картинку */ private function deleteCacheImage($image_info) { if (!$image_info) { // Нечего удалять return false; } // Путь в папке кэш к картинке $path = str_replace(DIR_IMAGE, DIR_IMAGE . "cache/" , $image_info['dirname']); // Откроем папку для чтения $delete_files = array(); $dh = @opendir($path); // Если каталог не открывается if (!$dh) { $this->log("Каталог не существует: " . $path); return false; } while(($file = readdir($dh)) !== false) { $find = strstr($file, $image_info['filename']); if ($find != "") { $delete_files[] = $find; } } closedir($dh); if ($delete_files) { foreach ($delete_files as $filename) { unlink($path . "/" . $filename); $this->log("Удалена картинка из кэша: " . $filename); } } return true; } // deleteCacheImage() 1 Надіслати Поділитися на інших сайтах More sharing options... Kirillove Опубліковано: 3 червня 2017 Автор Share Опубліковано: 3 червня 2017 Обновленный модификатор для opencart 2.3 для модуля версий 1.6.3 Скрытый текст <modification> <name>Exchange Module for OpenCart 2.3</name> <version>1.6.3.11_oc2.3</version> <id>OpenCart Exchange</id> <author>KirilLoveVE</author> <link>https://github.com/KirilLoveVE/opencart2-exchange1c</link> <code>exchange1c</code> <file path="admin/controller/common/menu.php"> <operation> <search><![CDATA[$data['text_option'] = $this->language->get('text_option');]]></search> <add position="after"><![CDATA[$data['text_warehouse'] = $this->language->get('text_warehouse');]]></add> </operation> <operation> <search><![CDATA[$data['module'] = $this->url->link('extension/module', 'token=' . $this->session->data['token'], 'SSL');]]></search> <add position="after"><![CDATA[$data['exchange1c'] = $this->url->link('module/exchange1c', 'token=' . $this->session->data['token'], 'SSL');]]></add> </operation> <operation> <search><![CDATA[$data['option'] = $this->url->link('catalog/option', 'token=' . $this->session->data['token'], 'SSL');]]></search> <add position="after"><![CDATA[$data['warehouse'] = $this->url->link('catalog/warehouse', 'token=' . $this->session->data['token'], 'SSL');]]></add> </operation> </file> <file path="admin/view/template/common/menu.tpl"> <operation> <search><![CDATA[<li><a href="<?php echo $modification; ?>"><?php echo $text_modification; ?></a></li>]]></search> <add position="after"><![CDATA[ <li><a href="<?php echo $exchange1c; ?>">Exchange 1C 8.x</a></li>]]></add> </operation> <operation> <search><![CDATA[<li><a href="<?php echo $option; ?>"><?php echo $text_option; ?></a></li>]]></search> <add position="after"><![CDATA[ <li><a href="<?php echo $warehouse; ?>"><?php echo $text_warehouse; ?></a></li>]]></add> </operation> </file> <file path="admin/language/russian/common/menu.php"> <operation> <search><![CDATA[$_['text_option'] = 'Опции';]]></search> <add position="after"><![CDATA[$_['text_warehouse'] = 'Склады';]]></add> </operation> </file> <file path="admin/language/english/common/menu.php"> <operation> <search><![CDATA[$_['text_option'] = 'Options';]]></search> <add position="after"><![CDATA[$_['text_warehouse'] = 'Warehouses';]]></add> </operation> </file> <file path="system/library/image.php"> <operation> <search><![CDATA[$mime = $this->info['mime'];]]></search> <add position="replace"><![CDATA[$info = getimagesize($image); $mime = isset($info['mime']) ? $info['mime'] : '';]]></add> </operation> <operation> <search><![CDATA[imagecopy($this->image, $watermark, $watermark_pos_x, $watermark_pos_y, 0, 0, 120, 40);]]></search> <add position="replace"><![CDATA[imagecopy($this->image, $watermark, $watermark_pos_x, $watermark_pos_y, 0, 0, $watermark_width, $watermark_height);]]></add> </operation> </file> <file path="catalog/controller/product/product.php"> <operation> <search><![CDATA[if ($product_info['quantity'] <= 0) {]]></search> <add position="before"><![CDATA[ // +++ TESLA-CHITA $product_id = (int)$this->request->get['product_id']; // Характеристики $product_option_values = array(); $sql = "SELECT `pfv`.`product_feature_id`, `pov`.`product_option_id`, `pfv`.`product_option_value_id` FROM `" . DB_PREFIX . "product_feature_value` `pfv` LEFT JOIN `" . DB_PREFIX . "product_option_value` `pov` ON (`pfv`.`product_option_value_id` = `pov`.`product_option_value_id`) LEFT JOIN `" . DB_PREFIX . "option` `o` ON (`pov`.`option_id` = `o`.`option_id`) WHERE `pfv`.`product_id` = " . $this->request->get['product_id'] . " ORDER BY `o`.`sort_order`"; $query = $this->db->query($sql); $features = $query->rows; foreach ($features as $feature_value) { if (empty($product_option_values[$feature_value['product_option_value_id']])) { $product_option_values[$feature_value['product_option_value_id']] = array(); } foreach ($features as $feature_value1) { if ($feature_value1['product_feature_id'] == $feature_value['product_feature_id'] && $feature_value1['product_option_value_id'] <> $feature_value['product_option_value_id']) { $product_option_values[$feature_value['product_option_value_id']][] = $feature_value1['product_option_value_id']; } } } unset($query); $customer_group_id = $this->customer->isLogged()? $this->customer->getGroupId() : $this->config->get('config_customer_group_id'); $product_features_price = array(); $query = $this->db->query("SELECT `product_feature_id`, `price` FROM `" . DB_PREFIX . "product_price` WHERE `product_id` = " . (int)$this->request->get['product_id'] . " AND `customer_group_id` = " . $customer_group_id); $data['currency_data'] = array( 'symbol' => $this->currency->getSymbolRight($this->session->data['currency']), 'decimal' => $this->currency->getDecimalPlace($this->session->data['currency']), 'value' => $this->currency->getValue($this->session->data['currency']) ); $product_features_price = array(); $product_features_options = array(); $product_features_options_values = array(); foreach ($query->rows as $query_price) { $product_features_price[$query_price['product_feature_id']] = array( 'value' => $query_price['price'] * $data['currency_data']['value'], 'tax' => $this->tax->calculate($query_price['price'], $product_info['tax_class_id'], $this->config->get('config_tax')) * $data['currency_data']['value'] ); foreach ($features as $feature) { if ($feature['product_feature_id'] == $query_price['product_feature_id']) { if (!isset($product_features_options[$feature['product_feature_id']])) { $product_features_options[$feature['product_feature_id']] = array(); } $product_features_options[$feature['product_feature_id']][$feature['product_option_id']] = $feature['product_option_value_id']; $product_features_options_values[$feature['product_option_value_id']] = $feature['product_feature_id']; } } } $data['product_features_price'] = $product_features_price; $data['product_features_options'] = $product_features_options; $data['product_features_options_values'] = $product_features_options_values; // Остатки в базовой единице $product_quantity = array(); $product_units = array(); $quantity_total = 0; if ($this->config->get('config_stock_display') && !empty($product_features_options)) { $query = $this->db->query("SELECT * FROM `" . DB_PREFIX . "product_quantity` WHERE `product_id` = " . (int)$this->request->get['product_id']); foreach ($query->rows as $query_quantity) { if (!isset($product_quantity[$query_quantity['product_feature_id']])) { $product_quantity[$query_quantity['product_feature_id']] = array(); } $quantity = &$product_quantity[$query_quantity['product_feature_id']]; if (!isset($quantity[$query_quantity['warehouse_id']])) { $quantity[$query_quantity['warehouse_id']] = $query_quantity['quantity']; $quantity_total += $query_quantity['quantity']; } $query = $this->db->query("SELECT `u`.`name`, `u`.`rus_name1`, `pu`.`ratio`, `pu`.`product_feature_id`, `u`.`unit_id` FROM `" . DB_PREFIX . "product_unit` `pu` LEFT JOIN `" . DB_PREFIX . "unit` `u` ON (`pu`.`unit_id` = `u`.`unit_id`) WHERE `pu`.`product_id` = " . $product_id); if ($query->num_rows) { foreach ($query->rows as $row) { if (isset($product_units[$row['unit_id']])) continue; $product_units[$row['unit_id']] = array( 'rus_name' => $row['rus_name1'], 'name' => $row['name'], 'ratio' => $row['ratio'], 'product_feature_id' => $row['product_feature_id'] ); } } } } $product_quantity[0] = $quantity_total; $data['product_quantity'] = $product_quantity; $data['product_units'] = $product_units; // Список складов $sql = "SELECT * FROM `" . DB_PREFIX . "warehouse`"; $query = $this->db->query($sql); $data['warehouses'] = array(); foreach ($query->rows as $query_warehouse) { $data['warehouses'][$query_warehouse['warehouse_id']] = $query_warehouse['name']; } // --- TESLA-CHITA ]]></add> </operation> <operation> <search><![CDATA[$product_option_value_data[] = array(]]></search> <add position="before"><![CDATA[ // +++ TESLA-CHITA $class = ""; foreach ($product_option_values[$option_value['product_option_value_id']] as $value) { if (empty($class)) { $class = $value; } else { $class .= " " . $value; } } // --- TESLA-CHITA ]]></add> </operation> <operation> <search><![CDATA['product_option_value_id' => $option_value['product_option_value_id'],]]></search> <add position="after"><![CDATA[ // +++ TESLA-CHITA 'price_prefix' => $option_value['price_prefix'], 'class' => $class, // --- TESLA-CHITA]]></add> </operation> </file> <file path="catalog/model/catalog/product.php"> <operation> <search><![CDATA[public function getTotalProductSpecials() {]]></search> <add position="before"><![CDATA[ // +++ TESLA-CHITA public function getProductFeaturesPrice($product_id, $product_feature_id, $customer_group_id=0, $unit_id=0) { $str_customer_group_id = $customer_group_id ? " AND customer_group_id = " . $customer_group_id : ""; $str_unit_id = $unit_id? " AND unit_id = " . $unit_id : ""; $sql = "SELECT price FROM " . DB_PREFIX . "product_price WHERE product_id = " . $product_id . " AND product_feature_id = " . $product_feature_id . $str_customer_group_id . $str_unit_id; $this->log->write($sql); $query = $this->db->query($sql); if ($query->num_rows) { return $query->rows; } else { return 0; } } // --- TESLA-CHITA ]]></add> </operation> </file> <file path="admin/model/sale/order.php"> <operation> <search><![CDATA['order_id' => $order_query->row['order_id'],]]></search> <add position="after"><![CDATA[ // +++ TESLA-CHITA 'payment_inn' => isset($order_query->row['payment_inn']) ? $order_query->row['payment_inn'] : "", 'shipping_kpp' => isset($order_query->row['shipping_inn']) ? $order_query->row['shipping_inn'] : "", 'patronymic' => isset($order_query->row['patronymic']) ? $order_query->row['patronymic'] : "", 'payment_patronymic' => isset($order_query->row['payment_patronymic']) ? $order_query->row['payment_patronymic'] : "", 'shipping_patronymic' => isset($order_query->row['shipping_patronymic']) ? $order_query->row['shipping_patronymic'] : "", // --- TESLA-CHITA]]></add> </operation> </file> <file path="system/library/cart.php"> <operation> <search><![CDATA[$price = $product_query->row['price'];]]></search> <add position="replace"><![CDATA[// +++ TESLA-CHITA //-$price = $product_query->row['price']; $cart_option = json_decode($cart['option']); $product_feature_id = $this->getProductFeatureId($cart_option); if ($product_feature_id) { $customer_group_id = $this->customer->isLogged()? $this->customer->getGroupId() : $this->config->get('config_customer_group_id'); $price = $this->getProductFeaturesPrice($cart['product_id'], $product_feature_id, $customer_group_id); } else { $price = $product_query->row['price']; } // --- TESLA-CHITA]]></add> </operation> <operation> <search><![CDATA[ public function getProducts() {]]></search> <add position="before"><![CDATA[ // +++ TESLA-CHITA private function getProductFeaturesPrice($product_id, $product_feature_id, $customer_group_id=0, $unit_id=0) { $str_customer_group_id = $customer_group_id ? " AND customer_group_id = " . $customer_group_id : ""; $str_unit_id = $unit_id? " AND unit_id = " . $unit_id : ""; $sql = "SELECT price FROM " . DB_PREFIX . "product_price WHERE product_id = " . $product_id . " AND product_feature_id = " . $product_feature_id . $str_customer_group_id . $str_unit_id; $query = $this->db->query($sql); if ($query->num_rows == 1) { return $query->row['price']; } else { return 0; } } private function getProductFeatureId($options) { $where = ""; foreach ($options as $product_option_value_id) { $where .= $where ? ",".$product_option_value_id : $product_option_value_id; } if (!$where) return 0; $sql = "SELECT product_feature_id FROM " . DB_PREFIX . "product_feature_value WHERE product_option_value_id IN (" . $where . ") GROUP BY product_feature_id"; $query = $this->db->query($sql); if ($query->num_rows == 1) { return $query->row['product_feature_id']; } return 0; } // --- TESLA-CHITA ]]></add> </operation> <operation> <search><![CDATA[if ($option_value_query->row['price_prefix'] == '+') {]]></search> <add position="replace"><![CDATA[if ($option_value_query->row['price_prefix'] == 'off+') {]]></add> </operation> <operation> <search><![CDATA[} elseif ($option_value_query->row['price_prefix'] == '-') {]]></search> <add position="replace"><![CDATA[} elseif ($option_value_query->row['price_prefix'] == 'off-') {]]></add> </operation> </file> <file path="catalog/view/theme/*/template/product/product.tpl"> <operation> <search><![CDATA[<li><?php echo $text_stock; ?> <?php echo $stock; ?></li>]]></search> <add position="replace"><![CDATA[<li id="stock"><?php echo $text_stock; ?> <?php echo $stock; ?></li>]]></add> </operation> <operation> <search><![CDATA[<h2><?php echo $price; ?></h2>]]></search> <add position="replace"><![CDATA[<h2 id="price"><?php echo $price; ?></h2>]]></add> </operation> <operation> <search><![CDATA[<li><?php echo $text_tax; ?> <?php echo $tax; ?></li>]]></search> <add position="replace"><![CDATA[<li id="tax"><?php echo $text_tax; ?> <?php echo $tax; ?></li>]]></add> </operation> <operation> <search><![CDATA[<li><?php echo $text_points; ?> <?php echo $points; ?></li>]]></search> <add position="replace"><![CDATA[<li id="points"><?php echo $text_points; ?> <?php echo $points; ?></li>]]></add> </operation> <operation> <search><![CDATA[<option value="<?php echo $option_value['product_option_value_id']; ?>">]]></search> <add position="replace"><![CDATA[<option class="<?php echo $option_value['class']; ?>" value="<?php echo $option_value['product_option_value_id']; ?>">]]></add> </operation> <operation> <search><![CDATA[<input type="radio" name="option[<?php echo $option['product_option_id']; ?>]"]]></search> <add position="replace"><![CDATA[<input class="<?php echo $option_value['class']; ?>" type="radio" name="option[<?php echo $option['product_option_id']; ?>]"]]></add> </operation> <operation> <search><![CDATA[<input type="checkbox" name="option[<?php echo $option['product_option_id']; ?>][]"]]></search> <add position="replace"><![CDATA[<input class="<?php echo $option_value['class']; ?>" type="checkbox" name="option[<?php echo $option['product_option_id']; ?>]"]]></add> </operation> <operation> <search><![CDATA[<input type="hidden" name="product_id" value="<?php echo $product_id; ?>" />]]></search> <add position="after"><![CDATA[ <input type="hidden" name="product_feature_id" value="0" /> <input type="hidden" name="unit_id" value="0" /> ]]></add> </operation> <operation> <search><![CDATA[$(document).ready(function() {]]></search> <add position="before"><![CDATA[var text_stock = "<?php echo $text_stock; ?>"; var text_tax = "<?php echo $text_tax; ?>"; <?php if (isset($warehouses)) { echo "var \$warehouses = {"; foreach ($warehouses as $warehouse_id => $name) { echo "'" . $warehouse_id . "':'" . $name . "',"; } echo "}\n"; } ?> <?php if ($options) {?> //------------------------------------------------------------------------------------------------------------------------------ // Определение переменных для характеристик var $options_type = {<?php foreach ($options as $option) { echo $option['product_option_id'].":'".$option['type']."',"; }?>}; var options_order = [<?php foreach ($options as $option) { echo $option['product_option_id'].","; }?>]; var $options_required = {<?php foreach ($options as $option) { echo $option['product_option_id'].":true,"; }?>}; var $options = {<?php foreach ($product_features_options as $product_feature_id => $feature) { $str_value = $product_feature_id.":{"; foreach ($feature as $product_option_id => $product_option_value_id) { $str_value .= $product_option_id.":".$product_option_value_id.","; } $str_value .= "},"; echo $str_value; } echo "};\n";?> // Тут хранится id выбранной характеристики var product_feature_id = 0; var unit_id = 0; <?php $str_features = "var \$features = {"; $str_price = "var \$price = {"; $str_quantity = "// quantity{product_feature_id:{warehouse_id:{unit_id:quantity}}}\n"; $quantity_total = 0; $str_quantity .= "var \$quantity = {"; foreach ($product_features_options as $product_feature_id => $feature_option) { // Цены $str_price .= "'" . $product_feature_id . "':{'value':" . $product_features_price[$product_feature_id]['value'] . ",'tax':" . $product_features_price[$product_feature_id]['tax'] . "},"; // Характеристики $str_features .= "'" . implode("_", $feature_option) . "':" . $product_feature_id . ","; // Остатки $quantity_array = isset($product_quantity[$product_feature_id]) ? $product_quantity[$product_feature_id] : array(); $str_quantity .= "'" . $product_feature_id . "':"; $str_quantity .= "{"; foreach ($quantity_array as $warehouse_id => $quantity) { $str_quantity .= "'" . $warehouse_id . "':" . $quantity . ","; $quantity_total += $quantity; } $str_quantity .= "},"; } echo $str_features . "};\n"; echo $str_price . "};\n"; echo $str_quantity . "};\n"; echo "var quantity_total = " . $quantity_total . ";\n"; echo "var \$product_units = {"; $num = 1; foreach ($product_units as $unit_id => $unit) { if ($unit['ratio'] == 1) { echo "0:{'unit_id':'" . $unit_id . "','name':'" . $unit['rus_name'] . "','ratio':".$unit['ratio']."},"; } else { echo $num . ":{'unit_id':'" . $unit_id . "','name':'" . $unit['rus_name'] . "','ratio':".$unit['ratio']."},"; $num++; } } echo "};\n"; echo "var \$currency_data = {'symbol':'".$currency_data['symbol']."','decimal':".$currency_data['decimal']."};\n"; ?> //------------------------------------------------------------------------------------------------------------------------------ // Функция отображает остатки по складам // Возвращает строковую переменную в которой перечислены названия всех складов с остатками и единицами измерений function displayQuantity() { if ($.type($quantity[product_feature_id]) == "string") { // Если переменная строка, то есть нет складов, возвращается только количество return $quantity[product_feature_id]; } else { var str = ""; var quantity_warehouse = 0; var str_war = ""; // Базовая единица if ($product_units[0]['name']) { str_unit = " ("+$product_units[0]['name']+")"; } else { str_unit = ""; } // Перебираем все остатки по складам $.each($quantity[product_feature_id],function(warehouse_id, product_quantity) { // Нет складов, если warehouse_id = 0 if (warehouse_id == "0") { // Перебираем все единицы измерений $.each(product_quantity,function(unit_id, quantity) { //str += quantity+" ("+$product_units[unit_id]+"),"; str += "\n" + quantity; }); } // Остатки в выбранной единице else if (unit_id != 0) { // Название склада str_war = " Склад: "+$warehouses[warehouse_id]+": "; } else { if (product_quantity > 0) { quantity_warehouse++; str_war += " "+$warehouses[warehouse_id]+" = "+product_quantity+str_unit; } } }); if (quantity_warehouse > 0) { str = " "+quantity_total+str_unit+" в "+quantity_warehouse+" магазинах: ("+str_war+")"; } else if (quantity_total > 0) { str = " "+quantity_total+str_unit+" по опциям: " + $quantity[product_feature_id][0]; } else { str = " нет в наличии"; } return str; } } // displayQuantity() //------------------------------------------------------------------------------------------------------------------------------ // Функция отображает на странице цену, налоги, остатки, // а также, для передачи в корзину, устанавливает значение product_feature_id function displaySelect() { if (product_feature_id){ $('#price').text(Math.round($price[product_feature_id]['value']).toFixed($currency_data['decimal'])+$currency_data['symbol']); $('#tax').text(text_tax+" "+Math.round($price[product_feature_id]['tax']).toFixed($currency_data['decimal'])+$currency_data['symbol']); $('#stock').text(text_stock+" "+displayQuantity()); $('input[name=\'product_feature_id\']').val(product_feature_id); //$('input[name=\'unit_id\']').val($product_units[unit_id]); } else { $('#price').text(""); $('#tax').text(""); $('#stock').text(text_stock+" "+quantity_total+" ("+$product_units[0]['name']+")"); $('input[name=\'product_feature_id\']').val(0); //$('input[name=\'unit_id\']').val(0); } } // displaySelect() //------------------------------------------------------------------------------------------------------------------------------ // Функция очищает все опции и разблокирует их, сбрасывает ид характеристики, а также обновляет надписи на страничке function clearOptions() { // Перебираем все опции $.each($options_type,function(product_option_id, value) { if (value == "select") { // Делаем доступным опцию $('select[name="option['+product_option_id+']"]').attr("disabled",false); // Сбрасываем выбор, по-умолчанию будет выбран первый элемент $('select[name="option['+product_option_id+']"]').val(''); // Делаем доступным все значения опции $('select[name="option['+product_option_id+']"] option').each(function(){ $(this).removeAttr("disabled"); }); } else { // Делаем доступным опцию $('input[name="option['+product_option_id+']"]').attr("disabled",false); // Снимаем выбор со всех значений $('input[name="option['+product_option_id+']"]').attr('checked', false); } $options_required[product_option_id] = true; }); // Проверка на обязательные опции checkRequired(); // Сбрасываем выбранную характеристику product_feature_id = 0; // Обновляем надписи на страничке displaySelect(); } // clearOptions() //------------------------------------------------------------------------------------------------------------------------------ // Функция проверяет и устанавливает какие опции обязательные, бывает что некоторые характеристики имеют разное количество опций function checkRequired() { // Перебираем все опции $.each($options_required,function(product_option_id, required) { if ($options_type[product_option_id] == "select") { // Получаем элемент в котором устанавливается класс обязательной опции $form = $('select[name="option['+product_option_id+']"]').parents("div.form-group"); // Если опция должна быть обязательной, а она не содержит класс "required", устанавливает этот класс или наоборот убираем его if (required && !$form.hasClass("required")) { $form.addClass("required"); } else if (!required && $form.hasClass("required")) { $form.removeClass("required"); } } else { // Получаем элемент в котором устанавливается класс обязательной опции $form = $('input[name="option['+product_option_id+']"]').parents("div.form-group"); // Если опция должна быть обязательной, а она не содержит класс "required", устанавливает этот класс или наоборот убираем его if (required && !$form.hasClass("required")) { $form.addClass("required"); } else if (!required && $form.hasClass("required")) { $form.removeClass("required"); } } }); } // checkRequired() //------------------------------------------------------------------------------------------------------------------------------ // Функция возвращает выбранные опции значений в виде объекта // Возвращает $option_values - объект с опция и значениями function getOptionValues() { var $option_values = {}; // Перебираем опции в том порядке в каком они заданы на сайте $.each(options_order,function(index, product_option_id) { if ($options_type[product_option_id] == 'select') { // Если опция типа select $option_values[product_option_id] = $('select[name="option['+product_option_id+']"] :selected').val(); } else { // Если опция типа input $option_values[product_option_id] = $('input[name="option['+product_option_id+']"]:checked').val(); } }); return $option_values; } // getOptionValues() //------------------------------------------------------------------------------------------------------------------------------ // Функция по выбранным опциям возвращает product_feature_id // $option_values - объект с опциями и значений // Возвращает ид характеристики, если вариант выбранныхопций не существует ни в одной характеристики, то вернет 0 function getProductFeature($option_values) { var new_product_feature_id = 0; $.each($options,function(feature_id, $product_options) { // Количество совпадений var matches = 0; // Перебираем все опции характеристики $.each($product_options,function(product_option_id, product_option_value_id) { // Ищем совпадение значений if ($option_values[product_option_id] == product_option_value_id) { matches ++; } }); // Если совпали все опции if (matches == options_order.length) { // Сохраним значение характеристики где совпали все опции new_product_feature_id = feature_id; // Прервем цикл return false; } }); return new_product_feature_id; } // getProductFeature() //------------------------------------------------------------------------------------------------------------------------------ // Функция устанавливает доступность опции типа input и ее значения // current_product_option_value_id - текущее выбранное значение опции // current_option_id - текущая опция в которой выбрано значение // $option_values - объект в котором заданы все значения опций текущей характеристики // Возвращает значение текущей опции function setAccessInputOption(current_option_id, current_product_option_value_id, $option_values) { var val = 0; var required = false; // Перебираем все значения опций $('div#input-option'+current_option_id+' div label input').each(function(index){ // Если в классе не содержится значение выбранной опции, то отключаем эту опцию и снимаем флажок if (!$(this).hasClass(current_product_option_value_id) && (current_product_option_value_id)) { $(this).attr("disabled",true); $(this).prop("checked",false); } else { required = true; // Включаем,если была отключена ранее $(this).attr("disabled",false); // Если есть в варианте текущее значение опции if ($option_values[current_option_id] == $(this).val()) { // И еще не выбрано значение if (!val) { val = $(this).val(); $(this).prop("checked",true); } else { // Если значение уже было установлено, то с других опций снимаем выбор $(this).prop("checked",false); } } else { // Если вариант не содержит значение, снимаем выбор $(this).prop("checked",false); //$(this).attr("disabled",true); } } }); $options_required[current_option_id] = required; return val; } // setAccessSelectOption() //------------------------------------------------------------------------------------------------------------------------------ // Функция устанавливает доступность опции типа select и ее значения // current_product_option_value_id - текущее выбранное значение опции // current_option_id - текущая опция в которой выбрано значение // $option_values - объект в котором заданы все значения опций текущей характеристики // Возвращает значение текущей опции function setAccessSelectOption(current_option_id, current_product_option_value_id, $option_values) { var val = 0; var required = false; // Перебираем все значения опций $('select#input-option'+current_option_id+' option').each(function(index){ // Если в классе не содержится значение выбранной опции, // и есть само значение и не первое, тогда отключаем эту опцию и снимаем флажок if (!$(this).hasClass(current_product_option_value_id) && (current_product_option_value_id) && index > 0) { $(this).attr("disabled",true); $(this).prop("selected",false); } else { required = true; // Значение содержится в классе, значит разблокируем если был заблокирован $(this).attr("disabled",false); // Если не было ранее выбрано значение, и не первое, // и в варианте для этой опции есть текущее значение if (!val && index > 0 && $option_values[current_option_id] == $(this).val()) { // Записываем выбранное значение val = $(this).val(); // Выбираем его в селекте $(this).prop("selected",true); } } }); $options_required[current_option_id] = required; return val; } // setAccessSelectOption() //------------------------------------------------------------------------------------------------------------------------------ // Функция устанавливает доступность опций и их значений // current_product_option_value_id - текущее выбранное значение опции // current_option_id - текущая опция в которой выбрано значение // $option_values - объект в котором заданы все значения опций текущей характеристики // Возвращает объект $option_values, теоретически он не меняется, оставлено временно для тестирования function setAccessOptions(current_product_option_value_id, current_option_id, $option_values) { // Выберем опции по варианту $.each(options_order,function(index, product_option_id) { if (current_option_id == product_option_id) { $option_values[product_option_id] = current_product_option_value_id; } else { if ($options_type[product_option_id] == 'select') { // Установим доступность значений в опции типа select //$option_values[product_option_id] = setAccessSelectOption(product_option_id, current_product_option_value_id, $option_values); setAccessSelectOption(product_option_id, current_product_option_value_id, $option_values); } else { // Установим доступность значений в опции типа input //$option_values[product_option_id] = setAccessInputOption(product_option_id, current_product_option_value_id, $option_values); setAccessInputOption(product_option_id, current_product_option_value_id, $option_values); } } }); return $option_values; } // setAccessOptions() //------------------------------------------------------------------------------------------------------------------------------ // Функция получает первый вариант опция по выбранному значению одной из опций // product_option_value_id - значение выбранной опции // Возвращает объект (index = product_option_id, value = product_option_value_id) function getRightOption(product_option_value_id) { // Тут хранится вариант опций выбранной характеристики var $option_values = {}; // Перебирем все опции $.each($options, function(sel_product_feature_id, $product_options) { // Прервем цикл, если ид характеристики уже определена if (product_feature_id) { return false; } // Перебираем все опции характеристики $.each($product_options, function(option_id, sel_product_option_value_id) { // Если значение неопределено, берем первую попавшуюся характеристику if (product_option_value_id == undefined) { // Запишем id характеристики, чтобы потом передать ее в корзину product_feature_id = sel_product_feature_id; // Получим вариант опций и значений этой характеристики $option_values = $product_options; // Прервем цикл return false; } // Если совпало значение опции в первой попавшейся характеристики, тогда выбираем ее, и получаем остальные значения опций else if (sel_product_option_value_id == product_option_value_id) { // Запишем id характеристики, чтобы потом передать ее в корзину product_feature_id = sel_product_feature_id; // Получим вариант опций и значений этой характеристики $option_values = $product_options; // Прервем цикл return false; } }); }); return $option_values; } // getRightOption() //------------------------------------------------------------------------------------------------------------------------------ // Функция вызывается при изменении любой опции // current_option_id - это номер опции в которой выбрано значение // selected - выбранное значение опции, product_option_value_id // type - тип опции, может иметь значение: select, input, radio, image function selectOption(current_option_id, selected, type) { // Объект опций с выбранными значениями (index = опция, value = значение) var $option_values = {}; // Получим существующие значения опций $option_values = getOptionValues(); // Проверим вариант и получим id характеристики, если вариант неверный, тогда id = 0 product_feature_id = getProductFeature($option_values); // Если опции не соответствуют ни одной характеристики, выставляем другие опции по первому совпадению в первой найденой характеристики if (!product_feature_id) { // Получим вариант опции по выбранному значению одной из опций // option_values это объект index = product_option_id, value = product_option_value_id $option_values = getRightOption(selected); // Устанавливает доступность значений всех опций setAccessOptions(selected, current_option_id, $option_values); } // Проверим опции на обязательные checkRequired(); // Отображает выбранные данные displaySelect(); } <?php } ?> ]]></add> </operation> <operation> <search><![CDATA[$(document).ready(function() {]]></search> <add position="after"><![CDATA[<?php if ($options) {?> // Кнопки очистки опций, под каждый шаблон возможно придется править //$('select[name="option[9]"]').parent('div').before('<div class="form-group"><a href="#" id="clear_options">Очистить опции</a></div>'); $('div#input-option7').parent('div').after('<div class="form-group"><a href="#" id="clear_options">Очистить опции</a></div>'); //$('div#form-group').parent('div').after('<div class="form-group"><a href="#" id="clear_options">Очистить опции</a></div>'); $('#product').find('h3').after('<div class="form-group"><a href="#" id="clear_options">Очистить опции</a></div>'); <?php foreach ($options as $option) { ?> //------------------------------------------------------------------------------------------------------------------------------ // Функция обрабатывает значение при выборе опции <?php $select_type = $option['type'] == "select" ? "select" : "input"; $html = " $('".$select_type."[name=\"option[".$option['product_option_id']."]\"]').change(function(){\n"; $html .= " var selected = ".($select_type == "select" ? "$(':selected', this).val();" : "this.value;") . "\n"; $html .= " selectOption(".$option['product_option_id'].",selected,'".$select_type."');\n"; $html .= " });\n\n"; echo $html; } ?> $('#product').on('click', '#clear_options', function(e){ e.preventDefault(); clearOptions(); }); selectOption(); <?php } ?> ]]></add> </operation> </file> </modification> 2 Надіслати Поділитися на інших сайтах More sharing options... Kirillove Опубліковано: 4 червня 2017 Автор Share Опубліковано: 4 червня 2017 Kirillove, затираются картинки товаров если не ставлю галочки "выгружать картинки" в 1с, это недочет моей версии 1.6.3.6 или так задумано? В последней версии модуля это исправлено? если да, то какие примерно строки нужно заменитьИзменил опцию в настройках, теперь и физически на диске картинки проверяет, и не будет даже распаковывать если обмен картинками отключен.Отправлено с моего Power Five Evo через Tapatalk 2 Надіслати Поділитися на інших сайтах More sharing options... abadrozadub Опубліковано: 4 червня 2017 Share Опубліковано: 4 червня 2017 13 hours ago, Kirillove said: Для версии 2.3 найдена ошибка при выводе общего остатка по всем складам... Возможно это она вылезла. Уже исправлена 1.6.3.11 Но у меня версия 2.1.0.2 (rs.1) Надіслати Поділитися на інших сайтах More sharing options... abadrozadub Опубліковано: 4 червня 2017 Share Опубліковано: 4 червня 2017 13 hours ago, Kirillove said: После отладки отключите лог... Если включен, то расти он и будет, настройте ротацию. Если лог в режиме отладки, то при большом обмене он может достигать размера несколько гигабайт. Попробую, но опять же, обмен минимальный. А вот собственно ошибка которая заполняет файл error.log 2017-06-03 19:18:13 - PHP Notice: Undefined variable: dir in /admin/model/tool/exchange1c.php on line 3091 2017-06-03 19:18:13 - PHP Warning: readdir() expects parameter 1 to be resource, null given in /admin/model/tool/exchange1c.php on line 3091 Надіслати Поділитися на інших сайтах More sharing options... Kirillove Опубліковано: 4 червня 2017 Автор Share Опубліковано: 4 червня 2017 В 02.06.2017 в 18:57, SusereN сказал: Доброго дня. Обновился на 1.6.3.10, выгрузка не проходит. Гружу вручную, получаю ошибку Откатился на 3.9 - всё успешно Нашел ошибку, перед этой строчкой вставь : для opencart 2.1: $this->load->model('tool/exchange1c'); для opencart 2.3 $this->load->model('extension/exchange1c'); И там далее в этой функции есть такая же строчка, ее удалите 1 Надіслати Поділитися на інших сайтах More sharing options... AAK Опубліковано: 4 червня 2017 Share Опубліковано: 4 червня 2017 Большое спасибо за проделанную работу. Настроил выгрузку из Управление производственным предприятием 1.3 (1.3.89.1). Версия модуля 1.6.3.10. Почему-то не всегда вставляются описания к товарам. Методом проб и ошибок нашел нижеприведенный код. Вывел в лог $this->log($this->ERROR) - пустое значение, но SEO был сгенерирован. В чем ошибка не разобрался, просто закомментировал //if ($this->ERROR) return false; // SEO формируем когда известен product_id и товар записан $update = $this->seoGenerateProduct($data); //if ($this->ERROR) return false; if ($update || $new) { // Обновляем описание товара после генерации SEO $this->setProductDescription($data, $new); } return true; } // setProduct() Еще заметил, если изменить в 1с описание товара и произвести обмен, описание на сайте меняется, но при этом картинка исчезает. Если загрузка полная, все нормально. 1с не выгружает картинку, если она не менялась. Надіслати Поділитися на інших сайтах More sharing options... uvers Опубліковано: 5 червня 2017 Share Опубліковано: 5 червня 2017 (змінено) Всем доброго дня. Автору огромное спасибо за проделанную работу!! Теперь, собственно вопрос: ocStore 2.1.0.2 скачал и поставил opencart2.1-exchange1c_1.6.3.10.ocmod. После установки открыл товары и сразу получил ошибку Undefined index: affiliate_commission in /var/www/admin/www/dev2.ru/vqmod/vqcache/vq2-system_storage_modification_admin_controller_catalog_product.php on line 486 Почистил кэш vqmod/vqcache. Не помогло Пожалуйста, подскажите, в чем может быть проблема? Змінено 5 червня 2017 користувачем uvers Надіслати Поділитися на інших сайтах More sharing options... Blade Опубліковано: 5 червня 2017 Share Опубліковано: 5 червня 2017 (змінено) Виталий, добрый день, нужна помощь что эначит эта ошибка ? версия последняя 1.6.3.10 1С Управление нашей фирмой, редакция 1.6 (1.6.10.43) 2017-06-05 15:43:42 - 3.830 Mb | 7121 | >>>>>>>>>>>>>>>>>>>> НАЧАЛО ЗАГРУЗКИ ДАННЫХ <<<<<<<<<<<<<<<<<<<< 2017-06-05 15:43:42 - PHP Unknown: Object of class LibXMLError could not be converted to string in /var/www/*******/data/www/**********.ru/admin/model/tool/exchange1c.php on line 7137 2017-06-05 15:43:42 - 3.832 Mb | 7138 | Ошибка при загрузке файла: /var/www/*******/data/www/***********.ru/system/storage/cache/exchange1c/import.xml 2017-06-05 15:43:42 - 3.832 Mb | 0036 | Файл не является стандартом XML, подробности в журнале 2017-06-05 15:43:42 - modeImport(): Ошибка загрузки файла: /var/www/form/data/www/test.form-m.ru/system/storage/cache/exchange1c/import.xml Змінено 5 червня 2017 користувачем Blade 1 Надіслати Поділитися на інших сайтах More sharing options... rutskoifp Опубліковано: 5 червня 2017 Share Опубліковано: 5 червня 2017 Здравствуйте! Очень нужна помощь! При установке модуля 1.6.3.10 выдает ошибку! Модуль был установлен, но после обновления все пошло наперекосяк, решил снести и установить снова, результат плачевный.... теперь вообще не могу установить модуль! Движок 2.3 вот лог сайта [Mon Jun 05 19:43:14.234928 2017] [:error] [pid 8896] [client 78.29.9.4:34940] PHP Fatal error: Uncaught exception 'Exception' with message 'Error: Duplicate column name 'product_feature_id'<br />Error No: 1060<br />ALTER TABLE `oc_cart` ADD `product_feature_id` INT( 11 ) NOT NULL DEFAULT 0 AFTER `option`' in /home/c/xxx/public_html/system/library/db/mysqli.php:40\nStack trace:\n#0 /home/xxx/xxx/public_html/system/library/db.php(16): DB\\MySQLi->query('ALTER TABLE `o...', Array)\n#1 /home/c/xxx/public_html/admin/controller/extension/module/exchange1c.php(812): DB->query('ALTER TABLE `o...')\n#2 [internal function]: ControllerExtensionModuleExchange1c->install(Array)\n#3 /home/c/xxx/public_html/vqmod/vqcache/vq2-system_storage_modification_system_engine_action.php(51): call_user_func_array(Array, Array)\n#4 /home/c/xxx/public_html/vqmod/vqcache/vq2-system_storage_modification_system_engine_loader.php(24): Action->execute(Object(Registry), Array)\n#5 /home/c/xxx/public_html/admin/contro in /home/c/xxx/public_html/system/library/db/mysqli.php on line 40, referer: http://xxx/admin/index.php?route=extension/extension&token=3bmKhu87YSMU5NFbaAY2ceApVUb7Wo1j Помогите кто знает как решить, буду очень признателен! Надіслати Поділитися на інших сайтах More sharing options... rutskoifp Опубліковано: 5 червня 2017 Share Опубліковано: 5 червня 2017 (змінено) 1 час назад, rutskoifp сказал: Здравствуйте! Очень нужна помощь! При установке модуля 1.6.3.10 выдает ошибку! Модуль был установлен, но после обновления все пошло наперекосяк, решил снести и установить снова, результат плачевный.... теперь вообще не могу установить модуль! Движок 2.3 вот лог сайта [Mon Jun 05 19:43:14.234928 2017] [:error] [pid 8896] [client 78.29.9.4:34940] PHP Fatal error: Uncaught exception 'Exception' with message 'Error: Duplicate column name 'product_feature_id'<br />Error No: 1060<br />ALTER TABLE `oc_cart` ADD `product_feature_id` INT( 11 ) NOT NULL DEFAULT 0 AFTER `option`' in /home/c/xxx/public_html/system/library/db/mysqli.php:40\nStack trace:\n#0 /home/xxx/xxx/public_html/system/library/db.php(16): DB\\MySQLi->query('ALTER TABLE `o...', Array)\n#1 /home/c/xxx/public_html/admin/controller/extension/module/exchange1c.php(812): DB->query('ALTER TABLE `o...')\n#2 [internal function]: ControllerExtensionModuleExchange1c->install(Array)\n#3 /home/c/xxx/public_html/vqmod/vqcache/vq2-system_storage_modification_system_engine_action.php(51): call_user_func_array(Array, Array)\n#4 /home/c/xxx/public_html/vqmod/vqcache/vq2-system_storage_modification_system_engine_loader.php(24): Action->execute(Object(Registry), Array)\n#5 /home/c/xxx/public_html/admin/contro in /home/c/xxx/public_html/system/library/db/mysqli.php on line 40, referer: http://xxx/admin/index.php?route=extension/extension&token=3bmKhu87YSMU5NFbaAY2ceApVUb7Wo1j Помогите кто знает как решить, буду очень признателен! Решено! Удалил все устанавливаемые модулем таблицы, и изменил изменяемые им значение! модуль установился! Пробуем работать дальше...)))) Единственное, модуль не прописался в админке-во вкладке дополнение! Выгрузка идет порядка 20 мин, выкрузилось все кроме товаров! (УНФ 1.6.10.44) Для справки товаров около 1000 Змінено 5 червня 2017 користувачем rutskoifp Надіслати Поділитися на інших сайтах More sharing options... Furious Опубліковано: 5 червня 2017 Share Опубліковано: 5 червня 2017 Доброго времени суток. А когда планируете 1.6.3.11? установил 1.6.3.10. обновил на модификатор 1.6.3.11 вами выложенный (не знаю можно ли так ) Ошибка та же: 2017-06-05 22:24:30 - PHP Warning: opendir(/home/***/test/image/cache/import_files/23): failed to open dir: No such file or directory in /home/***/test/admin/model/extension/exchange1c.php on line 3091 2017-06-05 22:24:30 - PHP Warning: readdir() expects parameter 1 to be resource, boolean given in /home/***/test/admin/model/extension/exchange1c.php on line 3092 2017-06-05 22:24:30 - PHP Warning: readdir() expects parameter 1 to be resource, boolean given in /home/***/test/admin/model/extension/exchange1c.php on line 3092 2017-06-05 22:24:30 - PHP Warning: readdir() expects parameter 1 to be resource, boolean given in /home/***/test/admin/model/extension/exchange1c.php on line 3092 2017-06-05 22:24:30 - PHP Warning: readdir() expects parameter 1 to be resource, boolean given in /home/***/test/admin/model/extension/exchange1c.php on line 3092 2017-06-05 22:24:30 - PHP Warning: readdir() expects parameter 1 to be resource, boolean given in 1с УТ3.1 Украина OcStore ocStore 2.3.0.2.2 Шаблон Демо Стабильно работает 1.6.3.9 но без присвоения атрибутов Надіслати Поділитися на інших сайтах More sharing options... Kirillove Опубліковано: 6 червня 2017 Автор Share Опубліковано: 6 червня 2017 Решено! Удалил все устанавливаемые модулем таблицы, и изменил изменяемые им значение! модуль установился! Пробуем работать дальше...)))) Единственное, модуль не прописался в админке-во вкладке дополнение! Выгрузка идет порядка 20 мин, выкрузилось все кроме товаров! (УНФ 1.6.10.44) Для справки товаров около 1000Многовато для 1000 товаров, на моем сервере вроде было не дольше 5 мин, сегодня вечером уже точно выложу 1.6.3.11 и проверим ещё раз вместе. А лог есть? Очень интересно посмотреть что он там долго делает.Отправлено с моего Power Five Evo через Tapatalk Надіслати Поділитися на інших сайтах More sharing options... Kirillove Опубліковано: 6 червня 2017 Автор Share Опубліковано: 6 червня 2017 Доброго времени суток. А когда планируете 1.6.3.11? установил 1.6.3.10. обновил на модификатор 1.6.3.11 вами выложенный (не знаю можно ли так [emoji4] ) Ошибка та же:2017-06-05 22:24:30 - PHP Warning: opendir(/home/***/test/image/cache/import_files/23): failed to open dir: No such file or directory in /home/***/test/admin/model/extension/exchange1c.php on line 30912017-06-05 22:24:30 - PHP Warning: readdir() expects parameter 1 to be resource, boolean given in /home/***/test/admin/model/extension/exchange1c.php on line 30922017-06-05 22:24:30 - PHP Warning: readdir() expects parameter 1 to be resource, boolean given in /home/***/test/admin/model/extension/exchange1c.php on line 30922017-06-05 22:24:30 - PHP Warning: readdir() expects parameter 1 to be resource, boolean given in /home/***/test/admin/model/extension/exchange1c.php on line 30922017-06-05 22:24:30 - PHP Warning: readdir() expects parameter 1 to be resource, boolean given in /home/***/test/admin/model/extension/exchange1c.php on line 30922017-06-05 22:24:30 - PHP Warning: readdir() expects parameter 1 to be resource, boolean given in 1с УТ3.1 Украина OcStore ocStore 2.3.0.2.2 Шаблон ДемоСтабильно работает 1.6.3.9 но без присвоения атрибутовЭта проблема не в модификаторе, там рядом я функцию выложил заменой которой решит эту проблему сегодня уже точно выложу Навь версию, пришлось тщательно тестироватьОтправлено с моего Power Five Evo через Tapatalk 1 Надіслати Поділитися на інших сайтах More sharing options... 3 р dinox changed the title to Модуль обмена для opencart v2.3 с учетной системой по стандарту CommerceML [Поддержка] Назад 25 26 27 28 29 30 31 32 33 34 35 Вперед Сторінка 30 з 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 080 переглядів Sha 17 листопада 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 427 переглядів 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 061 перегляд 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 832 перегляди 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 Опубліковано: 3 червня 2017 Автор Share Опубліковано: 3 червня 2017 Обновленный модификатор для opencart 2.3 для модуля версий 1.6.3 Скрытый текст <modification> <name>Exchange Module for OpenCart 2.3</name> <version>1.6.3.11_oc2.3</version> <id>OpenCart Exchange</id> <author>KirilLoveVE</author> <link>https://github.com/KirilLoveVE/opencart2-exchange1c</link> <code>exchange1c</code> <file path="admin/controller/common/menu.php"> <operation> <search><![CDATA[$data['text_option'] = $this->language->get('text_option');]]></search> <add position="after"><![CDATA[$data['text_warehouse'] = $this->language->get('text_warehouse');]]></add> </operation> <operation> <search><![CDATA[$data['module'] = $this->url->link('extension/module', 'token=' . $this->session->data['token'], 'SSL');]]></search> <add position="after"><![CDATA[$data['exchange1c'] = $this->url->link('module/exchange1c', 'token=' . $this->session->data['token'], 'SSL');]]></add> </operation> <operation> <search><![CDATA[$data['option'] = $this->url->link('catalog/option', 'token=' . $this->session->data['token'], 'SSL');]]></search> <add position="after"><![CDATA[$data['warehouse'] = $this->url->link('catalog/warehouse', 'token=' . $this->session->data['token'], 'SSL');]]></add> </operation> </file> <file path="admin/view/template/common/menu.tpl"> <operation> <search><![CDATA[<li><a href="<?php echo $modification; ?>"><?php echo $text_modification; ?></a></li>]]></search> <add position="after"><![CDATA[ <li><a href="<?php echo $exchange1c; ?>">Exchange 1C 8.x</a></li>]]></add> </operation> <operation> <search><![CDATA[<li><a href="<?php echo $option; ?>"><?php echo $text_option; ?></a></li>]]></search> <add position="after"><![CDATA[ <li><a href="<?php echo $warehouse; ?>"><?php echo $text_warehouse; ?></a></li>]]></add> </operation> </file> <file path="admin/language/russian/common/menu.php"> <operation> <search><![CDATA[$_['text_option'] = 'Опции';]]></search> <add position="after"><![CDATA[$_['text_warehouse'] = 'Склады';]]></add> </operation> </file> <file path="admin/language/english/common/menu.php"> <operation> <search><![CDATA[$_['text_option'] = 'Options';]]></search> <add position="after"><![CDATA[$_['text_warehouse'] = 'Warehouses';]]></add> </operation> </file> <file path="system/library/image.php"> <operation> <search><![CDATA[$mime = $this->info['mime'];]]></search> <add position="replace"><![CDATA[$info = getimagesize($image); $mime = isset($info['mime']) ? $info['mime'] : '';]]></add> </operation> <operation> <search><![CDATA[imagecopy($this->image, $watermark, $watermark_pos_x, $watermark_pos_y, 0, 0, 120, 40);]]></search> <add position="replace"><![CDATA[imagecopy($this->image, $watermark, $watermark_pos_x, $watermark_pos_y, 0, 0, $watermark_width, $watermark_height);]]></add> </operation> </file> <file path="catalog/controller/product/product.php"> <operation> <search><![CDATA[if ($product_info['quantity'] <= 0) {]]></search> <add position="before"><![CDATA[ // +++ TESLA-CHITA $product_id = (int)$this->request->get['product_id']; // Характеристики $product_option_values = array(); $sql = "SELECT `pfv`.`product_feature_id`, `pov`.`product_option_id`, `pfv`.`product_option_value_id` FROM `" . DB_PREFIX . "product_feature_value` `pfv` LEFT JOIN `" . DB_PREFIX . "product_option_value` `pov` ON (`pfv`.`product_option_value_id` = `pov`.`product_option_value_id`) LEFT JOIN `" . DB_PREFIX . "option` `o` ON (`pov`.`option_id` = `o`.`option_id`) WHERE `pfv`.`product_id` = " . $this->request->get['product_id'] . " ORDER BY `o`.`sort_order`"; $query = $this->db->query($sql); $features = $query->rows; foreach ($features as $feature_value) { if (empty($product_option_values[$feature_value['product_option_value_id']])) { $product_option_values[$feature_value['product_option_value_id']] = array(); } foreach ($features as $feature_value1) { if ($feature_value1['product_feature_id'] == $feature_value['product_feature_id'] && $feature_value1['product_option_value_id'] <> $feature_value['product_option_value_id']) { $product_option_values[$feature_value['product_option_value_id']][] = $feature_value1['product_option_value_id']; } } } unset($query); $customer_group_id = $this->customer->isLogged()? $this->customer->getGroupId() : $this->config->get('config_customer_group_id'); $product_features_price = array(); $query = $this->db->query("SELECT `product_feature_id`, `price` FROM `" . DB_PREFIX . "product_price` WHERE `product_id` = " . (int)$this->request->get['product_id'] . " AND `customer_group_id` = " . $customer_group_id); $data['currency_data'] = array( 'symbol' => $this->currency->getSymbolRight($this->session->data['currency']), 'decimal' => $this->currency->getDecimalPlace($this->session->data['currency']), 'value' => $this->currency->getValue($this->session->data['currency']) ); $product_features_price = array(); $product_features_options = array(); $product_features_options_values = array(); foreach ($query->rows as $query_price) { $product_features_price[$query_price['product_feature_id']] = array( 'value' => $query_price['price'] * $data['currency_data']['value'], 'tax' => $this->tax->calculate($query_price['price'], $product_info['tax_class_id'], $this->config->get('config_tax')) * $data['currency_data']['value'] ); foreach ($features as $feature) { if ($feature['product_feature_id'] == $query_price['product_feature_id']) { if (!isset($product_features_options[$feature['product_feature_id']])) { $product_features_options[$feature['product_feature_id']] = array(); } $product_features_options[$feature['product_feature_id']][$feature['product_option_id']] = $feature['product_option_value_id']; $product_features_options_values[$feature['product_option_value_id']] = $feature['product_feature_id']; } } } $data['product_features_price'] = $product_features_price; $data['product_features_options'] = $product_features_options; $data['product_features_options_values'] = $product_features_options_values; // Остатки в базовой единице $product_quantity = array(); $product_units = array(); $quantity_total = 0; if ($this->config->get('config_stock_display') && !empty($product_features_options)) { $query = $this->db->query("SELECT * FROM `" . DB_PREFIX . "product_quantity` WHERE `product_id` = " . (int)$this->request->get['product_id']); foreach ($query->rows as $query_quantity) { if (!isset($product_quantity[$query_quantity['product_feature_id']])) { $product_quantity[$query_quantity['product_feature_id']] = array(); } $quantity = &$product_quantity[$query_quantity['product_feature_id']]; if (!isset($quantity[$query_quantity['warehouse_id']])) { $quantity[$query_quantity['warehouse_id']] = $query_quantity['quantity']; $quantity_total += $query_quantity['quantity']; } $query = $this->db->query("SELECT `u`.`name`, `u`.`rus_name1`, `pu`.`ratio`, `pu`.`product_feature_id`, `u`.`unit_id` FROM `" . DB_PREFIX . "product_unit` `pu` LEFT JOIN `" . DB_PREFIX . "unit` `u` ON (`pu`.`unit_id` = `u`.`unit_id`) WHERE `pu`.`product_id` = " . $product_id); if ($query->num_rows) { foreach ($query->rows as $row) { if (isset($product_units[$row['unit_id']])) continue; $product_units[$row['unit_id']] = array( 'rus_name' => $row['rus_name1'], 'name' => $row['name'], 'ratio' => $row['ratio'], 'product_feature_id' => $row['product_feature_id'] ); } } } } $product_quantity[0] = $quantity_total; $data['product_quantity'] = $product_quantity; $data['product_units'] = $product_units; // Список складов $sql = "SELECT * FROM `" . DB_PREFIX . "warehouse`"; $query = $this->db->query($sql); $data['warehouses'] = array(); foreach ($query->rows as $query_warehouse) { $data['warehouses'][$query_warehouse['warehouse_id']] = $query_warehouse['name']; } // --- TESLA-CHITA ]]></add> </operation> <operation> <search><![CDATA[$product_option_value_data[] = array(]]></search> <add position="before"><![CDATA[ // +++ TESLA-CHITA $class = ""; foreach ($product_option_values[$option_value['product_option_value_id']] as $value) { if (empty($class)) { $class = $value; } else { $class .= " " . $value; } } // --- TESLA-CHITA ]]></add> </operation> <operation> <search><![CDATA['product_option_value_id' => $option_value['product_option_value_id'],]]></search> <add position="after"><![CDATA[ // +++ TESLA-CHITA 'price_prefix' => $option_value['price_prefix'], 'class' => $class, // --- TESLA-CHITA]]></add> </operation> </file> <file path="catalog/model/catalog/product.php"> <operation> <search><![CDATA[public function getTotalProductSpecials() {]]></search> <add position="before"><![CDATA[ // +++ TESLA-CHITA public function getProductFeaturesPrice($product_id, $product_feature_id, $customer_group_id=0, $unit_id=0) { $str_customer_group_id = $customer_group_id ? " AND customer_group_id = " . $customer_group_id : ""; $str_unit_id = $unit_id? " AND unit_id = " . $unit_id : ""; $sql = "SELECT price FROM " . DB_PREFIX . "product_price WHERE product_id = " . $product_id . " AND product_feature_id = " . $product_feature_id . $str_customer_group_id . $str_unit_id; $this->log->write($sql); $query = $this->db->query($sql); if ($query->num_rows) { return $query->rows; } else { return 0; } } // --- TESLA-CHITA ]]></add> </operation> </file> <file path="admin/model/sale/order.php"> <operation> <search><![CDATA['order_id' => $order_query->row['order_id'],]]></search> <add position="after"><![CDATA[ // +++ TESLA-CHITA 'payment_inn' => isset($order_query->row['payment_inn']) ? $order_query->row['payment_inn'] : "", 'shipping_kpp' => isset($order_query->row['shipping_inn']) ? $order_query->row['shipping_inn'] : "", 'patronymic' => isset($order_query->row['patronymic']) ? $order_query->row['patronymic'] : "", 'payment_patronymic' => isset($order_query->row['payment_patronymic']) ? $order_query->row['payment_patronymic'] : "", 'shipping_patronymic' => isset($order_query->row['shipping_patronymic']) ? $order_query->row['shipping_patronymic'] : "", // --- TESLA-CHITA]]></add> </operation> </file> <file path="system/library/cart.php"> <operation> <search><![CDATA[$price = $product_query->row['price'];]]></search> <add position="replace"><![CDATA[// +++ TESLA-CHITA //-$price = $product_query->row['price']; $cart_option = json_decode($cart['option']); $product_feature_id = $this->getProductFeatureId($cart_option); if ($product_feature_id) { $customer_group_id = $this->customer->isLogged()? $this->customer->getGroupId() : $this->config->get('config_customer_group_id'); $price = $this->getProductFeaturesPrice($cart['product_id'], $product_feature_id, $customer_group_id); } else { $price = $product_query->row['price']; } // --- TESLA-CHITA]]></add> </operation> <operation> <search><![CDATA[ public function getProducts() {]]></search> <add position="before"><![CDATA[ // +++ TESLA-CHITA private function getProductFeaturesPrice($product_id, $product_feature_id, $customer_group_id=0, $unit_id=0) { $str_customer_group_id = $customer_group_id ? " AND customer_group_id = " . $customer_group_id : ""; $str_unit_id = $unit_id? " AND unit_id = " . $unit_id : ""; $sql = "SELECT price FROM " . DB_PREFIX . "product_price WHERE product_id = " . $product_id . " AND product_feature_id = " . $product_feature_id . $str_customer_group_id . $str_unit_id; $query = $this->db->query($sql); if ($query->num_rows == 1) { return $query->row['price']; } else { return 0; } } private function getProductFeatureId($options) { $where = ""; foreach ($options as $product_option_value_id) { $where .= $where ? ",".$product_option_value_id : $product_option_value_id; } if (!$where) return 0; $sql = "SELECT product_feature_id FROM " . DB_PREFIX . "product_feature_value WHERE product_option_value_id IN (" . $where . ") GROUP BY product_feature_id"; $query = $this->db->query($sql); if ($query->num_rows == 1) { return $query->row['product_feature_id']; } return 0; } // --- TESLA-CHITA ]]></add> </operation> <operation> <search><![CDATA[if ($option_value_query->row['price_prefix'] == '+') {]]></search> <add position="replace"><![CDATA[if ($option_value_query->row['price_prefix'] == 'off+') {]]></add> </operation> <operation> <search><![CDATA[} elseif ($option_value_query->row['price_prefix'] == '-') {]]></search> <add position="replace"><![CDATA[} elseif ($option_value_query->row['price_prefix'] == 'off-') {]]></add> </operation> </file> <file path="catalog/view/theme/*/template/product/product.tpl"> <operation> <search><![CDATA[<li><?php echo $text_stock; ?> <?php echo $stock; ?></li>]]></search> <add position="replace"><![CDATA[<li id="stock"><?php echo $text_stock; ?> <?php echo $stock; ?></li>]]></add> </operation> <operation> <search><![CDATA[<h2><?php echo $price; ?></h2>]]></search> <add position="replace"><![CDATA[<h2 id="price"><?php echo $price; ?></h2>]]></add> </operation> <operation> <search><![CDATA[<li><?php echo $text_tax; ?> <?php echo $tax; ?></li>]]></search> <add position="replace"><![CDATA[<li id="tax"><?php echo $text_tax; ?> <?php echo $tax; ?></li>]]></add> </operation> <operation> <search><![CDATA[<li><?php echo $text_points; ?> <?php echo $points; ?></li>]]></search> <add position="replace"><![CDATA[<li id="points"><?php echo $text_points; ?> <?php echo $points; ?></li>]]></add> </operation> <operation> <search><![CDATA[<option value="<?php echo $option_value['product_option_value_id']; ?>">]]></search> <add position="replace"><![CDATA[<option class="<?php echo $option_value['class']; ?>" value="<?php echo $option_value['product_option_value_id']; ?>">]]></add> </operation> <operation> <search><![CDATA[<input type="radio" name="option[<?php echo $option['product_option_id']; ?>]"]]></search> <add position="replace"><![CDATA[<input class="<?php echo $option_value['class']; ?>" type="radio" name="option[<?php echo $option['product_option_id']; ?>]"]]></add> </operation> <operation> <search><![CDATA[<input type="checkbox" name="option[<?php echo $option['product_option_id']; ?>][]"]]></search> <add position="replace"><![CDATA[<input class="<?php echo $option_value['class']; ?>" type="checkbox" name="option[<?php echo $option['product_option_id']; ?>]"]]></add> </operation> <operation> <search><![CDATA[<input type="hidden" name="product_id" value="<?php echo $product_id; ?>" />]]></search> <add position="after"><![CDATA[ <input type="hidden" name="product_feature_id" value="0" /> <input type="hidden" name="unit_id" value="0" /> ]]></add> </operation> <operation> <search><![CDATA[$(document).ready(function() {]]></search> <add position="before"><![CDATA[var text_stock = "<?php echo $text_stock; ?>"; var text_tax = "<?php echo $text_tax; ?>"; <?php if (isset($warehouses)) { echo "var \$warehouses = {"; foreach ($warehouses as $warehouse_id => $name) { echo "'" . $warehouse_id . "':'" . $name . "',"; } echo "}\n"; } ?> <?php if ($options) {?> //------------------------------------------------------------------------------------------------------------------------------ // Определение переменных для характеристик var $options_type = {<?php foreach ($options as $option) { echo $option['product_option_id'].":'".$option['type']."',"; }?>}; var options_order = [<?php foreach ($options as $option) { echo $option['product_option_id'].","; }?>]; var $options_required = {<?php foreach ($options as $option) { echo $option['product_option_id'].":true,"; }?>}; var $options = {<?php foreach ($product_features_options as $product_feature_id => $feature) { $str_value = $product_feature_id.":{"; foreach ($feature as $product_option_id => $product_option_value_id) { $str_value .= $product_option_id.":".$product_option_value_id.","; } $str_value .= "},"; echo $str_value; } echo "};\n";?> // Тут хранится id выбранной характеристики var product_feature_id = 0; var unit_id = 0; <?php $str_features = "var \$features = {"; $str_price = "var \$price = {"; $str_quantity = "// quantity{product_feature_id:{warehouse_id:{unit_id:quantity}}}\n"; $quantity_total = 0; $str_quantity .= "var \$quantity = {"; foreach ($product_features_options as $product_feature_id => $feature_option) { // Цены $str_price .= "'" . $product_feature_id . "':{'value':" . $product_features_price[$product_feature_id]['value'] . ",'tax':" . $product_features_price[$product_feature_id]['tax'] . "},"; // Характеристики $str_features .= "'" . implode("_", $feature_option) . "':" . $product_feature_id . ","; // Остатки $quantity_array = isset($product_quantity[$product_feature_id]) ? $product_quantity[$product_feature_id] : array(); $str_quantity .= "'" . $product_feature_id . "':"; $str_quantity .= "{"; foreach ($quantity_array as $warehouse_id => $quantity) { $str_quantity .= "'" . $warehouse_id . "':" . $quantity . ","; $quantity_total += $quantity; } $str_quantity .= "},"; } echo $str_features . "};\n"; echo $str_price . "};\n"; echo $str_quantity . "};\n"; echo "var quantity_total = " . $quantity_total . ";\n"; echo "var \$product_units = {"; $num = 1; foreach ($product_units as $unit_id => $unit) { if ($unit['ratio'] == 1) { echo "0:{'unit_id':'" . $unit_id . "','name':'" . $unit['rus_name'] . "','ratio':".$unit['ratio']."},"; } else { echo $num . ":{'unit_id':'" . $unit_id . "','name':'" . $unit['rus_name'] . "','ratio':".$unit['ratio']."},"; $num++; } } echo "};\n"; echo "var \$currency_data = {'symbol':'".$currency_data['symbol']."','decimal':".$currency_data['decimal']."};\n"; ?> //------------------------------------------------------------------------------------------------------------------------------ // Функция отображает остатки по складам // Возвращает строковую переменную в которой перечислены названия всех складов с остатками и единицами измерений function displayQuantity() { if ($.type($quantity[product_feature_id]) == "string") { // Если переменная строка, то есть нет складов, возвращается только количество return $quantity[product_feature_id]; } else { var str = ""; var quantity_warehouse = 0; var str_war = ""; // Базовая единица if ($product_units[0]['name']) { str_unit = " ("+$product_units[0]['name']+")"; } else { str_unit = ""; } // Перебираем все остатки по складам $.each($quantity[product_feature_id],function(warehouse_id, product_quantity) { // Нет складов, если warehouse_id = 0 if (warehouse_id == "0") { // Перебираем все единицы измерений $.each(product_quantity,function(unit_id, quantity) { //str += quantity+" ("+$product_units[unit_id]+"),"; str += "\n" + quantity; }); } // Остатки в выбранной единице else if (unit_id != 0) { // Название склада str_war = " Склад: "+$warehouses[warehouse_id]+": "; } else { if (product_quantity > 0) { quantity_warehouse++; str_war += " "+$warehouses[warehouse_id]+" = "+product_quantity+str_unit; } } }); if (quantity_warehouse > 0) { str = " "+quantity_total+str_unit+" в "+quantity_warehouse+" магазинах: ("+str_war+")"; } else if (quantity_total > 0) { str = " "+quantity_total+str_unit+" по опциям: " + $quantity[product_feature_id][0]; } else { str = " нет в наличии"; } return str; } } // displayQuantity() //------------------------------------------------------------------------------------------------------------------------------ // Функция отображает на странице цену, налоги, остатки, // а также, для передачи в корзину, устанавливает значение product_feature_id function displaySelect() { if (product_feature_id){ $('#price').text(Math.round($price[product_feature_id]['value']).toFixed($currency_data['decimal'])+$currency_data['symbol']); $('#tax').text(text_tax+" "+Math.round($price[product_feature_id]['tax']).toFixed($currency_data['decimal'])+$currency_data['symbol']); $('#stock').text(text_stock+" "+displayQuantity()); $('input[name=\'product_feature_id\']').val(product_feature_id); //$('input[name=\'unit_id\']').val($product_units[unit_id]); } else { $('#price').text(""); $('#tax').text(""); $('#stock').text(text_stock+" "+quantity_total+" ("+$product_units[0]['name']+")"); $('input[name=\'product_feature_id\']').val(0); //$('input[name=\'unit_id\']').val(0); } } // displaySelect() //------------------------------------------------------------------------------------------------------------------------------ // Функция очищает все опции и разблокирует их, сбрасывает ид характеристики, а также обновляет надписи на страничке function clearOptions() { // Перебираем все опции $.each($options_type,function(product_option_id, value) { if (value == "select") { // Делаем доступным опцию $('select[name="option['+product_option_id+']"]').attr("disabled",false); // Сбрасываем выбор, по-умолчанию будет выбран первый элемент $('select[name="option['+product_option_id+']"]').val(''); // Делаем доступным все значения опции $('select[name="option['+product_option_id+']"] option').each(function(){ $(this).removeAttr("disabled"); }); } else { // Делаем доступным опцию $('input[name="option['+product_option_id+']"]').attr("disabled",false); // Снимаем выбор со всех значений $('input[name="option['+product_option_id+']"]').attr('checked', false); } $options_required[product_option_id] = true; }); // Проверка на обязательные опции checkRequired(); // Сбрасываем выбранную характеристику product_feature_id = 0; // Обновляем надписи на страничке displaySelect(); } // clearOptions() //------------------------------------------------------------------------------------------------------------------------------ // Функция проверяет и устанавливает какие опции обязательные, бывает что некоторые характеристики имеют разное количество опций function checkRequired() { // Перебираем все опции $.each($options_required,function(product_option_id, required) { if ($options_type[product_option_id] == "select") { // Получаем элемент в котором устанавливается класс обязательной опции $form = $('select[name="option['+product_option_id+']"]').parents("div.form-group"); // Если опция должна быть обязательной, а она не содержит класс "required", устанавливает этот класс или наоборот убираем его if (required && !$form.hasClass("required")) { $form.addClass("required"); } else if (!required && $form.hasClass("required")) { $form.removeClass("required"); } } else { // Получаем элемент в котором устанавливается класс обязательной опции $form = $('input[name="option['+product_option_id+']"]').parents("div.form-group"); // Если опция должна быть обязательной, а она не содержит класс "required", устанавливает этот класс или наоборот убираем его if (required && !$form.hasClass("required")) { $form.addClass("required"); } else if (!required && $form.hasClass("required")) { $form.removeClass("required"); } } }); } // checkRequired() //------------------------------------------------------------------------------------------------------------------------------ // Функция возвращает выбранные опции значений в виде объекта // Возвращает $option_values - объект с опция и значениями function getOptionValues() { var $option_values = {}; // Перебираем опции в том порядке в каком они заданы на сайте $.each(options_order,function(index, product_option_id) { if ($options_type[product_option_id] == 'select') { // Если опция типа select $option_values[product_option_id] = $('select[name="option['+product_option_id+']"] :selected').val(); } else { // Если опция типа input $option_values[product_option_id] = $('input[name="option['+product_option_id+']"]:checked').val(); } }); return $option_values; } // getOptionValues() //------------------------------------------------------------------------------------------------------------------------------ // Функция по выбранным опциям возвращает product_feature_id // $option_values - объект с опциями и значений // Возвращает ид характеристики, если вариант выбранныхопций не существует ни в одной характеристики, то вернет 0 function getProductFeature($option_values) { var new_product_feature_id = 0; $.each($options,function(feature_id, $product_options) { // Количество совпадений var matches = 0; // Перебираем все опции характеристики $.each($product_options,function(product_option_id, product_option_value_id) { // Ищем совпадение значений if ($option_values[product_option_id] == product_option_value_id) { matches ++; } }); // Если совпали все опции if (matches == options_order.length) { // Сохраним значение характеристики где совпали все опции new_product_feature_id = feature_id; // Прервем цикл return false; } }); return new_product_feature_id; } // getProductFeature() //------------------------------------------------------------------------------------------------------------------------------ // Функция устанавливает доступность опции типа input и ее значения // current_product_option_value_id - текущее выбранное значение опции // current_option_id - текущая опция в которой выбрано значение // $option_values - объект в котором заданы все значения опций текущей характеристики // Возвращает значение текущей опции function setAccessInputOption(current_option_id, current_product_option_value_id, $option_values) { var val = 0; var required = false; // Перебираем все значения опций $('div#input-option'+current_option_id+' div label input').each(function(index){ // Если в классе не содержится значение выбранной опции, то отключаем эту опцию и снимаем флажок if (!$(this).hasClass(current_product_option_value_id) && (current_product_option_value_id)) { $(this).attr("disabled",true); $(this).prop("checked",false); } else { required = true; // Включаем,если была отключена ранее $(this).attr("disabled",false); // Если есть в варианте текущее значение опции if ($option_values[current_option_id] == $(this).val()) { // И еще не выбрано значение if (!val) { val = $(this).val(); $(this).prop("checked",true); } else { // Если значение уже было установлено, то с других опций снимаем выбор $(this).prop("checked",false); } } else { // Если вариант не содержит значение, снимаем выбор $(this).prop("checked",false); //$(this).attr("disabled",true); } } }); $options_required[current_option_id] = required; return val; } // setAccessSelectOption() //------------------------------------------------------------------------------------------------------------------------------ // Функция устанавливает доступность опции типа select и ее значения // current_product_option_value_id - текущее выбранное значение опции // current_option_id - текущая опция в которой выбрано значение // $option_values - объект в котором заданы все значения опций текущей характеристики // Возвращает значение текущей опции function setAccessSelectOption(current_option_id, current_product_option_value_id, $option_values) { var val = 0; var required = false; // Перебираем все значения опций $('select#input-option'+current_option_id+' option').each(function(index){ // Если в классе не содержится значение выбранной опции, // и есть само значение и не первое, тогда отключаем эту опцию и снимаем флажок if (!$(this).hasClass(current_product_option_value_id) && (current_product_option_value_id) && index > 0) { $(this).attr("disabled",true); $(this).prop("selected",false); } else { required = true; // Значение содержится в классе, значит разблокируем если был заблокирован $(this).attr("disabled",false); // Если не было ранее выбрано значение, и не первое, // и в варианте для этой опции есть текущее значение if (!val && index > 0 && $option_values[current_option_id] == $(this).val()) { // Записываем выбранное значение val = $(this).val(); // Выбираем его в селекте $(this).prop("selected",true); } } }); $options_required[current_option_id] = required; return val; } // setAccessSelectOption() //------------------------------------------------------------------------------------------------------------------------------ // Функция устанавливает доступность опций и их значений // current_product_option_value_id - текущее выбранное значение опции // current_option_id - текущая опция в которой выбрано значение // $option_values - объект в котором заданы все значения опций текущей характеристики // Возвращает объект $option_values, теоретически он не меняется, оставлено временно для тестирования function setAccessOptions(current_product_option_value_id, current_option_id, $option_values) { // Выберем опции по варианту $.each(options_order,function(index, product_option_id) { if (current_option_id == product_option_id) { $option_values[product_option_id] = current_product_option_value_id; } else { if ($options_type[product_option_id] == 'select') { // Установим доступность значений в опции типа select //$option_values[product_option_id] = setAccessSelectOption(product_option_id, current_product_option_value_id, $option_values); setAccessSelectOption(product_option_id, current_product_option_value_id, $option_values); } else { // Установим доступность значений в опции типа input //$option_values[product_option_id] = setAccessInputOption(product_option_id, current_product_option_value_id, $option_values); setAccessInputOption(product_option_id, current_product_option_value_id, $option_values); } } }); return $option_values; } // setAccessOptions() //------------------------------------------------------------------------------------------------------------------------------ // Функция получает первый вариант опция по выбранному значению одной из опций // product_option_value_id - значение выбранной опции // Возвращает объект (index = product_option_id, value = product_option_value_id) function getRightOption(product_option_value_id) { // Тут хранится вариант опций выбранной характеристики var $option_values = {}; // Перебирем все опции $.each($options, function(sel_product_feature_id, $product_options) { // Прервем цикл, если ид характеристики уже определена if (product_feature_id) { return false; } // Перебираем все опции характеристики $.each($product_options, function(option_id, sel_product_option_value_id) { // Если значение неопределено, берем первую попавшуюся характеристику if (product_option_value_id == undefined) { // Запишем id характеристики, чтобы потом передать ее в корзину product_feature_id = sel_product_feature_id; // Получим вариант опций и значений этой характеристики $option_values = $product_options; // Прервем цикл return false; } // Если совпало значение опции в первой попавшейся характеристики, тогда выбираем ее, и получаем остальные значения опций else if (sel_product_option_value_id == product_option_value_id) { // Запишем id характеристики, чтобы потом передать ее в корзину product_feature_id = sel_product_feature_id; // Получим вариант опций и значений этой характеристики $option_values = $product_options; // Прервем цикл return false; } }); }); return $option_values; } // getRightOption() //------------------------------------------------------------------------------------------------------------------------------ // Функция вызывается при изменении любой опции // current_option_id - это номер опции в которой выбрано значение // selected - выбранное значение опции, product_option_value_id // type - тип опции, может иметь значение: select, input, radio, image function selectOption(current_option_id, selected, type) { // Объект опций с выбранными значениями (index = опция, value = значение) var $option_values = {}; // Получим существующие значения опций $option_values = getOptionValues(); // Проверим вариант и получим id характеристики, если вариант неверный, тогда id = 0 product_feature_id = getProductFeature($option_values); // Если опции не соответствуют ни одной характеристики, выставляем другие опции по первому совпадению в первой найденой характеристики if (!product_feature_id) { // Получим вариант опции по выбранному значению одной из опций // option_values это объект index = product_option_id, value = product_option_value_id $option_values = getRightOption(selected); // Устанавливает доступность значений всех опций setAccessOptions(selected, current_option_id, $option_values); } // Проверим опции на обязательные checkRequired(); // Отображает выбранные данные displaySelect(); } <?php } ?> ]]></add> </operation> <operation> <search><![CDATA[$(document).ready(function() {]]></search> <add position="after"><![CDATA[<?php if ($options) {?> // Кнопки очистки опций, под каждый шаблон возможно придется править //$('select[name="option[9]"]').parent('div').before('<div class="form-group"><a href="#" id="clear_options">Очистить опции</a></div>'); $('div#input-option7').parent('div').after('<div class="form-group"><a href="#" id="clear_options">Очистить опции</a></div>'); //$('div#form-group').parent('div').after('<div class="form-group"><a href="#" id="clear_options">Очистить опции</a></div>'); $('#product').find('h3').after('<div class="form-group"><a href="#" id="clear_options">Очистить опции</a></div>'); <?php foreach ($options as $option) { ?> //------------------------------------------------------------------------------------------------------------------------------ // Функция обрабатывает значение при выборе опции <?php $select_type = $option['type'] == "select" ? "select" : "input"; $html = " $('".$select_type."[name=\"option[".$option['product_option_id']."]\"]').change(function(){\n"; $html .= " var selected = ".($select_type == "select" ? "$(':selected', this).val();" : "this.value;") . "\n"; $html .= " selectOption(".$option['product_option_id'].",selected,'".$select_type."');\n"; $html .= " });\n\n"; echo $html; } ?> $('#product').on('click', '#clear_options', function(e){ e.preventDefault(); clearOptions(); }); selectOption(); <?php } ?> ]]></add> </operation> </file> </modification> 2 Надіслати Поділитися на інших сайтах More sharing options... Kirillove Опубліковано: 4 червня 2017 Автор Share Опубліковано: 4 червня 2017 Kirillove, затираются картинки товаров если не ставлю галочки "выгружать картинки" в 1с, это недочет моей версии 1.6.3.6 или так задумано? В последней версии модуля это исправлено? если да, то какие примерно строки нужно заменитьИзменил опцию в настройках, теперь и физически на диске картинки проверяет, и не будет даже распаковывать если обмен картинками отключен.Отправлено с моего Power Five Evo через Tapatalk 2 Надіслати Поділитися на інших сайтах More sharing options... abadrozadub Опубліковано: 4 червня 2017 Share Опубліковано: 4 червня 2017 13 hours ago, Kirillove said: Для версии 2.3 найдена ошибка при выводе общего остатка по всем складам... Возможно это она вылезла. Уже исправлена 1.6.3.11 Но у меня версия 2.1.0.2 (rs.1) Надіслати Поділитися на інших сайтах More sharing options... abadrozadub Опубліковано: 4 червня 2017 Share Опубліковано: 4 червня 2017 13 hours ago, Kirillove said: После отладки отключите лог... Если включен, то расти он и будет, настройте ротацию. Если лог в режиме отладки, то при большом обмене он может достигать размера несколько гигабайт. Попробую, но опять же, обмен минимальный. А вот собственно ошибка которая заполняет файл error.log 2017-06-03 19:18:13 - PHP Notice: Undefined variable: dir in /admin/model/tool/exchange1c.php on line 3091 2017-06-03 19:18:13 - PHP Warning: readdir() expects parameter 1 to be resource, null given in /admin/model/tool/exchange1c.php on line 3091 Надіслати Поділитися на інших сайтах More sharing options... Kirillove Опубліковано: 4 червня 2017 Автор Share Опубліковано: 4 червня 2017 В 02.06.2017 в 18:57, SusereN сказал: Доброго дня. Обновился на 1.6.3.10, выгрузка не проходит. Гружу вручную, получаю ошибку Откатился на 3.9 - всё успешно Нашел ошибку, перед этой строчкой вставь : для opencart 2.1: $this->load->model('tool/exchange1c'); для opencart 2.3 $this->load->model('extension/exchange1c'); И там далее в этой функции есть такая же строчка, ее удалите 1 Надіслати Поділитися на інших сайтах More sharing options... AAK Опубліковано: 4 червня 2017 Share Опубліковано: 4 червня 2017 Большое спасибо за проделанную работу. Настроил выгрузку из Управление производственным предприятием 1.3 (1.3.89.1). Версия модуля 1.6.3.10. Почему-то не всегда вставляются описания к товарам. Методом проб и ошибок нашел нижеприведенный код. Вывел в лог $this->log($this->ERROR) - пустое значение, но SEO был сгенерирован. В чем ошибка не разобрался, просто закомментировал //if ($this->ERROR) return false; // SEO формируем когда известен product_id и товар записан $update = $this->seoGenerateProduct($data); //if ($this->ERROR) return false; if ($update || $new) { // Обновляем описание товара после генерации SEO $this->setProductDescription($data, $new); } return true; } // setProduct() Еще заметил, если изменить в 1с описание товара и произвести обмен, описание на сайте меняется, но при этом картинка исчезает. Если загрузка полная, все нормально. 1с не выгружает картинку, если она не менялась. Надіслати Поділитися на інших сайтах More sharing options... uvers Опубліковано: 5 червня 2017 Share Опубліковано: 5 червня 2017 (змінено) Всем доброго дня. Автору огромное спасибо за проделанную работу!! Теперь, собственно вопрос: ocStore 2.1.0.2 скачал и поставил opencart2.1-exchange1c_1.6.3.10.ocmod. После установки открыл товары и сразу получил ошибку Undefined index: affiliate_commission in /var/www/admin/www/dev2.ru/vqmod/vqcache/vq2-system_storage_modification_admin_controller_catalog_product.php on line 486 Почистил кэш vqmod/vqcache. Не помогло Пожалуйста, подскажите, в чем может быть проблема? Змінено 5 червня 2017 користувачем uvers Надіслати Поділитися на інших сайтах More sharing options... Blade Опубліковано: 5 червня 2017 Share Опубліковано: 5 червня 2017 (змінено) Виталий, добрый день, нужна помощь что эначит эта ошибка ? версия последняя 1.6.3.10 1С Управление нашей фирмой, редакция 1.6 (1.6.10.43) 2017-06-05 15:43:42 - 3.830 Mb | 7121 | >>>>>>>>>>>>>>>>>>>> НАЧАЛО ЗАГРУЗКИ ДАННЫХ <<<<<<<<<<<<<<<<<<<< 2017-06-05 15:43:42 - PHP Unknown: Object of class LibXMLError could not be converted to string in /var/www/*******/data/www/**********.ru/admin/model/tool/exchange1c.php on line 7137 2017-06-05 15:43:42 - 3.832 Mb | 7138 | Ошибка при загрузке файла: /var/www/*******/data/www/***********.ru/system/storage/cache/exchange1c/import.xml 2017-06-05 15:43:42 - 3.832 Mb | 0036 | Файл не является стандартом XML, подробности в журнале 2017-06-05 15:43:42 - modeImport(): Ошибка загрузки файла: /var/www/form/data/www/test.form-m.ru/system/storage/cache/exchange1c/import.xml Змінено 5 червня 2017 користувачем Blade 1 Надіслати Поділитися на інших сайтах More sharing options... rutskoifp Опубліковано: 5 червня 2017 Share Опубліковано: 5 червня 2017 Здравствуйте! Очень нужна помощь! При установке модуля 1.6.3.10 выдает ошибку! Модуль был установлен, но после обновления все пошло наперекосяк, решил снести и установить снова, результат плачевный.... теперь вообще не могу установить модуль! Движок 2.3 вот лог сайта [Mon Jun 05 19:43:14.234928 2017] [:error] [pid 8896] [client 78.29.9.4:34940] PHP Fatal error: Uncaught exception 'Exception' with message 'Error: Duplicate column name 'product_feature_id'<br />Error No: 1060<br />ALTER TABLE `oc_cart` ADD `product_feature_id` INT( 11 ) NOT NULL DEFAULT 0 AFTER `option`' in /home/c/xxx/public_html/system/library/db/mysqli.php:40\nStack trace:\n#0 /home/xxx/xxx/public_html/system/library/db.php(16): DB\\MySQLi->query('ALTER TABLE `o...', Array)\n#1 /home/c/xxx/public_html/admin/controller/extension/module/exchange1c.php(812): DB->query('ALTER TABLE `o...')\n#2 [internal function]: ControllerExtensionModuleExchange1c->install(Array)\n#3 /home/c/xxx/public_html/vqmod/vqcache/vq2-system_storage_modification_system_engine_action.php(51): call_user_func_array(Array, Array)\n#4 /home/c/xxx/public_html/vqmod/vqcache/vq2-system_storage_modification_system_engine_loader.php(24): Action->execute(Object(Registry), Array)\n#5 /home/c/xxx/public_html/admin/contro in /home/c/xxx/public_html/system/library/db/mysqli.php on line 40, referer: http://xxx/admin/index.php?route=extension/extension&token=3bmKhu87YSMU5NFbaAY2ceApVUb7Wo1j Помогите кто знает как решить, буду очень признателен! Надіслати Поділитися на інших сайтах More sharing options... rutskoifp Опубліковано: 5 червня 2017 Share Опубліковано: 5 червня 2017 (змінено) 1 час назад, rutskoifp сказал: Здравствуйте! Очень нужна помощь! При установке модуля 1.6.3.10 выдает ошибку! Модуль был установлен, но после обновления все пошло наперекосяк, решил снести и установить снова, результат плачевный.... теперь вообще не могу установить модуль! Движок 2.3 вот лог сайта [Mon Jun 05 19:43:14.234928 2017] [:error] [pid 8896] [client 78.29.9.4:34940] PHP Fatal error: Uncaught exception 'Exception' with message 'Error: Duplicate column name 'product_feature_id'<br />Error No: 1060<br />ALTER TABLE `oc_cart` ADD `product_feature_id` INT( 11 ) NOT NULL DEFAULT 0 AFTER `option`' in /home/c/xxx/public_html/system/library/db/mysqli.php:40\nStack trace:\n#0 /home/xxx/xxx/public_html/system/library/db.php(16): DB\\MySQLi->query('ALTER TABLE `o...', Array)\n#1 /home/c/xxx/public_html/admin/controller/extension/module/exchange1c.php(812): DB->query('ALTER TABLE `o...')\n#2 [internal function]: ControllerExtensionModuleExchange1c->install(Array)\n#3 /home/c/xxx/public_html/vqmod/vqcache/vq2-system_storage_modification_system_engine_action.php(51): call_user_func_array(Array, Array)\n#4 /home/c/xxx/public_html/vqmod/vqcache/vq2-system_storage_modification_system_engine_loader.php(24): Action->execute(Object(Registry), Array)\n#5 /home/c/xxx/public_html/admin/contro in /home/c/xxx/public_html/system/library/db/mysqli.php on line 40, referer: http://xxx/admin/index.php?route=extension/extension&token=3bmKhu87YSMU5NFbaAY2ceApVUb7Wo1j Помогите кто знает как решить, буду очень признателен! Решено! Удалил все устанавливаемые модулем таблицы, и изменил изменяемые им значение! модуль установился! Пробуем работать дальше...)))) Единственное, модуль не прописался в админке-во вкладке дополнение! Выгрузка идет порядка 20 мин, выкрузилось все кроме товаров! (УНФ 1.6.10.44) Для справки товаров около 1000 Змінено 5 червня 2017 користувачем rutskoifp Надіслати Поділитися на інших сайтах More sharing options... Furious Опубліковано: 5 червня 2017 Share Опубліковано: 5 червня 2017 Доброго времени суток. А когда планируете 1.6.3.11? установил 1.6.3.10. обновил на модификатор 1.6.3.11 вами выложенный (не знаю можно ли так ) Ошибка та же: 2017-06-05 22:24:30 - PHP Warning: opendir(/home/***/test/image/cache/import_files/23): failed to open dir: No such file or directory in /home/***/test/admin/model/extension/exchange1c.php on line 3091 2017-06-05 22:24:30 - PHP Warning: readdir() expects parameter 1 to be resource, boolean given in /home/***/test/admin/model/extension/exchange1c.php on line 3092 2017-06-05 22:24:30 - PHP Warning: readdir() expects parameter 1 to be resource, boolean given in /home/***/test/admin/model/extension/exchange1c.php on line 3092 2017-06-05 22:24:30 - PHP Warning: readdir() expects parameter 1 to be resource, boolean given in /home/***/test/admin/model/extension/exchange1c.php on line 3092 2017-06-05 22:24:30 - PHP Warning: readdir() expects parameter 1 to be resource, boolean given in /home/***/test/admin/model/extension/exchange1c.php on line 3092 2017-06-05 22:24:30 - PHP Warning: readdir() expects parameter 1 to be resource, boolean given in 1с УТ3.1 Украина OcStore ocStore 2.3.0.2.2 Шаблон Демо Стабильно работает 1.6.3.9 но без присвоения атрибутов Надіслати Поділитися на інших сайтах More sharing options... Kirillove Опубліковано: 6 червня 2017 Автор Share Опубліковано: 6 червня 2017 Решено! Удалил все устанавливаемые модулем таблицы, и изменил изменяемые им значение! модуль установился! Пробуем работать дальше...)))) Единственное, модуль не прописался в админке-во вкладке дополнение! Выгрузка идет порядка 20 мин, выкрузилось все кроме товаров! (УНФ 1.6.10.44) Для справки товаров около 1000Многовато для 1000 товаров, на моем сервере вроде было не дольше 5 мин, сегодня вечером уже точно выложу 1.6.3.11 и проверим ещё раз вместе. А лог есть? Очень интересно посмотреть что он там долго делает.Отправлено с моего Power Five Evo через Tapatalk Надіслати Поділитися на інших сайтах More sharing options... Kirillove Опубліковано: 6 червня 2017 Автор Share Опубліковано: 6 червня 2017 Доброго времени суток. А когда планируете 1.6.3.11? установил 1.6.3.10. обновил на модификатор 1.6.3.11 вами выложенный (не знаю можно ли так [emoji4] ) Ошибка та же:2017-06-05 22:24:30 - PHP Warning: opendir(/home/***/test/image/cache/import_files/23): failed to open dir: No such file or directory in /home/***/test/admin/model/extension/exchange1c.php on line 30912017-06-05 22:24:30 - PHP Warning: readdir() expects parameter 1 to be resource, boolean given in /home/***/test/admin/model/extension/exchange1c.php on line 30922017-06-05 22:24:30 - PHP Warning: readdir() expects parameter 1 to be resource, boolean given in /home/***/test/admin/model/extension/exchange1c.php on line 30922017-06-05 22:24:30 - PHP Warning: readdir() expects parameter 1 to be resource, boolean given in /home/***/test/admin/model/extension/exchange1c.php on line 30922017-06-05 22:24:30 - PHP Warning: readdir() expects parameter 1 to be resource, boolean given in /home/***/test/admin/model/extension/exchange1c.php on line 30922017-06-05 22:24:30 - PHP Warning: readdir() expects parameter 1 to be resource, boolean given in 1с УТ3.1 Украина OcStore ocStore 2.3.0.2.2 Шаблон ДемоСтабильно работает 1.6.3.9 но без присвоения атрибутовЭта проблема не в модификаторе, там рядом я функцию выложил заменой которой решит эту проблему сегодня уже точно выложу Навь версию, пришлось тщательно тестироватьОтправлено с моего Power Five Evo через Tapatalk 1 Надіслати Поділитися на інших сайтах More sharing options... 3 р dinox changed the title to Модуль обмена для opencart v2.3 с учетной системой по стандарту CommerceML [Поддержка] Назад 25 26 27 28 29 30 31 32 33 34 35 Вперед Сторінка 30 з 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 080 переглядів Sha 17 листопада 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 427 переглядів 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 061 перегляд 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 832 перегляди 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 Опубліковано: 4 червня 2017 Автор Share Опубліковано: 4 червня 2017 Kirillove, затираются картинки товаров если не ставлю галочки "выгружать картинки" в 1с, это недочет моей версии 1.6.3.6 или так задумано? В последней версии модуля это исправлено? если да, то какие примерно строки нужно заменитьИзменил опцию в настройках, теперь и физически на диске картинки проверяет, и не будет даже распаковывать если обмен картинками отключен.Отправлено с моего Power Five Evo через Tapatalk 2 Надіслати Поділитися на інших сайтах More sharing options... abadrozadub Опубліковано: 4 червня 2017 Share Опубліковано: 4 червня 2017 13 hours ago, Kirillove said: Для версии 2.3 найдена ошибка при выводе общего остатка по всем складам... Возможно это она вылезла. Уже исправлена 1.6.3.11 Но у меня версия 2.1.0.2 (rs.1) Надіслати Поділитися на інших сайтах More sharing options... abadrozadub Опубліковано: 4 червня 2017 Share Опубліковано: 4 червня 2017 13 hours ago, Kirillove said: После отладки отключите лог... Если включен, то расти он и будет, настройте ротацию. Если лог в режиме отладки, то при большом обмене он может достигать размера несколько гигабайт. Попробую, но опять же, обмен минимальный. А вот собственно ошибка которая заполняет файл error.log 2017-06-03 19:18:13 - PHP Notice: Undefined variable: dir in /admin/model/tool/exchange1c.php on line 3091 2017-06-03 19:18:13 - PHP Warning: readdir() expects parameter 1 to be resource, null given in /admin/model/tool/exchange1c.php on line 3091 Надіслати Поділитися на інших сайтах More sharing options... Kirillove Опубліковано: 4 червня 2017 Автор Share Опубліковано: 4 червня 2017 В 02.06.2017 в 18:57, SusereN сказал: Доброго дня. Обновился на 1.6.3.10, выгрузка не проходит. Гружу вручную, получаю ошибку Откатился на 3.9 - всё успешно Нашел ошибку, перед этой строчкой вставь : для opencart 2.1: $this->load->model('tool/exchange1c'); для opencart 2.3 $this->load->model('extension/exchange1c'); И там далее в этой функции есть такая же строчка, ее удалите 1 Надіслати Поділитися на інших сайтах More sharing options... AAK Опубліковано: 4 червня 2017 Share Опубліковано: 4 червня 2017 Большое спасибо за проделанную работу. Настроил выгрузку из Управление производственным предприятием 1.3 (1.3.89.1). Версия модуля 1.6.3.10. Почему-то не всегда вставляются описания к товарам. Методом проб и ошибок нашел нижеприведенный код. Вывел в лог $this->log($this->ERROR) - пустое значение, но SEO был сгенерирован. В чем ошибка не разобрался, просто закомментировал //if ($this->ERROR) return false; // SEO формируем когда известен product_id и товар записан $update = $this->seoGenerateProduct($data); //if ($this->ERROR) return false; if ($update || $new) { // Обновляем описание товара после генерации SEO $this->setProductDescription($data, $new); } return true; } // setProduct() Еще заметил, если изменить в 1с описание товара и произвести обмен, описание на сайте меняется, но при этом картинка исчезает. Если загрузка полная, все нормально. 1с не выгружает картинку, если она не менялась. Надіслати Поділитися на інших сайтах More sharing options... uvers Опубліковано: 5 червня 2017 Share Опубліковано: 5 червня 2017 (змінено) Всем доброго дня. Автору огромное спасибо за проделанную работу!! Теперь, собственно вопрос: ocStore 2.1.0.2 скачал и поставил opencart2.1-exchange1c_1.6.3.10.ocmod. После установки открыл товары и сразу получил ошибку Undefined index: affiliate_commission in /var/www/admin/www/dev2.ru/vqmod/vqcache/vq2-system_storage_modification_admin_controller_catalog_product.php on line 486 Почистил кэш vqmod/vqcache. Не помогло Пожалуйста, подскажите, в чем может быть проблема? Змінено 5 червня 2017 користувачем uvers Надіслати Поділитися на інших сайтах More sharing options... Blade Опубліковано: 5 червня 2017 Share Опубліковано: 5 червня 2017 (змінено) Виталий, добрый день, нужна помощь что эначит эта ошибка ? версия последняя 1.6.3.10 1С Управление нашей фирмой, редакция 1.6 (1.6.10.43) 2017-06-05 15:43:42 - 3.830 Mb | 7121 | >>>>>>>>>>>>>>>>>>>> НАЧАЛО ЗАГРУЗКИ ДАННЫХ <<<<<<<<<<<<<<<<<<<< 2017-06-05 15:43:42 - PHP Unknown: Object of class LibXMLError could not be converted to string in /var/www/*******/data/www/**********.ru/admin/model/tool/exchange1c.php on line 7137 2017-06-05 15:43:42 - 3.832 Mb | 7138 | Ошибка при загрузке файла: /var/www/*******/data/www/***********.ru/system/storage/cache/exchange1c/import.xml 2017-06-05 15:43:42 - 3.832 Mb | 0036 | Файл не является стандартом XML, подробности в журнале 2017-06-05 15:43:42 - modeImport(): Ошибка загрузки файла: /var/www/form/data/www/test.form-m.ru/system/storage/cache/exchange1c/import.xml Змінено 5 червня 2017 користувачем Blade 1 Надіслати Поділитися на інших сайтах More sharing options... rutskoifp Опубліковано: 5 червня 2017 Share Опубліковано: 5 червня 2017 Здравствуйте! Очень нужна помощь! При установке модуля 1.6.3.10 выдает ошибку! Модуль был установлен, но после обновления все пошло наперекосяк, решил снести и установить снова, результат плачевный.... теперь вообще не могу установить модуль! Движок 2.3 вот лог сайта [Mon Jun 05 19:43:14.234928 2017] [:error] [pid 8896] [client 78.29.9.4:34940] PHP Fatal error: Uncaught exception 'Exception' with message 'Error: Duplicate column name 'product_feature_id'<br />Error No: 1060<br />ALTER TABLE `oc_cart` ADD `product_feature_id` INT( 11 ) NOT NULL DEFAULT 0 AFTER `option`' in /home/c/xxx/public_html/system/library/db/mysqli.php:40\nStack trace:\n#0 /home/xxx/xxx/public_html/system/library/db.php(16): DB\\MySQLi->query('ALTER TABLE `o...', Array)\n#1 /home/c/xxx/public_html/admin/controller/extension/module/exchange1c.php(812): DB->query('ALTER TABLE `o...')\n#2 [internal function]: ControllerExtensionModuleExchange1c->install(Array)\n#3 /home/c/xxx/public_html/vqmod/vqcache/vq2-system_storage_modification_system_engine_action.php(51): call_user_func_array(Array, Array)\n#4 /home/c/xxx/public_html/vqmod/vqcache/vq2-system_storage_modification_system_engine_loader.php(24): Action->execute(Object(Registry), Array)\n#5 /home/c/xxx/public_html/admin/contro in /home/c/xxx/public_html/system/library/db/mysqli.php on line 40, referer: http://xxx/admin/index.php?route=extension/extension&token=3bmKhu87YSMU5NFbaAY2ceApVUb7Wo1j Помогите кто знает как решить, буду очень признателен! Надіслати Поділитися на інших сайтах More sharing options... rutskoifp Опубліковано: 5 червня 2017 Share Опубліковано: 5 червня 2017 (змінено) 1 час назад, rutskoifp сказал: Здравствуйте! Очень нужна помощь! При установке модуля 1.6.3.10 выдает ошибку! Модуль был установлен, но после обновления все пошло наперекосяк, решил снести и установить снова, результат плачевный.... теперь вообще не могу установить модуль! Движок 2.3 вот лог сайта [Mon Jun 05 19:43:14.234928 2017] [:error] [pid 8896] [client 78.29.9.4:34940] PHP Fatal error: Uncaught exception 'Exception' with message 'Error: Duplicate column name 'product_feature_id'<br />Error No: 1060<br />ALTER TABLE `oc_cart` ADD `product_feature_id` INT( 11 ) NOT NULL DEFAULT 0 AFTER `option`' in /home/c/xxx/public_html/system/library/db/mysqli.php:40\nStack trace:\n#0 /home/xxx/xxx/public_html/system/library/db.php(16): DB\\MySQLi->query('ALTER TABLE `o...', Array)\n#1 /home/c/xxx/public_html/admin/controller/extension/module/exchange1c.php(812): DB->query('ALTER TABLE `o...')\n#2 [internal function]: ControllerExtensionModuleExchange1c->install(Array)\n#3 /home/c/xxx/public_html/vqmod/vqcache/vq2-system_storage_modification_system_engine_action.php(51): call_user_func_array(Array, Array)\n#4 /home/c/xxx/public_html/vqmod/vqcache/vq2-system_storage_modification_system_engine_loader.php(24): Action->execute(Object(Registry), Array)\n#5 /home/c/xxx/public_html/admin/contro in /home/c/xxx/public_html/system/library/db/mysqli.php on line 40, referer: http://xxx/admin/index.php?route=extension/extension&token=3bmKhu87YSMU5NFbaAY2ceApVUb7Wo1j Помогите кто знает как решить, буду очень признателен! Решено! Удалил все устанавливаемые модулем таблицы, и изменил изменяемые им значение! модуль установился! Пробуем работать дальше...)))) Единственное, модуль не прописался в админке-во вкладке дополнение! Выгрузка идет порядка 20 мин, выкрузилось все кроме товаров! (УНФ 1.6.10.44) Для справки товаров около 1000 Змінено 5 червня 2017 користувачем rutskoifp Надіслати Поділитися на інших сайтах More sharing options... Furious Опубліковано: 5 червня 2017 Share Опубліковано: 5 червня 2017 Доброго времени суток. А когда планируете 1.6.3.11? установил 1.6.3.10. обновил на модификатор 1.6.3.11 вами выложенный (не знаю можно ли так ) Ошибка та же: 2017-06-05 22:24:30 - PHP Warning: opendir(/home/***/test/image/cache/import_files/23): failed to open dir: No such file or directory in /home/***/test/admin/model/extension/exchange1c.php on line 3091 2017-06-05 22:24:30 - PHP Warning: readdir() expects parameter 1 to be resource, boolean given in /home/***/test/admin/model/extension/exchange1c.php on line 3092 2017-06-05 22:24:30 - PHP Warning: readdir() expects parameter 1 to be resource, boolean given in /home/***/test/admin/model/extension/exchange1c.php on line 3092 2017-06-05 22:24:30 - PHP Warning: readdir() expects parameter 1 to be resource, boolean given in /home/***/test/admin/model/extension/exchange1c.php on line 3092 2017-06-05 22:24:30 - PHP Warning: readdir() expects parameter 1 to be resource, boolean given in /home/***/test/admin/model/extension/exchange1c.php on line 3092 2017-06-05 22:24:30 - PHP Warning: readdir() expects parameter 1 to be resource, boolean given in 1с УТ3.1 Украина OcStore ocStore 2.3.0.2.2 Шаблон Демо Стабильно работает 1.6.3.9 но без присвоения атрибутов Надіслати Поділитися на інших сайтах More sharing options... Kirillove Опубліковано: 6 червня 2017 Автор Share Опубліковано: 6 червня 2017 Решено! Удалил все устанавливаемые модулем таблицы, и изменил изменяемые им значение! модуль установился! Пробуем работать дальше...)))) Единственное, модуль не прописался в админке-во вкладке дополнение! Выгрузка идет порядка 20 мин, выкрузилось все кроме товаров! (УНФ 1.6.10.44) Для справки товаров около 1000Многовато для 1000 товаров, на моем сервере вроде было не дольше 5 мин, сегодня вечером уже точно выложу 1.6.3.11 и проверим ещё раз вместе. А лог есть? Очень интересно посмотреть что он там долго делает.Отправлено с моего Power Five Evo через Tapatalk Надіслати Поділитися на інших сайтах More sharing options... Kirillove Опубліковано: 6 червня 2017 Автор Share Опубліковано: 6 червня 2017 Доброго времени суток. А когда планируете 1.6.3.11? установил 1.6.3.10. обновил на модификатор 1.6.3.11 вами выложенный (не знаю можно ли так [emoji4] ) Ошибка та же:2017-06-05 22:24:30 - PHP Warning: opendir(/home/***/test/image/cache/import_files/23): failed to open dir: No such file or directory in /home/***/test/admin/model/extension/exchange1c.php on line 30912017-06-05 22:24:30 - PHP Warning: readdir() expects parameter 1 to be resource, boolean given in /home/***/test/admin/model/extension/exchange1c.php on line 30922017-06-05 22:24:30 - PHP Warning: readdir() expects parameter 1 to be resource, boolean given in /home/***/test/admin/model/extension/exchange1c.php on line 30922017-06-05 22:24:30 - PHP Warning: readdir() expects parameter 1 to be resource, boolean given in /home/***/test/admin/model/extension/exchange1c.php on line 30922017-06-05 22:24:30 - PHP Warning: readdir() expects parameter 1 to be resource, boolean given in /home/***/test/admin/model/extension/exchange1c.php on line 30922017-06-05 22:24:30 - PHP Warning: readdir() expects parameter 1 to be resource, boolean given in 1с УТ3.1 Украина OcStore ocStore 2.3.0.2.2 Шаблон ДемоСтабильно работает 1.6.3.9 но без присвоения атрибутовЭта проблема не в модификаторе, там рядом я функцию выложил заменой которой решит эту проблему сегодня уже точно выложу Навь версию, пришлось тщательно тестироватьОтправлено с моего Power Five Evo через Tapatalk 1 Надіслати Поділитися на інших сайтах More sharing options... 3 р dinox changed the title to Модуль обмена для opencart v2.3 с учетной системой по стандарту CommerceML [Поддержка] Назад 25 26 27 28 29 30 31 32 33 34 35 Вперед Сторінка 30 з 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 080 переглядів Sha 17 листопада 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 427 переглядів 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 061 перегляд 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 832 перегляди 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
abadrozadub Опубліковано: 4 червня 2017 Share Опубліковано: 4 червня 2017 13 hours ago, Kirillove said: Для версии 2.3 найдена ошибка при выводе общего остатка по всем складам... Возможно это она вылезла. Уже исправлена 1.6.3.11 Но у меня версия 2.1.0.2 (rs.1) Надіслати Поділитися на інших сайтах More sharing options...
abadrozadub Опубліковано: 4 червня 2017 Share Опубліковано: 4 червня 2017 13 hours ago, Kirillove said: После отладки отключите лог... Если включен, то расти он и будет, настройте ротацию. Если лог в режиме отладки, то при большом обмене он может достигать размера несколько гигабайт. Попробую, но опять же, обмен минимальный. А вот собственно ошибка которая заполняет файл error.log 2017-06-03 19:18:13 - PHP Notice: Undefined variable: dir in /admin/model/tool/exchange1c.php on line 3091 2017-06-03 19:18:13 - PHP Warning: readdir() expects parameter 1 to be resource, null given in /admin/model/tool/exchange1c.php on line 3091 Надіслати Поділитися на інших сайтах More sharing options...
Kirillove Опубліковано: 4 червня 2017 Автор Share Опубліковано: 4 червня 2017 В 02.06.2017 в 18:57, SusereN сказал: Доброго дня. Обновился на 1.6.3.10, выгрузка не проходит. Гружу вручную, получаю ошибку Откатился на 3.9 - всё успешно Нашел ошибку, перед этой строчкой вставь : для opencart 2.1: $this->load->model('tool/exchange1c'); для opencart 2.3 $this->load->model('extension/exchange1c'); И там далее в этой функции есть такая же строчка, ее удалите 1 Надіслати Поділитися на інших сайтах More sharing options... AAK Опубліковано: 4 червня 2017 Share Опубліковано: 4 червня 2017 Большое спасибо за проделанную работу. Настроил выгрузку из Управление производственным предприятием 1.3 (1.3.89.1). Версия модуля 1.6.3.10. Почему-то не всегда вставляются описания к товарам. Методом проб и ошибок нашел нижеприведенный код. Вывел в лог $this->log($this->ERROR) - пустое значение, но SEO был сгенерирован. В чем ошибка не разобрался, просто закомментировал //if ($this->ERROR) return false; // SEO формируем когда известен product_id и товар записан $update = $this->seoGenerateProduct($data); //if ($this->ERROR) return false; if ($update || $new) { // Обновляем описание товара после генерации SEO $this->setProductDescription($data, $new); } return true; } // setProduct() Еще заметил, если изменить в 1с описание товара и произвести обмен, описание на сайте меняется, но при этом картинка исчезает. Если загрузка полная, все нормально. 1с не выгружает картинку, если она не менялась. Надіслати Поділитися на інших сайтах More sharing options... uvers Опубліковано: 5 червня 2017 Share Опубліковано: 5 червня 2017 (змінено) Всем доброго дня. Автору огромное спасибо за проделанную работу!! Теперь, собственно вопрос: ocStore 2.1.0.2 скачал и поставил opencart2.1-exchange1c_1.6.3.10.ocmod. После установки открыл товары и сразу получил ошибку Undefined index: affiliate_commission in /var/www/admin/www/dev2.ru/vqmod/vqcache/vq2-system_storage_modification_admin_controller_catalog_product.php on line 486 Почистил кэш vqmod/vqcache. Не помогло Пожалуйста, подскажите, в чем может быть проблема? Змінено 5 червня 2017 користувачем uvers Надіслати Поділитися на інших сайтах More sharing options... Blade Опубліковано: 5 червня 2017 Share Опубліковано: 5 червня 2017 (змінено) Виталий, добрый день, нужна помощь что эначит эта ошибка ? версия последняя 1.6.3.10 1С Управление нашей фирмой, редакция 1.6 (1.6.10.43) 2017-06-05 15:43:42 - 3.830 Mb | 7121 | >>>>>>>>>>>>>>>>>>>> НАЧАЛО ЗАГРУЗКИ ДАННЫХ <<<<<<<<<<<<<<<<<<<< 2017-06-05 15:43:42 - PHP Unknown: Object of class LibXMLError could not be converted to string in /var/www/*******/data/www/**********.ru/admin/model/tool/exchange1c.php on line 7137 2017-06-05 15:43:42 - 3.832 Mb | 7138 | Ошибка при загрузке файла: /var/www/*******/data/www/***********.ru/system/storage/cache/exchange1c/import.xml 2017-06-05 15:43:42 - 3.832 Mb | 0036 | Файл не является стандартом XML, подробности в журнале 2017-06-05 15:43:42 - modeImport(): Ошибка загрузки файла: /var/www/form/data/www/test.form-m.ru/system/storage/cache/exchange1c/import.xml Змінено 5 червня 2017 користувачем Blade 1 Надіслати Поділитися на інших сайтах More sharing options... rutskoifp Опубліковано: 5 червня 2017 Share Опубліковано: 5 червня 2017 Здравствуйте! Очень нужна помощь! При установке модуля 1.6.3.10 выдает ошибку! Модуль был установлен, но после обновления все пошло наперекосяк, решил снести и установить снова, результат плачевный.... теперь вообще не могу установить модуль! Движок 2.3 вот лог сайта [Mon Jun 05 19:43:14.234928 2017] [:error] [pid 8896] [client 78.29.9.4:34940] PHP Fatal error: Uncaught exception 'Exception' with message 'Error: Duplicate column name 'product_feature_id'<br />Error No: 1060<br />ALTER TABLE `oc_cart` ADD `product_feature_id` INT( 11 ) NOT NULL DEFAULT 0 AFTER `option`' in /home/c/xxx/public_html/system/library/db/mysqli.php:40\nStack trace:\n#0 /home/xxx/xxx/public_html/system/library/db.php(16): DB\\MySQLi->query('ALTER TABLE `o...', Array)\n#1 /home/c/xxx/public_html/admin/controller/extension/module/exchange1c.php(812): DB->query('ALTER TABLE `o...')\n#2 [internal function]: ControllerExtensionModuleExchange1c->install(Array)\n#3 /home/c/xxx/public_html/vqmod/vqcache/vq2-system_storage_modification_system_engine_action.php(51): call_user_func_array(Array, Array)\n#4 /home/c/xxx/public_html/vqmod/vqcache/vq2-system_storage_modification_system_engine_loader.php(24): Action->execute(Object(Registry), Array)\n#5 /home/c/xxx/public_html/admin/contro in /home/c/xxx/public_html/system/library/db/mysqli.php on line 40, referer: http://xxx/admin/index.php?route=extension/extension&token=3bmKhu87YSMU5NFbaAY2ceApVUb7Wo1j Помогите кто знает как решить, буду очень признателен! Надіслати Поділитися на інших сайтах More sharing options... rutskoifp Опубліковано: 5 червня 2017 Share Опубліковано: 5 червня 2017 (змінено) 1 час назад, rutskoifp сказал: Здравствуйте! Очень нужна помощь! При установке модуля 1.6.3.10 выдает ошибку! Модуль был установлен, но после обновления все пошло наперекосяк, решил снести и установить снова, результат плачевный.... теперь вообще не могу установить модуль! Движок 2.3 вот лог сайта [Mon Jun 05 19:43:14.234928 2017] [:error] [pid 8896] [client 78.29.9.4:34940] PHP Fatal error: Uncaught exception 'Exception' with message 'Error: Duplicate column name 'product_feature_id'<br />Error No: 1060<br />ALTER TABLE `oc_cart` ADD `product_feature_id` INT( 11 ) NOT NULL DEFAULT 0 AFTER `option`' in /home/c/xxx/public_html/system/library/db/mysqli.php:40\nStack trace:\n#0 /home/xxx/xxx/public_html/system/library/db.php(16): DB\\MySQLi->query('ALTER TABLE `o...', Array)\n#1 /home/c/xxx/public_html/admin/controller/extension/module/exchange1c.php(812): DB->query('ALTER TABLE `o...')\n#2 [internal function]: ControllerExtensionModuleExchange1c->install(Array)\n#3 /home/c/xxx/public_html/vqmod/vqcache/vq2-system_storage_modification_system_engine_action.php(51): call_user_func_array(Array, Array)\n#4 /home/c/xxx/public_html/vqmod/vqcache/vq2-system_storage_modification_system_engine_loader.php(24): Action->execute(Object(Registry), Array)\n#5 /home/c/xxx/public_html/admin/contro in /home/c/xxx/public_html/system/library/db/mysqli.php on line 40, referer: http://xxx/admin/index.php?route=extension/extension&token=3bmKhu87YSMU5NFbaAY2ceApVUb7Wo1j Помогите кто знает как решить, буду очень признателен! Решено! Удалил все устанавливаемые модулем таблицы, и изменил изменяемые им значение! модуль установился! Пробуем работать дальше...)))) Единственное, модуль не прописался в админке-во вкладке дополнение! Выгрузка идет порядка 20 мин, выкрузилось все кроме товаров! (УНФ 1.6.10.44) Для справки товаров около 1000 Змінено 5 червня 2017 користувачем rutskoifp Надіслати Поділитися на інших сайтах More sharing options... Furious Опубліковано: 5 червня 2017 Share Опубліковано: 5 червня 2017 Доброго времени суток. А когда планируете 1.6.3.11? установил 1.6.3.10. обновил на модификатор 1.6.3.11 вами выложенный (не знаю можно ли так ) Ошибка та же: 2017-06-05 22:24:30 - PHP Warning: opendir(/home/***/test/image/cache/import_files/23): failed to open dir: No such file or directory in /home/***/test/admin/model/extension/exchange1c.php on line 3091 2017-06-05 22:24:30 - PHP Warning: readdir() expects parameter 1 to be resource, boolean given in /home/***/test/admin/model/extension/exchange1c.php on line 3092 2017-06-05 22:24:30 - PHP Warning: readdir() expects parameter 1 to be resource, boolean given in /home/***/test/admin/model/extension/exchange1c.php on line 3092 2017-06-05 22:24:30 - PHP Warning: readdir() expects parameter 1 to be resource, boolean given in /home/***/test/admin/model/extension/exchange1c.php on line 3092 2017-06-05 22:24:30 - PHP Warning: readdir() expects parameter 1 to be resource, boolean given in /home/***/test/admin/model/extension/exchange1c.php on line 3092 2017-06-05 22:24:30 - PHP Warning: readdir() expects parameter 1 to be resource, boolean given in 1с УТ3.1 Украина OcStore ocStore 2.3.0.2.2 Шаблон Демо Стабильно работает 1.6.3.9 но без присвоения атрибутов Надіслати Поділитися на інших сайтах More sharing options... Kirillove Опубліковано: 6 червня 2017 Автор Share Опубліковано: 6 червня 2017 Решено! Удалил все устанавливаемые модулем таблицы, и изменил изменяемые им значение! модуль установился! Пробуем работать дальше...)))) Единственное, модуль не прописался в админке-во вкладке дополнение! Выгрузка идет порядка 20 мин, выкрузилось все кроме товаров! (УНФ 1.6.10.44) Для справки товаров около 1000Многовато для 1000 товаров, на моем сервере вроде было не дольше 5 мин, сегодня вечером уже точно выложу 1.6.3.11 и проверим ещё раз вместе. А лог есть? Очень интересно посмотреть что он там долго делает.Отправлено с моего Power Five Evo через Tapatalk Надіслати Поділитися на інших сайтах More sharing options... Kirillove Опубліковано: 6 червня 2017 Автор Share Опубліковано: 6 червня 2017 Доброго времени суток. А когда планируете 1.6.3.11? установил 1.6.3.10. обновил на модификатор 1.6.3.11 вами выложенный (не знаю можно ли так [emoji4] ) Ошибка та же:2017-06-05 22:24:30 - PHP Warning: opendir(/home/***/test/image/cache/import_files/23): failed to open dir: No such file or directory in /home/***/test/admin/model/extension/exchange1c.php on line 30912017-06-05 22:24:30 - PHP Warning: readdir() expects parameter 1 to be resource, boolean given in /home/***/test/admin/model/extension/exchange1c.php on line 30922017-06-05 22:24:30 - PHP Warning: readdir() expects parameter 1 to be resource, boolean given in /home/***/test/admin/model/extension/exchange1c.php on line 30922017-06-05 22:24:30 - PHP Warning: readdir() expects parameter 1 to be resource, boolean given in /home/***/test/admin/model/extension/exchange1c.php on line 30922017-06-05 22:24:30 - PHP Warning: readdir() expects parameter 1 to be resource, boolean given in /home/***/test/admin/model/extension/exchange1c.php on line 30922017-06-05 22:24:30 - PHP Warning: readdir() expects parameter 1 to be resource, boolean given in 1с УТ3.1 Украина OcStore ocStore 2.3.0.2.2 Шаблон ДемоСтабильно работает 1.6.3.9 но без присвоения атрибутовЭта проблема не в модификаторе, там рядом я функцию выложил заменой которой решит эту проблему сегодня уже точно выложу Навь версию, пришлось тщательно тестироватьОтправлено с моего Power Five Evo через Tapatalk 1 Надіслати Поділитися на інших сайтах More sharing options... 3 р dinox changed the title to Модуль обмена для opencart v2.3 с учетной системой по стандарту CommerceML [Поддержка] Назад 25 26 27 28 29 30 31 32 33 34 35 Вперед Сторінка 30 з 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 080 переглядів Sha 17 листопада 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 427 переглядів 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 061 перегляд 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 832 перегляди Sha 10 березня 2020 фикс [Поддержка] Фикс переполнения лога модификаторов Автор: kabantejay, 7 червня 2023 ocmod модификатор (і ще %d) Теги: ocmod модификатор лог modification log fix 8 відповідей 443 перегляди kabantejay 9 червня 2023 Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку Последние темы Последние дополнения Последние новости Вся активність Головна Підтримка та відповіді на запитання. Модулі та розширення Модули обмена данными Модуль Модуль обмена для opencart v2.3 по стандарту CommerceML [Поддержка]
AAK Опубліковано: 4 червня 2017 Share Опубліковано: 4 червня 2017 Большое спасибо за проделанную работу. Настроил выгрузку из Управление производственным предприятием 1.3 (1.3.89.1). Версия модуля 1.6.3.10. Почему-то не всегда вставляются описания к товарам. Методом проб и ошибок нашел нижеприведенный код. Вывел в лог $this->log($this->ERROR) - пустое значение, но SEO был сгенерирован. В чем ошибка не разобрался, просто закомментировал //if ($this->ERROR) return false; // SEO формируем когда известен product_id и товар записан $update = $this->seoGenerateProduct($data); //if ($this->ERROR) return false; if ($update || $new) { // Обновляем описание товара после генерации SEO $this->setProductDescription($data, $new); } return true; } // setProduct() Еще заметил, если изменить в 1с описание товара и произвести обмен, описание на сайте меняется, но при этом картинка исчезает. Если загрузка полная, все нормально. 1с не выгружает картинку, если она не менялась. Надіслати Поділитися на інших сайтах More sharing options...
uvers Опубліковано: 5 червня 2017 Share Опубліковано: 5 червня 2017 (змінено) Всем доброго дня. Автору огромное спасибо за проделанную работу!! Теперь, собственно вопрос: ocStore 2.1.0.2 скачал и поставил opencart2.1-exchange1c_1.6.3.10.ocmod. После установки открыл товары и сразу получил ошибку Undefined index: affiliate_commission in /var/www/admin/www/dev2.ru/vqmod/vqcache/vq2-system_storage_modification_admin_controller_catalog_product.php on line 486 Почистил кэш vqmod/vqcache. Не помогло Пожалуйста, подскажите, в чем может быть проблема? Змінено 5 червня 2017 користувачем uvers Надіслати Поділитися на інших сайтах More sharing options...
Blade Опубліковано: 5 червня 2017 Share Опубліковано: 5 червня 2017 (змінено) Виталий, добрый день, нужна помощь что эначит эта ошибка ? версия последняя 1.6.3.10 1С Управление нашей фирмой, редакция 1.6 (1.6.10.43) 2017-06-05 15:43:42 - 3.830 Mb | 7121 | >>>>>>>>>>>>>>>>>>>> НАЧАЛО ЗАГРУЗКИ ДАННЫХ <<<<<<<<<<<<<<<<<<<< 2017-06-05 15:43:42 - PHP Unknown: Object of class LibXMLError could not be converted to string in /var/www/*******/data/www/**********.ru/admin/model/tool/exchange1c.php on line 7137 2017-06-05 15:43:42 - 3.832 Mb | 7138 | Ошибка при загрузке файла: /var/www/*******/data/www/***********.ru/system/storage/cache/exchange1c/import.xml 2017-06-05 15:43:42 - 3.832 Mb | 0036 | Файл не является стандартом XML, подробности в журнале 2017-06-05 15:43:42 - modeImport(): Ошибка загрузки файла: /var/www/form/data/www/test.form-m.ru/system/storage/cache/exchange1c/import.xml Змінено 5 червня 2017 користувачем Blade 1 Надіслати Поділитися на інших сайтах More sharing options...
rutskoifp Опубліковано: 5 червня 2017 Share Опубліковано: 5 червня 2017 Здравствуйте! Очень нужна помощь! При установке модуля 1.6.3.10 выдает ошибку! Модуль был установлен, но после обновления все пошло наперекосяк, решил снести и установить снова, результат плачевный.... теперь вообще не могу установить модуль! Движок 2.3 вот лог сайта [Mon Jun 05 19:43:14.234928 2017] [:error] [pid 8896] [client 78.29.9.4:34940] PHP Fatal error: Uncaught exception 'Exception' with message 'Error: Duplicate column name 'product_feature_id'<br />Error No: 1060<br />ALTER TABLE `oc_cart` ADD `product_feature_id` INT( 11 ) NOT NULL DEFAULT 0 AFTER `option`' in /home/c/xxx/public_html/system/library/db/mysqli.php:40\nStack trace:\n#0 /home/xxx/xxx/public_html/system/library/db.php(16): DB\\MySQLi->query('ALTER TABLE `o...', Array)\n#1 /home/c/xxx/public_html/admin/controller/extension/module/exchange1c.php(812): DB->query('ALTER TABLE `o...')\n#2 [internal function]: ControllerExtensionModuleExchange1c->install(Array)\n#3 /home/c/xxx/public_html/vqmod/vqcache/vq2-system_storage_modification_system_engine_action.php(51): call_user_func_array(Array, Array)\n#4 /home/c/xxx/public_html/vqmod/vqcache/vq2-system_storage_modification_system_engine_loader.php(24): Action->execute(Object(Registry), Array)\n#5 /home/c/xxx/public_html/admin/contro in /home/c/xxx/public_html/system/library/db/mysqli.php on line 40, referer: http://xxx/admin/index.php?route=extension/extension&token=3bmKhu87YSMU5NFbaAY2ceApVUb7Wo1j Помогите кто знает как решить, буду очень признателен! Надіслати Поділитися на інших сайтах More sharing options...
rutskoifp Опубліковано: 5 червня 2017 Share Опубліковано: 5 червня 2017 (змінено) 1 час назад, rutskoifp сказал: Здравствуйте! Очень нужна помощь! При установке модуля 1.6.3.10 выдает ошибку! Модуль был установлен, но после обновления все пошло наперекосяк, решил снести и установить снова, результат плачевный.... теперь вообще не могу установить модуль! Движок 2.3 вот лог сайта [Mon Jun 05 19:43:14.234928 2017] [:error] [pid 8896] [client 78.29.9.4:34940] PHP Fatal error: Uncaught exception 'Exception' with message 'Error: Duplicate column name 'product_feature_id'<br />Error No: 1060<br />ALTER TABLE `oc_cart` ADD `product_feature_id` INT( 11 ) NOT NULL DEFAULT 0 AFTER `option`' in /home/c/xxx/public_html/system/library/db/mysqli.php:40\nStack trace:\n#0 /home/xxx/xxx/public_html/system/library/db.php(16): DB\\MySQLi->query('ALTER TABLE `o...', Array)\n#1 /home/c/xxx/public_html/admin/controller/extension/module/exchange1c.php(812): DB->query('ALTER TABLE `o...')\n#2 [internal function]: ControllerExtensionModuleExchange1c->install(Array)\n#3 /home/c/xxx/public_html/vqmod/vqcache/vq2-system_storage_modification_system_engine_action.php(51): call_user_func_array(Array, Array)\n#4 /home/c/xxx/public_html/vqmod/vqcache/vq2-system_storage_modification_system_engine_loader.php(24): Action->execute(Object(Registry), Array)\n#5 /home/c/xxx/public_html/admin/contro in /home/c/xxx/public_html/system/library/db/mysqli.php on line 40, referer: http://xxx/admin/index.php?route=extension/extension&token=3bmKhu87YSMU5NFbaAY2ceApVUb7Wo1j Помогите кто знает как решить, буду очень признателен! Решено! Удалил все устанавливаемые модулем таблицы, и изменил изменяемые им значение! модуль установился! Пробуем работать дальше...)))) Единственное, модуль не прописался в админке-во вкладке дополнение! Выгрузка идет порядка 20 мин, выкрузилось все кроме товаров! (УНФ 1.6.10.44) Для справки товаров около 1000 Змінено 5 червня 2017 користувачем rutskoifp Надіслати Поділитися на інших сайтах More sharing options...
Furious Опубліковано: 5 червня 2017 Share Опубліковано: 5 червня 2017 Доброго времени суток. А когда планируете 1.6.3.11? установил 1.6.3.10. обновил на модификатор 1.6.3.11 вами выложенный (не знаю можно ли так ) Ошибка та же: 2017-06-05 22:24:30 - PHP Warning: opendir(/home/***/test/image/cache/import_files/23): failed to open dir: No such file or directory in /home/***/test/admin/model/extension/exchange1c.php on line 3091 2017-06-05 22:24:30 - PHP Warning: readdir() expects parameter 1 to be resource, boolean given in /home/***/test/admin/model/extension/exchange1c.php on line 3092 2017-06-05 22:24:30 - PHP Warning: readdir() expects parameter 1 to be resource, boolean given in /home/***/test/admin/model/extension/exchange1c.php on line 3092 2017-06-05 22:24:30 - PHP Warning: readdir() expects parameter 1 to be resource, boolean given in /home/***/test/admin/model/extension/exchange1c.php on line 3092 2017-06-05 22:24:30 - PHP Warning: readdir() expects parameter 1 to be resource, boolean given in /home/***/test/admin/model/extension/exchange1c.php on line 3092 2017-06-05 22:24:30 - PHP Warning: readdir() expects parameter 1 to be resource, boolean given in 1с УТ3.1 Украина OcStore ocStore 2.3.0.2.2 Шаблон Демо Стабильно работает 1.6.3.9 но без присвоения атрибутов Надіслати Поділитися на інших сайтах More sharing options...
Kirillove Опубліковано: 6 червня 2017 Автор Share Опубліковано: 6 червня 2017 Решено! Удалил все устанавливаемые модулем таблицы, и изменил изменяемые им значение! модуль установился! Пробуем работать дальше...)))) Единственное, модуль не прописался в админке-во вкладке дополнение! Выгрузка идет порядка 20 мин, выкрузилось все кроме товаров! (УНФ 1.6.10.44) Для справки товаров около 1000Многовато для 1000 товаров, на моем сервере вроде было не дольше 5 мин, сегодня вечером уже точно выложу 1.6.3.11 и проверим ещё раз вместе. А лог есть? Очень интересно посмотреть что он там долго делает.Отправлено с моего Power Five Evo через Tapatalk Надіслати Поділитися на інших сайтах More sharing options... Kirillove Опубліковано: 6 червня 2017 Автор Share Опубліковано: 6 червня 2017 Доброго времени суток. А когда планируете 1.6.3.11? установил 1.6.3.10. обновил на модификатор 1.6.3.11 вами выложенный (не знаю можно ли так [emoji4] ) Ошибка та же:2017-06-05 22:24:30 - PHP Warning: opendir(/home/***/test/image/cache/import_files/23): failed to open dir: No such file or directory in /home/***/test/admin/model/extension/exchange1c.php on line 30912017-06-05 22:24:30 - PHP Warning: readdir() expects parameter 1 to be resource, boolean given in /home/***/test/admin/model/extension/exchange1c.php on line 30922017-06-05 22:24:30 - PHP Warning: readdir() expects parameter 1 to be resource, boolean given in /home/***/test/admin/model/extension/exchange1c.php on line 30922017-06-05 22:24:30 - PHP Warning: readdir() expects parameter 1 to be resource, boolean given in /home/***/test/admin/model/extension/exchange1c.php on line 30922017-06-05 22:24:30 - PHP Warning: readdir() expects parameter 1 to be resource, boolean given in /home/***/test/admin/model/extension/exchange1c.php on line 30922017-06-05 22:24:30 - PHP Warning: readdir() expects parameter 1 to be resource, boolean given in 1с УТ3.1 Украина OcStore ocStore 2.3.0.2.2 Шаблон ДемоСтабильно работает 1.6.3.9 но без присвоения атрибутовЭта проблема не в модификаторе, там рядом я функцию выложил заменой которой решит эту проблему сегодня уже точно выложу Навь версию, пришлось тщательно тестироватьОтправлено с моего Power Five Evo через Tapatalk 1 Надіслати Поділитися на інших сайтах More sharing options... 3 р dinox changed the title to Модуль обмена для opencart v2.3 с учетной системой по стандарту CommerceML [Поддержка] Назад 25 26 27 28 29 30 31 32 33 34 35 Вперед Сторінка 30 з 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 080 переглядів Sha 17 листопада 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 427 переглядів 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 061 перегляд 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 832 перегляди Sha 10 березня 2020 фикс [Поддержка] Фикс переполнения лога модификаторов Автор: kabantejay, 7 червня 2023 ocmod модификатор (і ще %d) Теги: ocmod модификатор лог modification log fix 8 відповідей 443 перегляди kabantejay 9 червня 2023 Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку
Kirillove Опубліковано: 6 червня 2017 Автор Share Опубліковано: 6 червня 2017 Доброго времени суток. А когда планируете 1.6.3.11? установил 1.6.3.10. обновил на модификатор 1.6.3.11 вами выложенный (не знаю можно ли так [emoji4] ) Ошибка та же:2017-06-05 22:24:30 - PHP Warning: opendir(/home/***/test/image/cache/import_files/23): failed to open dir: No such file or directory in /home/***/test/admin/model/extension/exchange1c.php on line 30912017-06-05 22:24:30 - PHP Warning: readdir() expects parameter 1 to be resource, boolean given in /home/***/test/admin/model/extension/exchange1c.php on line 30922017-06-05 22:24:30 - PHP Warning: readdir() expects parameter 1 to be resource, boolean given in /home/***/test/admin/model/extension/exchange1c.php on line 30922017-06-05 22:24:30 - PHP Warning: readdir() expects parameter 1 to be resource, boolean given in /home/***/test/admin/model/extension/exchange1c.php on line 30922017-06-05 22:24:30 - PHP Warning: readdir() expects parameter 1 to be resource, boolean given in /home/***/test/admin/model/extension/exchange1c.php on line 30922017-06-05 22:24:30 - PHP Warning: readdir() expects parameter 1 to be resource, boolean given in 1с УТ3.1 Украина OcStore ocStore 2.3.0.2.2 Шаблон ДемоСтабильно работает 1.6.3.9 но без присвоения атрибутовЭта проблема не в модификаторе, там рядом я функцию выложил заменой которой решит эту проблему сегодня уже точно выложу Навь версию, пришлось тщательно тестироватьОтправлено с моего Power Five Evo через Tapatalk 1 Надіслати Поділитися на інших сайтах More sharing options... 3 р dinox changed the title to Модуль обмена для opencart v2.3 с учетной системой по стандарту CommerceML [Поддержка] Назад 25 26 27 28 29 30 31 32 33 34 35 Вперед Сторінка 30 з 205 Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 40
Recommended Posts