gepo

Экспорт в YML Яндекс.Маркет для большого количества товаров

281 сообщение в этой теме

Интересное решение.

Но что-то я ну никак не пойму как использование обычного итератора позволит выгрузить сотни тысяч товаров? Фактически мы экономим только 1 цикл, так как вместо обхода всего результата в методе query, мы возвращаем итератор. После чего в модели или контроллере получаем нужные позиции через тот же mysql_fetch_assoc() :

public function current ( ) {

return mysql_fetch_assoc($this->resource);

}

0

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах

Дело в том, что в классическом варианте работа происходит так:

  • Все товары загружаются в память
  • В памяти создается весь YML файл
  • Из памяти YML выводится в браузер

В случае с итератором:

  1. Товары по одному загружаются в память и предложение по ним записывается в файл на диске.
  2. После окончания работы в браузер выводится содержимое YML файла.

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

Когда товаров много, оригинальный скрипт падал как раз на том самом цикле загрузке всех товаров в память из БД.

1

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах

Все, понял, спасибо :) Когда бегло смотрел код на fwrite не обратил внимания.

Также хочется отметить качество кода, оформленного про всем правилам phpdoc со всеми @param, @return, TODO итд, редко такой код видишь в опенкарт модулях.

0

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах

1. Товары по одному загружаются в память и предложение по ним записывается в файл на диске.

12 тыс дисковых операций? Я бы кешировал и хотя бы по 50-100 шт выводил в файл одной записью. А то и больше.

0

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах

12 тыс дисковых операций? Я бы кешировал и хотя бы по 50-100 шт выводил в файл одной записью. А то и больше.

Это вроде как должно делатся на уровне операционной системы. Количество дисковых операций должно быть меньше, чем вызовов fwrite.

0

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах

12 тыс дисковых операций? Я бы кешировал и хотя бы по 50-100 шт выводил в файл одной записью. А то и больше.

Хотя скорее всего вы правы. На это есть открытый баг: https://bugs.php.net/bug.php?id=61168

Сейчас внесу исправления.

0

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах

Хотя скорее всего вы правы. На это есть открытый баг: https://bugs.php.net/bug.php?id=61168

Сейчас внесу исправления.

Выложил новую версию, в ней вывод буферизируется.

0

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах

А для 1.5.5.1 не планируется ? а то не идет он на новой версии, не появляется в Каналы Продвижения пунктик

0

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах

А для 1.5.5.1 не планируется ? а то не идет он на новой версии, не появляется в Каналы Продвижения пунктик

интересно, не ставил еще. Смогу посмотреть через пару дней.

0

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах

А для 1.5.5.1 не планируется ? а то не идет он на новой версии, не появляется в Каналы Продвижения пунктик

Скопировал недостающие файлы, теперь работает и в Oc 1.5.5 (проверил).

1

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах

Добрый день как запускать его?

0

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах

Определена кодировка: windows-1251 (строка 0, столбец 0)

Дата из файла: 2013-04-02 19:50 (строка 3, столбец 38)

Ошибка: Некорректная цена предложения: цена должна быть вещественным числом (строка 531, столбец 9)

Ошибка: Для предложения указана неизвестная категория: 60 (строка 531, столбец 9)

Ошибка: Предложение отклонено: http://wwww.kz/noutbuk-acer......html (строка 531, столбец 9)

Ошибка: Для предложения указана неизвестная категория: 60 (строка 29404, столбец 9)

Ошибка: Для предложения указана неизвестная категория: 60 (строка 29668, столбец 9)

Ошибка: Для предложения указана неизвестная категория: 60 (строка 29929, столбец 9)

Ошибка: Для предложения указана неизвестная категория: 60 (строка 30247, столбец 9)

Ошибка: Для предложения указана неизвестная категория: 60 (строка 30802, столбец 9)

Ошибка: Для предложения указана неизвестная категория: 60 (строка 31093, столбец 9)

Ошибка: Для предложения указана неизвестная категория: 60 (строка 31229, столбец 9)

Ошибка: Для предложения указана неизвестная категория: 60 (строка 31471, столбец 9)

Ошибка: Для предложения указана неизвестная категория: 60 (строка 31762, столбец 9)

Ошибка: Для предложения указана неизвестная категория: 60 (строка 34575, столбец 9)

Ошибка: Для предложения указана неизвестная категория: 60 (строка 34818, столбец 9)

(слишком много сообщений...)

Фатальная ошибка: Слишком много отклоненных предложений: 475 (строка 125368, столбец 10)

