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

Модуль Модуль обмена для opencart v2.3 по стандарту CommerceML [Поддержка]


Recommended Posts

В ‎04‎.‎04‎.‎2019 в 23:37, wwizard сказал:

Т.е. с таким кодом он не хочет. Какие у меня еще есть варианты? Файл приложил.

exchange1c.php 311 \u043a\u0411 · 0 downloads

 

Вот каждый раз смотрю на очередного радостного участника форума в этой теме, уговариваю себя сдерживаться и не всегда это получается. :)

Скажите, вы ради чего обрекаете себя на мучения с этим модулем?

У вас много времени, вы никак не стеснены в деньгах и можете полностью отдаться хобби?

 

За три года здесь толком ничего не заработало, огромное количество новичков на форуме потыркалось с ним и махнуло рукой. Странно думать, что именно у вас будет как-то по другому. Не тратьте попусту ваше время.

Змінено користувачем IronMann
Надіслати
Поділитися на інших сайтах


Граждане-товарищи, Opencart.cms 3.0.2.0 (rs.4) + Обмен данными с 1C v8.x (Tesla-Chita) 1.6.4.7, не срабатывают опции "Не показывать товар с нулевым остатком" и "Не показывать товар с нулевой ценой" ни в каких видах и вариантах. Есть решение?

 

Спойлер

Поискав в коде, нашёл использование product_disable_if_quantity_zero только в parseProducts, где нет ничего, кроме


            if ($this->config->get('exchange1c_product_disable_if_price_zero') == 1 || $this->config->get('exchange1c_product_disable_if_quantity_zero') == 1) {
                $data['status'] = 0;
            }

Что по идее аналогично отключению всех товаров при загрузке.

 

Что касается product_disable_if_price_zero, настройка упоминается в parseOffers, но товар не отключает при нулевой цене. Продолжаю наблюдение...

 

К автору модуля ОГРОМНАЯ просьба убрать отрицания отрицания типа "Не изменять описания товара: Да Нет" и "Не изменять категории товара: Да Нет". Голова от них кругом... Соответственно придётся менять и данет местами... Мало надежды, что автор найдёт на это время, но она теплится...

 

В 03.04.2019 в 20:05, RustK сказал:

Он существует! ))) Виталий, добавь пожалуйста паттерн "цена" в сео. Что-то еще хотел... но забыл уже)))

Присоединяюсь.

Змінено користувачем herminator
Надіслати
Поділитися на інших сайтах


Итак, господа. В новой версии 1.6.4.7 (да, я скачал ещё раз) отсутствует работа с настройкой product_disable_if_quantity_zero, т.е. настройка "Не показывать товар с нулевым остатком" в админке есть, но что вы там поставите - без разницы.

 

Что интересно, в версии 1.6.4.4b15 настройка обрабатывается в коде вполне логично и успешно:

Спойлер

			// СТАТУС
			// Если статус не нужно изменять читаем старый статус
			if ($this->config->get('exchange1c_product_status_no_change')) {
				$data['status'] = $old_product['status'];

			} else {
				// Отключаем товар если остаток меньше или равен 0
				if ($this->config->get('exchange1c_product_disable_if_quantity_zero') == 1 && $data['quantity'] <= 0) {
					$data['status'] = 0;
					$this->log("Товар с нулевым остатком или меньше нуля - отключен");
				}
				if ($offer->ПометкаУдаления) {
					if ((string)$offer->ПометкаУдаления == 'true') {
						$data['status'] = 0;
					}
				}
			}

 

 

Соответственно, добавил в /admin/model/extension/exchange1c.php:

Спойлер

			// ОСТАТКИ
			if ($this->config->get('exchange1c_export_system') == '1c_ut10.3') {
				$data['quantity'] = 0;
			}
			if ($offer->Остатки || $offer->Количество || $offer->Склад) {
				$data['quantity'] = $this->parseQuantity($offer, $data);
				// Отключаем товар если стоит настройка и остаток меньше или равен 0    <- От сих
				if ($this->config->get('exchange1c_product_disable_if_quantity_zero') == 1 && $data['quantity'] <= 0) {
					$data['status'] = 0;
					$this->log("Товар с нулевым остатком или меньше нуля - отключен", 2);
				}	//	<- До сих
				if ($this->ERROR) return $num_offer;
			}

