getService('error','error.modError'); $modx->setLogLevel(modX::LOG_LEVEL_INFO); $modx->setLogTarget(XPDO_CLI_MODE ? 'ECHO' : 'HTML'); if ($modx->cacheManager->get('running', array('cache_key' => 'ymarket'))) { echo 'Скрипт работает, повторный запуск отменён'; exit; } $running = true; $modx->cacheManager->set('running', $running, 0, array('cache_key' => 'ymarket')); $limit = 500; $offset = $modx->cacheManager->get('offset', array('cache_key' => 'ymarket')); $filename = __DIR__ . '/yandexmarket-gen.yml'; if (!$offset) { if (file_exists($filename)) { echo 'Файл существует, больше ничего не делаем'; $running = false; $modx->cacheManager->set('running', $running, 0, array('cache_key' => 'ymarket')); exit; } echo 'Приступаю к генерации YML-файла' . PHP_EOL; $data = ' '.$modx->getOption('site_name').' '.$modx->getOption('site_name').' '.$modx->getOption('site_url').' '. $modx->runSnippet('pdoResources', array( 'parents' => 5, 'where' => '{"class_key":"msCategory"}', 'depth' => 0, 'sortby' => '{"menuindex":"ASC"}', 'limit' => 0, 'tpl' => 'categories' )) . ' '; if (!$handle = fopen($filename, 'w')) { echo "Не могу открыть файл $filename" . PHP_EOL; $running = false; $modx->cacheManager->set('running', $running, 0, array('cache_key' => 'ymarket')); exit; } if (fwrite($handle, $data) === FALSE) { echo "Не могу произвести запись в файл $filename" . PHP_EOL; $running = false; $modx->cacheManager->set('running', $running, 0, array('cache_key' => 'ymarket')); exit; } fclose($handle); unset($data); unset($handle); // echo 'Записана шапка файла' . PHP_EOL; $offset = 0; } $end_of_file = false; if ($data = $modx->runSnippet('msProducts', array( 'parents' => 0, 'limit' => $limit, 'offset' => $offset, 'tpl' => 'offer', 'includeContent' => 1, 'includeTVs' => 'img,image', 'where' => '{"Data.price:>":0}' ))) { if (is_writable($filename)) { if (!$handle = fopen($filename, 'a')) { echo "Не могу открыть файл $filename" . PHP_EOL; $running = false; $modx->cacheManager->set('running', $running, 0, array('cache_key' => 'ymarket')); exit; } if (fwrite($handle, $data) === FALSE) { echo "Не могу произвести запись в файл $filename" . PHP_EOL; $running = false; $modx->cacheManager->set('running', $running, 0, array('cache_key' => 'ymarket')); exit; } fclose($handle); } else { echo "Файл $filename недоступен для записи" . PHP_EOL; $running = false; $modx->cacheManager->set('running', $running, 0, array('cache_key' => 'ymarket')); exit; } // echo 'Записана группа товаров от '.$offset.' до ' . ($offset + $limit); $offset = $offset + $limit; $modx->cacheManager->set('offset', $offset, 0, array('cache_key' => 'ymarket')); unset($data); if ($offset > 200000) { $end_of_file = true; } } else { $end_of_file = true; } if ($end_of_file) { $data = ' '; if (is_writable($filename)) { if (!$handle = fopen($filename, 'a')) { echo "Не могу открыть файл $filename" . PHP_EOL; $running = false; $modx->cacheManager->set('running', $running, 0, array('cache_key' => 'ymarket')); exit; } if (fwrite($handle, $data) === FALSE) { echo "Не могу произвести запись в файл $filename" . PHP_EOL; $running = false; $modx->cacheManager->set('running', $running, 0, array('cache_key' => 'ymarket')); exit; } fclose($handle); } else { echo "Файл $filename недоступен для записи" . PHP_EOL; $running = false; $modx->cacheManager->set('running', $running, 0, array('cache_key' => 'ymarket')); exit; } unlink(MODX_BASE_PATH . 'yandexmarket.yml'); rename($filename, MODX_BASE_PATH . 'yandexmarket.yml'); fopen($filename, 'w'); echo 'Генерация файла YML завершена'; $offset = 0; $modx->cacheManager->set('offset', $offset, 0, array('cache_key' => 'ymarket')); } $running = false; $modx->cacheManager->set('running', $running, 0, array('cache_key' => 'ymarket')); exit;