Саша, привет! 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 к нему должен будет добавиться автоматически.