Андрей

Андрей

С нами с 18 июня 2018; Место в рейтинге пользователей: #1979

runProcessor не выводит ошибку.

Добрый день! Пишу скрипт для синхронизации сайта с 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)
После чего скрипт стопается.

Сам скрипт:

<?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');
До этого скрипт стопался на разных этапах, в основном из-за пейджтайтлов(
Если два одинаковых названия, но в разных регистрах, скрипт останавливается;
Если есть двойные пробелы, скрипт останавливается;
Если есть пробелы в начале или конце строки, скрипт останавливается;), но обо всём этом я догадывался на чисто интуитивном уровне, что ему сейчас может не нравиться непонятно.

Если кто-то знает какие-то способы дебага, буду очень благодарен за совет.
Андрей
13 августа 2018, 16:08
modx.pro
1 019
0