Сорри, не видел топика…
По поводу приведенного примера: в целом да, он работоспособный. Но не оптимальный. Здесь есть серьезная хитрость: у тебя указан вызов конкретного shopModx-ого процессора, но это не обязательно делать. Почему? Посмотрим на метод системного процессора resource/create modResourceCreateProcessor::getInstance()
public static function getInstance(modX &$modx,$className,$properties = array()) { $classKey = !empty($properties['class_key']) ? $properties['class_key'] : 'modDocument'; $object = $modx->newObject($classKey); if (!in_array($classKey,array('modDocument','modResource',''))) { $className = $classKey.'CreateProcessor'; if (!class_exists($className)) { $className = 'modResourceCreateProcessor'; } } /** @var modProcessor $processor */ $processor = new $className($modx,$properties); return $processor; }
Особенно обратить внимание на:
$className = $classKey.'CreateProcessor'; if (!class_exists($className)) { $className = 'modResourceCreateProcessor'; }
То есть он на лету формирует по маске название класса-процессора для указанного class_key, и если такой объявлен, то выполняется именно этот процессор вместо системного. Итог: можно легко вызывать и системный процессор, при этом выполнится shopModx-овый в соответствии с указанным class_key. Конечный код такой:
$options = array( 'pagetitle' => 'Пример создания', 'template' => 3, 'parent' => 87, 'class_key' => 'ShopmodxResourceProduct', 'sm_currency' => 79, 'published' => true, ); $response = $modx->runProcessor('resource/create', $options); if($response->isError()){ print "error"; } print_r($response->getResponse()); print '<br />OK';
Только еще не указан sm_price.