Лишние строки в примере для наглядности и простоты поиска. Не забываем сохранять оригинал exchange1c.php, а также, про сохранение в UTF-8 после своих шаловливых рук. Если что - логи в помощь.

 

Честно не понимаю, почему все молчат - то ли сидят на старых версиях, то ли у меня одного лыжи не ехали, потому что ЛЫЖ НЕ БЫЛО.

  • +1 1
Надіслати
Поділитися на інших сайтах


10 часов назад, herminator сказал:

К сожалению, теперь не отключаются категории, в которых отключены все товары.

Решение. Найти в /admin/model/extension/exchange1c.php

// После загрузки каталога проверим на пустые папки и отключим их

Вырезать:

		// После загрузки каталога проверим на пустые папки и отключим их
		if ($this->config->get('exchange1c_category_empty_disable') == 1) {
			$count_disable = $this->disableCategoriesEmpty();
			$this->log("Отключено пустых категорий: " . $count_disable);
		}

Найти там же:

		$this->logStat('offers');

Вставить вырезанное перед найденным.

 

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

Змінено користувачем herminator
  • +1 2
Надіслати
Поділитися на інших сайтах


"Сформировать SEO" не обновляет seo-поля, хотя показывает количество обработанных товаров и категорий.

  • +1 1
Надіслати
Поділитися на інших сайтах


Функция seoGenerateCategory:

			if ($this->config->get('exchange1c_seo_product_'.$field) == 'template') {

Вероятно, должно быть:

			if ($this->config->get('exchange1c_seo_category_'.$field) == 'template') {

 

  • +1 1
Надіслати
Поділитися на інших сайтах


Функция seoGenerate,

// Категории
...
			if ($query->num_rows) {
				foreach ($query->rows as $data) {

					$result['category']++;
					$data_old = $data; <- ОТСУТСТВОВАЛО
					if ($this->config->get('exchange1c_seo_category_mode') != 'disable')
						$this->seoGenerateCategory($data['category_id'], $data);

					// Сравнение
					$update_fields = $this->compareArraysData($data_old, $data, $no_update_description);

Из-за этого происходило необъяснимое присвоение некоторым категориям имени одного из товаров при ручном формировании seo.

Змінено користувачем herminator
  • +1 1
Надіслати
Поділитися на інших сайтах


// Определение дополнительных полей
        $this->TAB_FIELDS = $this->config->get('exchange1c_table_fields');

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

 

Соответственно, при использовании TAB_FIELDS, его нужно получать.

	private function seoGenerateProduct($product_id, $data) {

		$result = array();
   		// Определение дополнительных полей
		$this->TAB_FIELDS = $this->config->get('exchange1c_table_fields');

 

  • +1 1
Надіслати
Поділитися на інших сайтах


В функции seoGenerate

	 				$data_old = $data; <- Не понял, зачем, убрал.
	 				if ($this->config->get('exchange1c_seo_product_mode') != 'disable')
						$update = $this->seoGenerateProduct($data['product_id'], $data);

					if (!$update)
						continue;

					// Сравнение
					$no_update = array('sku','model','manufacturer_id');
					$update_fields = $this->compareArraysData($data_old, $data, $no_update); <- Так не работает

					// Если есть что обновлять
					if ($update_fields) {
						$sql_set = $this->prepareQuery($update_fields, 'set');
						$this->query("UPDATE `" . DB_PREFIX . "product` SET " . $sql_set . ", `date_modified` = '" . $now . "' WHERE `product_id` = " . (int)$data['product_id']);
					}

					// Сравнение
					$update_fields = $this->compareArraysData($data_old, $data, $no_update_description); <- Так не работает                                                                                                

Так работает правильно:

					$update_fields = $this->compareArraysData($update, $data, $no_update);

					// Если есть что обновлять
					if ($update_fields) {
						$sql_set = $this->prepareQuery($update_fields, 'set');
						$this->query("UPDATE `" . DB_PREFIX . "product` SET " . $sql_set . ", `date_modified` = '" . $now . "' WHERE `product_id` = " . (int)$data['product_id']);
					}

					// Сравнение
					$update_fields = $this->compareArraysData($update, $data, $no_update_description);

Там же чуть дальше при работе с категориями:

					$update_fields = $this->compareArraysData($data_old, $data, $no_update_description);

Но это не может работать, т.к. функция private function compareArraysData(&$data_new, $data_old, $ignore_fields = array(), $merge = true) принимает значения в порядке "новое, старое", а не наоборот.

 

Так работает:

$update_fields = $this->compareArraysData($data, $data_old, $no_update_description);

 

Змінено користувачем herminator
  • +1 1
Надіслати
Поділитися на інших сайтах


В 03.04.2019 в 20:05, RustK сказал:

Он существует! ))) Виталий, добавь пожалуйста паттерн "цена" в сео. Что-то еще хотел... но забыл уже)))

