gepo

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

Рекомендуемые сообщения

sv2109    436

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

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

public function current ( ) {

return mysql_fetch_assoc($this->resource);

}

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


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

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

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

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

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

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

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

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


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

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

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

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


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

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

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

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


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

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

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

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


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

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

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

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

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


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

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

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

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

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


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

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

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


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

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

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

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


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

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

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

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


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

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

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


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

Определена кодировка: 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)

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

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


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

Определена кодировка: 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)

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

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

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


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

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

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


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

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

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

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


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

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

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


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

Определена кодировка: 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)

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

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


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

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

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


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

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

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

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


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

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

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

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


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

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

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

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

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


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

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

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

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


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

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

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

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

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


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

Для публикации сообщений создайте учётную запись или авторизуйтесь

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

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти


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

    • От toporchillo

      Скачать/Купить дополнение


      Автоматический старт/стоп объявлений Яндекс.Директ
      Этот модуль сэкономит вам деньги, которые будут впустую утекать из рекламного бюджета при показе неактуальных рекламных объявлений.
      Для OpenCart (ocStore) 1.5.x - 2.3.x
      Он предназначен для поддержки в актуальном состоянии рекламных объявлений Яндекс.Директ. Модуль останавливает рекламу всех тех товаров, которые сняты с продаж, либо которых нет в наличии. Также модуль возобновляет рекламные показы тех товаров, которые вновь можно купить. Внимание, модуль влияет только на те рекламные объявления, у которых ссылка ведет на страницу товара. Подробнее про контекстную рекламу Интернет-магазина читайте здесь.
      Модуль НЕ предназначен для рекламных агентств, он для владельцев кампаний в Яндекс.Директ - владельцев Интрнет-магазинов.
      Прочтите про регистрацию программного доступа к API Яндекс.Директ (ниже).
      Если вы купили модуль, а Яндекс вам доступ не дал, то деньги НЕ возвращаются!
      Сначала получите доступ, потом покупайте модуль.
      Установка и настройка модуля
      В Яндексе зарегистрируйте oAuth-приложение, дайте права доступа приложению к API Яндекс.Директ (подробнее) Откройте ваш аккаунт Яндекс.Директ, в разделе API, на вкладке мои заявки создайте новую заявку на полный программный доступ к API: Подробно заполните форму заявки на получение полного доступа к API Яндекс.Директ:

      В описании схемы взаимодействия укажите следующее: Ждите одобрения заявки Яндексом. Когда заявка одобрена - покупайте модуль, и переходите к его установке. Распакуйте архив модуля, содержимое папки upload через FTP-клиент скопируйте поверх файлов вашего сайта. Настройки модуля доступны в разделе админки "Дополнения - Каналы продвижения" (подробнее). Модуль может некорректно работать, если у вас используется ЧПУ отличное от SEO_URL и SEO_PRO.
      Добавил toporchillo Добавлено 22.10.2014 Категория Обмен данными Системные требования Сайт разработчика http://sourcedistillery.com/yandex_direct_start-stop_opencart.html Старая цена Метод активации Без активации Ioncube Loader Нет OpenCart ocStore OpenCart.Pro, ocShop  
    • От toporchillo
      Этот модуль сэкономит вам деньги, которые будут впустую утекать из рекламного бюджета при показе неактуальных рекламных объявлений.
      Для OpenCart (ocStore) 1.5.x - 2.3.x
      Он предназначен для поддержки в актуальном состоянии рекламных объявлений Яндекс.Директ. Модуль останавливает рекламу всех тех товаров, которые сняты с продаж, либо которых нет в наличии. Также модуль возобновляет рекламные показы тех товаров, которые вновь можно купить. Внимание, модуль влияет только на те рекламные объявления, у которых ссылка ведет на страницу товара. Подробнее про контекстную рекламу Интернет-магазина читайте здесь.
      Модуль НЕ предназначен для рекламных агентств, он для владельцев кампаний в Яндекс.Директ - владельцев Интрнет-магазинов.
      Прочтите про регистрацию программного доступа к API Яндекс.Директ (ниже).
      Если вы купили модуль, а Яндекс вам доступ не дал, то деньги НЕ возвращаются!
      Сначала получите доступ, потом покупайте модуль.
      Установка и настройка модуля
      В Яндексе зарегистрируйте oAuth-приложение, дайте права доступа приложению к API Яндекс.Директ (подробнее) Откройте ваш аккаунт Яндекс.Директ, в разделе API, на вкладке мои заявки создайте новую заявку на полный программный доступ к API: Подробно заполните форму заявки на получение полного доступа к API Яндекс.Директ:

      В описании схемы взаимодействия укажите следующее: Ждите одобрения заявки Яндексом. Когда заявка одобрена - покупайте модуль, и переходите к его установке. Распакуйте архив модуля, содержимое папки upload через FTP-клиент скопируйте поверх файлов вашего сайта. Настройки модуля доступны в разделе админки "Дополнения - Каналы продвижения" (подробнее). Модуль может некорректно работать, если у вас используется ЧПУ отличное от SEO_URL и SEO_PRO.
    • От markimax

      490.00 руб
      Скачать/Купить дополнение


      SEO HTTPS FIX PRO
      Демо: http://oc2.opencartadmin.com/admin/index.php?route=module/httpsfix
      Дополнение предназначено для корректного переноса Opencart на HTTPS протокол, и устранения проблем, связанных с этим процессом.
      Что умеет это дополнение.
      1. Заставляет Opnecart корректно отдавать контент одновременно по обеим протоколам (http и https)
      2. Гибко устранять "хвосты" связанные с разными вариантами ввода внешних и внутренних адресов.
      Так например при переезде на HTTPS необходимо изменить протокол подключения
      к внешним CDN например с http://cdn.google.com на https://cdn.google.com
      Модуль позволяет это сделать в два клика.
      3. Функционал переноса CSS и JS скриптов к конец исходного кода HTML страницы (Page Speed рекомендации) и минимизация HTML кода страницы
      В процессе наполнения контентом и верстки шаблонов магазина, зачастую встречаются ссылки
      как на внутренние так и на внешние ресурсы совершенно разного вида.
      Например если у вас встречаются ссылки www.vash_site.ru/link_1 и без vash_site.ru/link_1 в контенте магазина,
      автоматичски в https преобразуются только ссылки, которые вы определилил как основное зеркало.
      А все остальные остануться старые и бразуеры будут выписывать warning и не включать зеленый замочек.
      При помощи модуля, вы сможете создать любые правила для любых преобразований внутренних ссылок в магазине как внутренних так и внешних.
      Теперь вам не нужно судорожно искать, где же вы в шаблоне еще не поменяли http на https,
      достаточно посмотреть в консоль и написать в модуле соответсвующее правило.
      После склейки http и https, советую в htaccess настроить редирект 301 с http на https, чтобы ссылки магазина работали только по https протоколу
      Для правильной работы фикса у вас должны отличаться HTTP_CATALOG и HTTPS_CATALOG в config.php.
      Также мод фиксит проблемы определения протокола, при нестандартных настройках связки nginx => apache.
       
      Техническая поддержка

       
       
      Добавил markimax Добавлено 22.12.2016 Категория SEO, карта сайта, оптимизация Системные требования PHP 5.3+Если OC 1.5.x - vQmod Сайт разработчика http://opencartadmin.com Старая цена Метод активации Через официальный сайт дополнения Ioncube Loader Нет OpenCart 2.3
      2.2
      2.1
      2.0
      1.5.6.4
      1.5.6.3
      1.5.6.2
      1.5.6.1
      1.5.6
      1.5.4.1
      1.5.3.1 ocStore 2.3
      2.2
      2.1
      1.5.5.1.2
      1.5.5.1.1
      1.5.5.1
      1.5.4.1.2
      1.5.4.1.1
      1.5.4.1
      1.5.3.1
      1.5.2.1
      1.5.1.3 OpenCart.Pro, ocShop Opencart.pro 2.3
      Opencart.pro 2.1
      OcShop 2.0.3.х
      OcShop 1.5.6.4.х  
  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу