Саша, привет! 1. Не может быть, чтобы просто не со

Саша, привет! 1. Не может быть, чтобы просто не сохранялось и все. Должны быть какие-то ошибки. Для выполнения процессоров в тесте советую вот этот скрипт использовать. 2. Давно уже не делал подобного, но на сколько мне память не изменяет, делать это надо так:

foreach($docs as $doc){
    $doc->class_key = 'ShopmodxResourceProduct';
    $doc->save();
    $data = $doc->toArray();
    $data = array_merge($data, array(
        "sm_price"       => $price,
        "sm_currency"    => $currency,
    ));
    $response = $modx->runProcessor('resource/update',$data);
    if($response->isError()){
        print_r($response->getResponse());
        return;
    }
}

Дело в том, что когда процессор на обновление выполняется, он ведь все равно первоначально берет данные из БД, и соответственно получает инстанс объекта на основе класса class_key. Если не сохранить перед апдейтом с новым классом, то тогда не будет объекта ShopmodxProductObject. А вот есть уже он, тогда процессор на апдейт будет не родной MODX-овый, а расширенный магазина, и ShopmodxProduct к нему должен будет добавиться автоматически.