Вообще, я это всё затеял, потому что хотел рабочую генерацию SEO полей и паттерн "цена", который добавлен, и работает. Но во время выгрузки обнуляются цены, поэтому генерацию SEO в режиме автоматической выгрузки нужно выносить ПОСЛЕ разбора предложений (когда цены внесены в товары).

 

В функции seoGenerateProduct:

		$data['price'] = strtok((float)$data['price'], '.');

		// Сопоставляем значения к паттернам
		$tags = array(
			'{name}'		=> isset($data['name']) 			? $data['name']					: '',
			'{sku}'			=> isset($data['sku'])				? $data['sku']					: '',
			'{model}'		=> isset($data['model'])			? $data['model']				: '',
			'{price}'		=> isset($data['price'])			? $data['price']				: '',
			'{brand}'		=> isset($data['manufacturer'])		? $data['manufacturer']['name'] : '',
			'{cats}'		=> $this->getProductCategoriesString($product_id),
			'{prod_id}'		=> isset($product_id)				? $product_id					: '',
			'{cat_id}'		=> isset($data['category_id'])		? $data['category_id']			: ''
		);

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

Надіслати
Поділитися на інших сайтах


Извиняюсь, забыл. Чтобы паттерн принимал значение, его нужно добыть из базы данных. В функции seoGenerate нужно найти

			if (isset($this->TAB_FIELDS['product_description']['meta_h1'])) {
				$sql = "SELECT `p`.`product_id`, `p`.`sku`, `p`.`model`, `p`.`manufacturer_id`, `pd`.`name`, `pd`.`tag`, `pd`.`meta_title`, `pd`.`meta_description`, `pd`.`meta_keyword`, `pd`.`meta_h1` FROM `" . DB_PREFIX . "product` `p` LEFT JOIN `" . DB_PREFIX . "product_description` `pd` ON (`p`.`product_id` = `pd`.`product_id`) WHERE `pd.`language_id` = " . $language_id;
			} else {
				$sql = "SELECT `p`.`product_id`, `p`.`sku`, `p`.`model`, `p`.`manufacturer_id`, `pd`.`name`, `pd`.`tag`, `pd`.`meta_title`, `pd`.`meta_description`, `pd`.`meta_keyword` FROM `" . DB_PREFIX . "product` `p` LEFT JOIN `" . DB_PREFIX . "product_description` `pd` ON (`p`.`product_id` = `pd`.`product_id`) WHERE `pd`.`language_id` = " . $language_id;
				array_push($no_update_description, 'meta_h1');
			}