Фатальная ошибка: Фид отклонен

0

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах

Определена кодировка: windows-1251 (строка 0, столбец 0)

Дата из файла: 2013-04-02 19:50 (строка 3, столбец 38)

Ошибка: Некорректная цена предложения: цена должна быть вещественным числом (строка 531, столбец 9)

Ошибка: Для предложения указана неизвестная категория: 60 (строка 531, столбец 9)

Ошибка: Предложение отклонено: http://wwww.kz/noutbuk-acer......html (строка 531, столбец 9)

Ошибка: Для предложения указана неизвестная категория: 60 (строка 29404, столбец 9)

Ошибка: Для предложения указана неизвестная категория: 60 (строка 29668, столбец 9)

Ошибка: Для предложения указана неизвестная категория: 60 (строка 29929, столбец 9)

Ошибка: Для предложения указана неизвестная категория: 60 (строка 30247, столбец 9)

Ошибка: Для предложения указана неизвестная категория: 60 (строка 30802, столбец 9)

Ошибка: Для предложения указана неизвестная категория: 60 (строка 31093, столбец 9)

Ошибка: Для предложения указана неизвестная категория: 60 (строка 31229, столбец 9)

Ошибка: Для предложения указана неизвестная категория: 60 (строка 31471, столбец 9)

Ошибка: Для предложения указана неизвестная категория: 60 (строка 31762, столбец 9)

Ошибка: Для предложения указана неизвестная категория: 60 (строка 34575, столбец 9)

Ошибка: Для предложения указана неизвестная категория: 60 (строка 34818, столбец 9)

(слишком много сообщений...)

Фатальная ошибка: Слишком много отклоненных предложений: 475 (строка 125368, столбец 10)

Фатальная ошибка: Фид отклонен

дайте ссылку на ваш сайт в личку.

0

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах

Жду ответа заранее спасибо!

0

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах

Жду ответа заранее спасибо!

ok, увидел на своей oc 1.5.5 ту же проблему - посмотрю.

1

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах

В админке в System->Localization->Currencies нажмите Edit напротив вашей валюты и задайте значение в поле Decimal Places. Например - 2.

0

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах

Определена кодировка: windows-1251 (строка 0, столбец 0)

Дата из файла: 2013-04-02 22:53 (строка 3, столбец 38)

Фатальная ошибка: Ошибка парсинга XML: Error parsing XML feed: The input ended before all started tags were ended. Last tag started was 'offers' (строка 153012, столбец 1)

Теперь такая ошибка)

0

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах

где меняется время обновления?

0

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах

где меняется время обновления?

пока только в коде, в файле catalog/controller/feed/yandex_market.php, строка 26. Там сейчас есть 60*30 - это количество секунд равное 30-ти минатам. Поменяйте 30 на кол-во минут интервала обновления.

0

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах

Здравствуйте, подскажите где что исправить, чтобы валюта была не рубль, а гривна.

Заранее спасибо.

0

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах

Здравствуйте, подскажите где что исправить, чтобы валюта была не рубль, а гривна.

Заранее спасибо.

В настройках модуля. Если у вас там нельзя выбрать гривную, значит она не настроена в настройках магазина (Система->Локализация->Валюты)

0

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах

Спасибо за ответ.

В настройках магазина валюта настроена, т.к. все цены в гривнах. А вот в модуле есть только рубль.

0

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах

Спасибо за ответ.

В настройках магазина валюта настроена, т.к. все цены в гривнах. А вот в модуле есть только рубль.

У валюты код UAH прописан?

0

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах

Да, прописан

0

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий

Комментарии могут оставлять только зарегистрированные пользователи

Создать аккаунт

Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!


Зарегистрировать новый аккаунт

Войти

Есть аккаунт? Войти.


