Перейти к публикации
Поиск в
  • Дополнительно...
Искать результаты, содержащие...
Искать результаты в...

herminator

Пользователи
  
  • Публикаций

    122
  • Зарегистрирован

  • Посещение

Все публикации пользователя 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>
×
×
  • Создать...

Важная информация

На нашем сайте используются файлы cookie и происходит обработка некоторых персональных данных пользователей, чтобы улучшить пользовательский интерфейс. Чтобы узнать для чего и какие персональные данные мы обрабатываем перейдите по ссылке. Если Вы нажмете «Я даю согласие», это означает, что Вы понимаете и принимаете все условия, указанные в этом Уведомлении о Конфиденциальности.