И заменить на

			if (isset($this->TAB_FIELDS['product_description']['meta_h1'])) {
				$sql = "SELECT `p`.`product_id`, `p`.`sku`, `p`.`model`, `p`.`price`, `p`.`manufacturer_id`, `pd`.`name`, `pd`.`tag`, `pd`.`meta_title`, `pd`.`meta_description`, `pd`.`meta_keyword`, `pd`.`meta_h1` FROM `" . DB_PREFIX . "product` `p` LEFT JOIN `" . DB_PREFIX . "product_description` `pd` ON (`p`.`product_id` = `pd`.`product_id`) WHERE `pd.`language_id` = " . $language_id;
			} else {
				$sql = "SELECT `p`.`product_id`, `p`.`sku`, `p`.`model`, `p`.`price`, `p`.`manufacturer_id`, `pd`.`name`, `pd`.`tag`, `pd`.`meta_title`, `pd`.`meta_description`, `pd`.`meta_keyword` FROM `" . DB_PREFIX . "product` `p` LEFT JOIN `" . DB_PREFIX . "product_description` `pd` ON (`p`.`product_id` = `pd`.`product_id`) WHERE `pd`.`language_id` = " . $language_id;
				array_push($no_update_description, 'meta_h1');
			}

В смысле добавить ", `p`.`price`" в запрос.

  • +1 1
Надіслати
Поділитися на інших сайтах


В 05.03.2019 в 13:30, AzaZzell сказал:

Сделано

для исправления ошибки просто удаляем часть коды и файла order.php

16  и 64 строки

, unit_id = '" . (int)$product['product_unit_id'] . "'

после чего заработает )

спасибо автору за модуль

После обновления модификаторов строки возвращаются, решение оказалось временным.

Может быть есть у кого светлые мысли?)

  • +1 1
Надіслати
Поділитися на інших сайтах


5 часов назад, AzaZzell сказал:

После обновления модификаторов строки возвращаются, решение оказалось временным.

Может быть есть у кого светлые мысли?)

Потому что не надо править кэшированные файлы. Это как минимум странно. Править надо тут: /home/n/nimol6/hookahmafia.ru/public_html/system/storage/modification/catalog/model/checkout/order.php (путь взят из контекста, для непонятливых путь /catalog/model/checkout/order.php), потом обновить модификаторы и сбросить кэш.

 

Лично мне для наглядности внесённых изменений проще написать модификатор. Один раз пишешь, потом добавляешь в него всякое по ходу пьесы.

Змінено користувачем herminator
  • +1 1
Надіслати
Поділитися на інших сайтах


3 часа назад, herminator сказал:

Потому что не надо править кэшированные файлы. Это как минимум странно. Править надо тут: /home/n/nimol6/hookahmafia.ru/public_html/system/storage/modification/catalog/model/checkout/order.php (путь взят из контекста, для непонятливых путь /catalog/model/checkout/order.php), потом обновить модификаторы и сбросить кэш.

 

Лично мне для наглядности внесённых изменений проще написать модификатор. Один раз пишешь, потом добавляешь в него всякое по ходу пьесы.

я пока не настолько специалист )
в приведенном оригинальном файле нет таких строк, поправить там нечего.

Змінено користувачем AzaZzell
Надіслати
Поділитися на інших сайтах


Значит, их добавляет модификатор exchange1с. У меня просто другая версия модуля, и этой проблемы нет. Зато полно других)) У вас какая версия?

Надіслати
Поділитися на інших сайтах


15 часов назад, herminator сказал:

Значит, их добавляет модификатор exchange1с. У меня просто другая версия модуля, и этой проблемы нет. Зато полно других)) У вас какая версия?

Это пока единственная проблема которая осталась нерешенной )

1.6.4.1

Надіслати
Поділитися на інших сайтах


Нашёл интересующую вас строку в exchange1c-related-options.ocmod.xml. Только удаление её, конечно, так себе решение проблемы. Скорее костыль, и довольно корявый.

 

Переходите на новую версию, будем вместе мучаться над новыми проблемами;-)

