Андрей
С нами с 18 июня 2018; Место в рейтинге пользователей: #1979runProcessor не выводит ошибку.
Добрый день! Пишу скрипт для синхронизации сайта с 1с. Скрипт парсит xml файл выгрузки 1с, запихивает всё в массив, создаёт товар, или обновляет цену и остаток если товар уже существует. В случае с созданием скрипт постоянно стопается где-то на 900м товаре (всего их 3500), но я не могу понять почему. Через вывод
$modx->log(modX::LOG_LEVEL_ERROR, 'Pagetitle:'.$goodsarr[$i][1].$response->getMessage());
я получаю исключительно неинформативное:
[2018-08-13 12:44:27] (ERROR @ /var/www/vhosts/u0542530.plsk.regruhosting.ru/httpdocs/orthoblansh.ru/sinch.php: 113)
После чего скрипт стопается.
Сам скрипт:
Если два одинаковых названия, но в разных регистрах, скрипт останавливается;
Если есть двойные пробелы, скрипт останавливается;
Если есть пробелы в начале или конце строки, скрипт останавливается;), но обо всём этом я догадывался на чисто интуитивном уровне, что ему сейчас может не нравиться непонятно.
Если кто-то знает какие-то способы дебага, буду очень благодарен за совет.
$modx->log(modX::LOG_LEVEL_ERROR, 'Pagetitle:'.$goodsarr[$i][1].$response->getMessage());
я получаю исключительно неинформативное:
[2018-08-13 12:44:27] (ERROR @ /var/www/vhosts/u0542530.plsk.regruhosting.ru/httpdocs/orthoblansh.ru/sinch.php: 113)
После чего скрипт стопается.
Сам скрипт:
<?php
define('MODX_API_MODE', true);
require_once 'index.php';
$modx->getService('error','error.modError');
$modx->setLogLevel(modX::LOG_LEVEL_ERROR);
$modx->setLogTarget('FILE');
$offersxml = simplexml_load_file(MODX_CORE_PATH.'offers.xml');
$goods = $offersxml->ПакетПредложений->Предложения->Предложение;
$goodsarr = array();
$good = array();
$checkpt = array();
echo '<pre>';
foreach ($goods as $item){
$goodsarr[]=array((string)$item->Ид, str_replace(' ', ' ', iconv(mb_detect_encoding((string)$item->Наименование), "UTF-8", (string)$item->Наименование)), (string)$item->Цены->Цена[2]->ЦенаЗаЕдиницу, (string)$item->Количество);
}
$collection = $modx->getCollection('msProduct');
foreach ($collection as $item) {
array_push($good, $item->get('article'));
}
for($i = 0; $i <= count($goodsarr); $i++){
if(in_array($goodsarr[$i][0], $good)){
$article = $modx->getObject('msProductData',array('article' => (string)$goodsarr[$i][0] ));
$title = $modx->getObject('msProduct',array('pagetitle' => (string)$goodsarr[$i][1]));
if ($title instanceof Object){
$titleid = $title->get('id');
$tv = $modx->getObject('modTemplateVarResource', array('contentid' => $titleid));
$article->set('price', (string)$goodsarr[$i][2]);
$tv->set('value', (string)$goodsarr[$i][3]);
$article->save();
$tv->save();
} else {
echo 'error';
}
} else {
if(in_array($goodsarr[$i][1], $checkpt)){
} else {
array_push($checkpt, (string)$goodsarr[$i][1]);
if((string)$goodsarr[$i][3] != null){
$tvval = (string)$goodsarr[$i][3];
} else {
$tvval = '0';
}
$response = $modx->runProcessor('resource/create', array(
'class_key' => 'msProduct',
'pagetitle' => $goodsarr[$i][1],
'parent' => 7,
'template' => 10,
'show_in_tree' => 0,
//Данные
'article' => $goodsarr[$i][0],
'price' => $goodsarr[$i][2],
'old_price' => 0,
'favorite' => 0,
'popular' => 0,
//TV - 10 это id TV
'tv24' => $tvval
));
if ($response->isError()) {
$modx->log(modX::LOG_LEVEL_ERROR, $response->getMessage());
continue;
}
}
}
}
print_r('done');До этого скрипт стопался на разных этапах, в основном из-за пейджтайтлов( Если два одинаковых названия, но в разных регистрах, скрипт останавливается;
Если есть двойные пробелы, скрипт останавливается;
Если есть пробелы в начале или конце строки, скрипт останавливается;), но обо всём этом я догадывался на чисто интуитивном уровне, что ему сейчас может не нравиться непонятно.
Если кто-то знает какие-то способы дебага, буду очень благодарен за совет.