Jump to content

ILexus

Новичок
  • Content Count

    37
  • Joined

  • Last visited

Community Reputation

4 Обычный

About ILexus

  • Rank
    Пользователь

Recent Profile Visitors

801 profile views
  1. Ответ был дан автору вопроса. Проблема самого движка. Я указал на свое сообщение, т.к. данная проблема уже поднималась и модуль тут не причем. По ссылке есть информация которая ведет на тему с решением данной проблемы на уровне движка.
  2. @Rassol2 Приветствую. Мне мои поставщики постоянно выкручивают яйца со своими изменениями на их веб ресурсах. То что вчера парсинг с обновлением цен и остатков работал как часы, сегодня уже нет. Приходится изгаляться. Ранее поставщик отображал на сайте общее количество товара на их складах, теперь он отображает разное количество в разных филиалах. А мне нужно общее, но я не могу загнать в остатки несколько значений. Мне нужно сначала их сложить Есть возможность реализовать математические операции нескольких границ парсинга? Само собой это должно работать только с численными значениями и только в поле количество. Что то типа такого: {gran_177}{+}{gran_178}{+}{gran_179} Еще нужно логическое ИЛИ {|} в "Количество товара" по аналогии с "Ценой товара".
  3. Что то не могу понять, второе задание ни в какую не хочет стартовать в 18:00. Вроде логика прописана верно. Первое задание работает исправно. UPD.Если прописать например 18-23 работает. Получается, что с До полуночи на После полуночи не работает.
  4. @Rassol2 А можно тогда реализовать выполнение заданий попеременно в одном потоке? Допустим если у всех заданий Порядок выполнения стоит 0, Время выполнения позволяет выполняться всем заданиям, тогда выполнять каждое задание попеременно по одной ссылки за раз. Тогда это решило бы все задачи. А кому надо выполнять задания по очереди, после завершения конкретного, пусть ставят приоритеты, т.е. разный порядок выполнения. Вот ты сам поставь себя на мое место. Как бы ты тогда реализовал автоматизацию данного процесса? Я выкручиваюсь как могу. Каждый раз подсовывать новые данные авторизации для парсинга это можно и вручную, но тогда весь смысл крона пропадает! Хочется запустил и забыл.
  5. Авторизация не слетает, если как минимум 1 раз в 1,5 часа делать хотя бы 1 запрос на сайте поставщика. Видимо после каждого запроса обнуляется счетчик очищения сессии куки. Я уже протестировал все работает, если парсить круглосуточно. Я не могу другие задании крон запустить, т.к. одно задание должно парсить без остановки! Очень прошу, реализуй пожалуйста возможность запускать несколько заданий крон одновременно. Ведь не проблема запускать несколько sp_cron.php. Главное чтобы каждому заданию свой крон соответствовал. Я бы сам покопался, но ты закубил sp_cron.php Можно поподробней? Модуль сам будет подставлять логин и пароль в форме авторизации?
  6. @Rassol2 Уважаемый разработчик. Есть ли возможность запустить несколько заданий по крону одновременно? А не по очереди. Проблема в том что у одного поставщика, парсить данные приходиться через авторизацию, но эта авторизация слетает после 1,5 часа бездействия, и поочередное выполнение нескольких заданий в данном случае не возможно. Соответственно для полной автоматизации необходимо постоянно поддерживать связь с сайтом поставщика. Планируется что данные с этого поставщика будут парситься с большими паузами(в тех пределах чтобы авторизация не слетала), но круглосуточно, без перерывов. Главное чтобы данные актуализировались без моего вмешательства.
  7. Готовое решение На стековерфлоу посоветовали достать данные через таблицу oc_product. Не знаю кому может пригодится, но все же оставлю здесь. Спасибо всем кто пытался помочь Функция getProductSpecials $sql = "SELECT DISTINCT p.product_id, ( SELECT AVG(rating) FROM " . DB_PREFIX . "review r1 WHERE r1.product_id = ps.product_id AND r1.status = '1' GROUP BY r1.product_id) AS rating FROM " . DB_PREFIX . "product p LEFT JOIN " . DB_PREFIX . "product_special ps ON (ps.product_id = p.product_id) LEFT JOIN " . DB_PREFIX . "product_description pd ON (p.product_id = pd.product_id) LEFT JOIN " . DB_PREFIX . "product_to_store p2s ON (p.product_id = p2s.product_id) WHERE p.status = '1' AND p.date_available <= NOW() AND (ps.customer_group_id = '" . (int)$this->config->get('config_customer_group_id') . "' OR p.fake_special > '0') AND (((ps.date_start = '0000-00-00' OR ps.date_start < NOW()) AND (ps.date_end = '0000-00-00' OR ps.date_end > NOW())) OR p.fake_special > '0') GROUP BY p.product_id"; Функция getTotalProductSpecials $query = $this->db->query(" SELECT COUNT(DISTINCT p.product_id) AS total FROM " . DB_PREFIX . "product p LEFT JOIN " . DB_PREFIX . "product_special ps ON (ps.product_id = p.product_id) LEFT JOIN " . DB_PREFIX . "product_to_store p2s ON (p.product_id = p2s.product_id) WHERE p.status = '1' AND p.date_available <= NOW() AND p2s.store_id = '" . (int)$this->config->get('config_store_id') . "' AND (ps.customer_group_id = '" . (int)$this->config->get('config_customer_group_id') . "' OR p.fake_special > '0') AND (((ps.date_start = '0000-00-00' OR ps.date_start < NOW()) AND (ps.date_end = '0000-00-00' OR ps.date_end > NOW())) OR p.fake_special > '0')");
  8. Да я пробовал так объединить под общим SELECT $sql = "SELECT * FROM (SELECT ps.product_id, ( SELECT AVG(rating) FROM " . DB_PREFIX . "review r1 WHERE r1.product_id = ps.product_id AND r1.status = '1' GROUP BY r1.product_id) AS rating FROM " . DB_PREFIX . "product_special ps LEFT JOIN " . DB_PREFIX . "product p ON (ps.product_id = p.product_id) LEFT JOIN " . DB_PREFIX . "product_description pd ON (p.product_id = pd.product_id) LEFT JOIN " . DB_PREFIX . "product_to_store p2s ON (p.product_id = p2s.product_id) WHERE p.status = '1' AND p.date_available <= NOW() AND p2s.store_id = '" . (int)$this->config->get('config_store_id') . "' AND ps.customer_group_id = '" . (int)$this->config->get('config_customer_group_id') . "' AND ((ps.date_start = '0000-00-00' OR ps.date_start < NOW()) AND (ps.date_end = '0000-00-00' OR ps.date_end > NOW())) GROUP BY ps.product_id UNION SELECT p.product_id, ( SELECT AVG(rating) FROM " . DB_PREFIX . "review r1 WHERE r1.product_id = p.product_id AND r1.status = '1' GROUP BY r1.product_id) AS rating FROM " . DB_PREFIX . "product p LEFT JOIN " . DB_PREFIX . "product_description pd ON (p.product_id = pd.product_id) LEFT JOIN " . DB_PREFIX . "product_to_store p2s ON (p.product_id = p2s.product_id) WHERE p.status = '1' AND p.fake_special > '0' AND p.date_available <= NOW() AND p2s.store_id = '" . (int)$this->config->get('config_store_id') . "' GROUP BY p.product_id) t ORDER BY p.sort_order"; Fatal error: Uncaught Exception: Error: Unknown column 'p.sort_order' in 'order clause'
  9. Что последний?) Я конечно могу додумывать иногда, но в данном случае в замешательстве)
  10. Спасибо за совет, получилось объединить два SELECT с помощью UNION, дополнительные товары вывелись. Правда не знаю правильно ли использовал UNION $sql = "SELECT ps.product_id, ( SELECT AVG(rating) FROM " . DB_PREFIX . "review r1 WHERE r1.product_id = ps.product_id AND r1.status = '1' GROUP BY r1.product_id) AS rating FROM " . DB_PREFIX . "product_special ps LEFT JOIN " . DB_PREFIX . "product p ON (ps.product_id = p.product_id) LEFT JOIN " . DB_PREFIX . "product_description pd ON (p.product_id = pd.product_id) LEFT JOIN " . DB_PREFIX . "product_to_store p2s ON (p.product_id = p2s.product_id) WHERE p.status = '1' AND p.date_available <= NOW() AND p2s.store_id = '" . (int)$this->config->get('config_store_id') . "' AND ps.customer_group_id = '" . (int)$this->config->get('config_customer_group_id') . "' AND ((ps.date_start = '0000-00-00' OR ps.date_start < NOW()) AND (ps.date_end = '0000-00-00' OR ps.date_end > NOW())) GROUP BY ps.product_id UNION SELECT p.product_id, ( SELECT AVG(rating) FROM " . DB_PREFIX . "review r1 WHERE r1.product_id = p.product_id AND r1.status = '1' GROUP BY r1.product_id) AS rating FROM " . DB_PREFIX . "product p LEFT JOIN " . DB_PREFIX . "product_description pd ON (p.product_id = pd.product_id) LEFT JOIN " . DB_PREFIX . "product_to_store p2s ON (p.product_id = p2s.product_id) WHERE p.status = '1' AND p.fake_special > '0' AND p.date_available <= NOW() AND p2s.store_id = '" . (int)$this->config->get('config_store_id') . "' GROUP BY p.product_id"; Но вылезла проблема с сортировкой, при ORDER BY p.sort_order например, вылезает ошибка Fatal error: Uncaught Exception: Error: Table 'p' from one of the SELECTs cannot be used in field list Не получается объединить оба SELECT под одним ORDER BY.
  11. Спасибо за ответ. Да действительно, мы ведь получаем данные из oc_product_special, а там не могут быть товары у которых не прописаны акции. Тогда к сожалению моих знаний не хватает, чтобы реализовать данную хотелку. Если только кто нибудь подскажет, как правильно и лучше сделать.
  12. Всем привет. Помогите разобраться. Дано: Имеется функция getProductSpecials в catalog/model/catalog/product.php Используется для вывода товаров на странице с акциями. Задача: Необходимо дополнительно вывести на странице с акциями, товары, у которых поле fake_special > 0 в oc_product Поле есть, в карточке товара значение больше 0. Но никак не получается вывести данные товары. Попытки вставить p.fake_special > '0' в SQL запрос не увенчались успехом. Не могу понять в чем причина. Вставлял по разному, через AND и OR, все равно не проходит проверку. Отображается только если в карточке товара прописана Акция. Код оригинал $sql = "SELECT DISTINCT ps.product_id, ( SELECT AVG(rating) FROM " . DB_PREFIX . "review r1 WHERE r1.product_id = ps.product_id AND r1.status = '1' GROUP BY r1.product_id) AS rating FROM " . DB_PREFIX . "product_special ps LEFT JOIN " . DB_PREFIX . "product p ON (ps.product_id = p.product_id) LEFT JOIN " . DB_PREFIX . "product_description pd ON (p.product_id = pd.product_id) LEFT JOIN " . DB_PREFIX . "product_to_store p2s ON (p.product_id = p2s.product_id) WHERE p.status = '1' AND p.date_available <= NOW() AND p2s.store_id = '" . (int)$this->config->get('config_store_id') . "' AND ps.customer_group_id = '" . (int)$this->config->get('config_customer_group_id') . "' AND ((ps.date_start = '0000-00-00' OR ps.date_start < NOW()) AND (ps.date_end = '0000-00-00' OR ps.date_end > NOW())) GROUP BY ps.product_id"; Вот так по идеи должно работать, но нет. Видимо что то упускаю. $sql = "SELECT DISTINCT ps.product_id, ( SELECT AVG(rating) FROM " . DB_PREFIX . "review r1 WHERE r1.product_id = ps.product_id AND r1.status = '1' GROUP BY r1.product_id) AS rating FROM " . DB_PREFIX . "product_special ps LEFT JOIN " . DB_PREFIX . "product p ON (ps.product_id = p.product_id) LEFT JOIN " . DB_PREFIX . "product_description pd ON (p.product_id = pd.product_id) LEFT JOIN " . DB_PREFIX . "product_to_store p2s ON (p.product_id = p2s.product_id) WHERE p.status = '1' AND p.date_available <= NOW() AND p2s.store_id = '" . (int)$this->config->get('config_store_id') . "' AND ((ps.customer_group_id = '" . (int)$this->config->get('config_customer_group_id') . "') OR p.fake_special > '0') AND (((ps.date_start = '0000-00-00' OR ps.date_start < NOW()) AND (ps.date_end = '0000-00-00' OR ps.date_end > NOW())) OR (p.fake_special > '0')) GROUP BY ps.product_id";
  13. https://opencartforum.com/topic/102992-oshibka-sitemap-roditelskiy-teg-url-teg-lastmod-znachenie-0001-11-30/ Оказывается это проблема существует давно, проблема в самом движке. Странно, что до парсинга с ней не сталкивался. По сути лучше добавить, хуже не будет. Использую округление до целого числа. Но бывают мелкие товары, преимущественно стоимость которых до 10 руб, использую до десятых.
×

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.