Jump to content
Search In
  • More options...
Find results that contain...
Find results in...

herminator

Users
  
  • Posts

    122
  • Joined

  • Last visited

Everything posted by herminator

  1. @RustK , приветствую. Код по умолчанию пишется в SKU. Тоже хочу его видеть в коде товара (модели). Пока так же попробовал "Правило загрузки", но не сработало. Мне пока с частичным пропаданием товаров на этапе разбора xml надо решить, потом наверное этим займусь. UPD: В правилах загрузки нужно написать Артикул ## model . Код товара станет артикулом.
  2. Обнаружилась проблема с загрузкой товаров. В xml выгрузки товар есть, а в логах загрузки модуля - нет. Бум разбираться...
  3. У меня Opencart.cms 3.0.2.0 (rs.4) + Обмен данными с 1C v8.x (Tesla-Chita) 1.6.4.7. Только что выгрузил, наименование обновилось. Товар не добавлял, но думаю тоже добавится.
  4. Возможно, если бы у автора было больше времени, было бы меньше ошибок, допущенных по невнимательности и торопливости. Но уж точно не для того, чтобы всем насолить и поржать, как все мучаются. Попытка перейти на него окончилась возвратом к этому модулю. Сходу начались проблемы, за которые платить деньги как-то странно. Кроме того, в этом модуле уже есть то, что там или доработка за доп.плату, или решение сторонними модулями, желательно платными. Но если ни в зуб ногой и есть деньги, то, конечно, лучше модуль_про_который_нельзя_говорить.
  5. Нашёл интересующую вас строку в exchange1c-related-options.ocmod.xml. Только удаление её, конечно, так себе решение проблемы. Скорее костыль, и довольно корявый. Переходите на новую версию, будем вместе мучаться над новыми проблемами
  6. Значит, их добавляет модификатор exchange1с. У меня просто другая версия модуля, и этой проблемы нет. Зато полно других)) У вас какая версия?
  7. Потому что не надо править кэшированные файлы. Это как минимум странно. Править надо тут: /home/n/nimol6/hookahmafia.ru/public_html/system/storage/modification/catalog/model/checkout/order.php (путь взят из контекста, для непонятливых путь /catalog/model/checkout/order.php), потом обновить модификаторы и сбросить кэш. Лично мне для наглядности внесённых изменений проще написать модификатор. Один раз пишешь, потом добавляешь в него всякое по ходу пьесы.
  8. Извиняюсь, забыл. Чтобы паттерн принимал значение, его нужно добыть из базы данных. В функции 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`" в запрос.
  9. Вообще, я это всё затеял, потому что хотел рабочую генерацию 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'] : '' ); Хотя, это неправильно, т.к. при использовании скидок цена будет неверной. Нужно добавить обработку возможных скидок.
  10. В функции 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);
  11. // Определение дополнительных полей $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');
  12. Функция 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.
  13. Функция seoGenerateCategory: if ($this->config->get('exchange1c_seo_product_'.$field) == 'template') { Вероятно, должно быть: if ($this->config->get('exchange1c_seo_category_'.$field) == 'template') {
  14. "Сформировать SEO" не обновляет seo-поля, хотя показывает количество обработанных товаров и категорий.
  15. Наверное правильнее было бы вставить отключение пустых категорий в функцию importFile.
  16. Решение. Найти в /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'); Вставить вырезанное перед найденным. Пояснение. Отключение пустых категорий после выгрузки товаров бессмысленно, т.к. они сразу же включаются логикой обратно. Отключать пустые категории нужно после выгрузки предложений.
  17. К сожалению, теперь не отключаются категории, в которых отключены все товары.
  18. Итак, господа. В новой версии 1.6.4.7 (да, я скачал ещё раз) отсутствует работа с настройкой product_disable_if_quantity_zero, т.е. настройка "Не показывать товар с нулевым остатком" в админке есть, но что вы там поставите - без разницы. Что интересно, в версии 1.6.4.4b15 настройка обрабатывается в коде вполне логично и успешно: Соответственно, добавил в /admin/model/extension/exchange1c.php: Честно не понимаю, почему все молчат - то ли сидят на старых версиях, то ли у меня одного лыжи не ехали, потому что ЛЫЖ НЕ БЫЛО.
  19. Граждане-товарищи, Opencart.cms 3.0.2.0 (rs.4) + Обмен данными с 1C v8.x (Tesla-Chita) 1.6.4.7, не срабатывают опции "Не показывать товар с нулевым остатком" и "Не показывать товар с нулевой ценой" ни в каких видах и вариантах. Есть решение? К автору модуля ОГРОМНАЯ просьба убрать отрицания отрицания типа "Не изменять описания товара: Да Нет" и "Не изменять категории товара: Да Нет". Голова от них кругом... Соответственно придётся менять и данет местами... Мало надежды, что автор найдёт на это время, но она теплится... Присоединяюсь.
    Замечательно работает на opencart.cms 2.3 и opencart 3.0.2.0 RS. Удобно!
  20. Да, именно так, заменил yandex_sitemap_status на feed_yandex_sitemap_status в контроллере и представлении админки. Update : Модуль внезапно заработал. Дико извиняюсь за отнятое время.
  21. Ну "отключено", допустим, заборол по информации от @chukcha и аналогии с кодом базового модуля google_sitemap. Но сайтмап не создаётся, пусто по ссылке у меня почему-то. До исправлений тоже не работало. Файлы переносил как все скопом, так и по одному. Всё делал по инструкции, про права, естественно, не забыл...
  22. С Вашего позволения, так ocmod можно написать? Или моветон? <file path="system/config/catalog.php"> <operation> <search><![CDATA[ 'controller/*/after' => array( ]]></search> <add position="replace" offset="2"><![CDATA[ ]]></add> </operation> </file> <file path="system/config/catalog.php"> <operation> <search><![CDATA['event/debug/after']]></search> <add position="before"><![CDATA[ 0 => 'event/language/after', 1 => ]]></add> </operation> </file>
×
×
  • Create New...

Important Information

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