Войти

  • Похожий контент

    • Автор: ashap


      Просмотреть файл Yandex, Visa, Mastercard. Контроль наличия товара (расширение)
      Расширение для совместной работы yandexplusplus и yandexpay (контроль наличия товаров)
      Позволяет совместить работу двух модулей "Yandex" отложенная и оплата сразу
      Если в корзине оказывается товар которого нет в наличии, то активируется модуль отложенной оплаты (Отложенная оплата. Visa, Mastercard, Я.Деньги).
      Если в корзине все товары в наличии, то работает модуль обычной оплаты(в данном случае "Visa, Mastercard, Maestro, Я.Деньги ++")
      Так же по количеству, если вы превысите количество товара в наличие в корзине то включится отложенная оплата.
      + возможность принимать деньги на один кошелек с этих двух модулей или раскидывать на разные кошельки
       
      Модуль также поддерживает работу с модулем simple как и основные модули.
      Не заменяет системных файлов и файлов модулей.
       
      Должны быть установлены 2 модуля:
      1)Отложенная оплата. Visa, Mastercard, Я.Деньги или версия для 2.х
      2)Visa, Mastercard, Maestro, Я.Деньги ++
       
      Смотрите также другие модули по ссылке
      Автор ashap Добавлен 22.10.2014 Категория Платежные системы Системные требования Сайт разработчика Старая цена Метод активации Ioncube Loader OpenCart ocStore OpenCart.Pro, ocShop  
    • Автор: ashap
      Расширение для совместной работы yandexplusplus и yandexpay (контроль наличия товаров)
      Позволяет совместить работу двух модулей "Yandex" отложенная и оплата сразу
      Если в корзине оказывается товар которого нет в наличии, то активируется модуль отложенной оплаты (Отложенная оплата. Visa, Mastercard, Я.Деньги).
      Если в корзине все товары в наличии, то работает модуль обычной оплаты(в данном случае "Visa, Mastercard, Maestro, Я.Деньги ++")
      Так же по количеству, если вы превысите количество товара в наличие в корзине то включится отложенная оплата.
      + возможность принимать деньги на один кошелек с этих двух модулей или раскидывать на разные кошельки
       
      Модуль также поддерживает работу с модулем simple как и основные модули.
      Не заменяет системных файлов и файлов модулей.
       
      Должны быть установлены 2 модуля:
      1)Отложенная оплата. Visa, Mastercard, Я.Деньги или версия для 2.х
      2)Visa, Mastercard, Maestro, Я.Деньги ++
       
      Смотрите также другие модули по ссылке
    • Автор: ashap


      Просмотреть файл Яндекс.Касса(по договору) Контроль наличия товара (расширение)
      Расширение для совместной работы yandexur и yandexpayur (контроль наличия товаров)
      Позволяет совместить работу двух модулей "Yandex" отложенная и оплата сразу
      Если в корзине оказывается товар которого нет в наличии, то активируется модуль отложенной оплаты (Отложенная оплата. ЯД, Карты, Нал, WM, Мобильный (По договору)).
      Если в корзине все товары в наличии, то работает модуль обычной оплаты(в данном случае "Яндекс.Деньги, Карты, Наличные, Webmoney, Мобильный (по договору)")
      Так же по количеству, если вы превысите количество товара в наличие в корзине то включится отложенная оплата.
      + возможность принимать деньги на один договор с этих двух модулей или раскидывать на разные договоры
       
      Модуль также поддерживает работу с модулем simple как и основные модули.
      Не заменяет системных файлов и файлов модулей
       
      Должны быть установлены 2 модуля:
      1)Отложенная оплата. ЯД, Карты, Нал, WM, Мобильный (По договору)
      2)Яндекс.Деньги, Карты, Наличные, Webmoney, Мобильный (по договору)
       
       
      Смотрите также другие модули по ссылке
      Автор ashap Добавлен 23.10.2014 Категория Платежные системы Системные требования Сайт разработчика Старая цена Метод активации Ioncube Loader OpenCart ocStore OpenCart.Pro, ocShop  
    • Автор: ashap
      Расширение для совместной работы yandexur и yandexpayur (контроль наличия товаров)
      Позволяет совместить работу двух модулей "Yandex" отложенная и оплата сразу
      Если в корзине оказывается товар которого нет в наличии, то активируется модуль отложенной оплаты (Отложенная оплата. ЯД, Карты, Нал, WM, Мобильный (По договору)).
      Если в корзине все товары в наличии, то работает модуль обычной оплаты(в данном случае "Яндекс.Деньги, Карты, Наличные, Webmoney, Мобильный (по договору)")
      Так же по количеству, если вы превысите количество товара в наличие в корзине то включится отложенная оплата.
      + возможность принимать деньги на один договор с этих двух модулей или раскидывать на разные договоры
       
      Модуль также поддерживает работу с модулем simple как и основные модули.
      Не заменяет системных файлов и файлов модулей
       
      Должны быть установлены 2 модуля:
      1)Отложенная оплата. ЯД, Карты, Нал, WM, Мобильный (По договору)
      2)Яндекс.Деньги, Карты, Наличные, Webmoney, Мобильный (по договору)
       
       
      Смотрите также другие модули по ссылке
  • Недавно просматривали   0 пользователей

    Ни один зарегистрированный пользователь не просматривает эту страницу.