Змінено користувачем herminator
Надіслати
Поділитися на інших сайтах


1 час назад, nikifalex сказал:

вы просто его не умеете готовить.

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

1 час назад, nikifalex сказал:

И тот самый модуль_про_который_нельзя_говорить.

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

Надіслати
Поділитися на інших сайтах


6 часов назад, nikifalex сказал:

Автор идейный альтруист? Я его неочень понимаю. Модуль бесплатный. В личку ему можно писать сколько угодно с просьбами платно помочь но все бестолку. Он вечно занят.

Кто в курсе что там?

 

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

 

Если на типовой непиленой конфигурации и чистой установке магазина, модуль не работает - значит, он НЕ РАБОТАЕТ. Его бесплатность уже вторична. Кто не хочет есть пищу затрачивая на неё деньги, может бесплатно есть фекалии из помойки - ведь бесплатно же... Т.е., констатируем факт - модуль из данной темы НЕ РАБОТАЕТ. И работать никогда не будет. Я это год назад сказал, повторяю сейчас и более чем уверен, что еще через год всё будет абсолютно так-же: нормально работать модуль не будет, будет только делать вид, показывая завлекательные странички и при попытке его задействовать в реальной работе - валиться от любого чиха, если повезет его первично стартовать. Так же, на что собственно все это и расчитано, в тему будут стабильно приходить новички, покупаясь на "бесплатность" данного модуля и особо несчастная и наивная их часть - будет пытаться платить автору данного модуля деньги, чтобы он заработал. Просто совет им - ну не делайте этого, не развращайте хитреца.

Змінено користувачем IronMann
Надіслати
Поділитися на інших сайтах


8 часов назад, nikifalex сказал:

вы просто его не умеете готовить.

Когда-то давным давно был еще модуль под 1.5 он был единственный и бесплатный. Он почти не работал, но зато он легко модифицировался прямыми руками.

Каждый его брал и пилил под себя. И все у всех работало. И стоило это ну тыщ 10-20 под ключ.

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

Осталось только два модуля сейчас: Собственно этот, да в нем стало в десятки раз больше возможностей но и в десятки раз больше глюков. Но суть осталась неизменная - берите и пилите под себя. даже стоимость не возрасла. не умеете пилить - закажите распил. И никаких обновлений не ставьте.

И тот самый модуль_про_который_нельзя_говорить. Он платный но это ерунда,  с ним проблема в том, что он требует на порядок большего бюджета на доработки, и риски с ним гораздо выше. Зато если у вас реально много денег, вам будет его пилить хоть сам автор по телефону под эротическую музыку.

 

 

Модуль давным-давно был модуль Зенвалкера, под 1.5. Он и сейчас живет в своей теме, как раритет.

 

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

 

Я как-то задался вопросом, ну почему до сих пор для опенкарта нет нормального модуля? Да потому, что рынка нет. Все ждут халяву. В итоге же платят десятки тысяч, но сознание, что в начале "скачал бесплатно", не дает, видимо, понять, что это разводка такая.

 

Из тех модулей, в которых видна работа с большой буквы, я бы отметил модуль M-IT под 1С, но его, похоже, забросили, т.к. рынка сбыта нет нормального. Еще есть Юнимодуль, который было бы очень интересно пощупать, но платить просто за любознательность 16 т.р., не хочется.

Змінено користувачем IronMann
Надіслати
Поділитися на інших сайтах


Добрый день. Проблема состоит в том, что в opencart  2.3 не обновляется наименование товара,которое было изменено в 1с, однако в файлах импорта имя правильное,  и не добавляется новый товар. В настройках модуля включено все, что нужно. Версия модуля 1.6.4.7. Подскажите, что поправить или рабочию версию модуля. Спасибо

Надіслати
Поділитися на інших сайтах


  • dinox changed the title to Модуль обмена для opencart v2.3 с учетной системой по стандарту CommerceML [Поддержка]

Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз

×
×
  • Створити...

Important Information

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