Создание ресурса с помощью MODX API казалось бы простое дело и много где описано, но вот незадача, столкнулся с проблемой авторизации, а точнее ошибкой "permission_denied", оказалось проблема с сессиями MODX? нужно было подключить их в файле отдельно, итого листинг кода создания нового ресурса через API ниже.
// Подключаем API MODX
define('MODX_API_MODE', true);
require_once 'index.php';
// Включаем сессии MODX и инициализируем контекст web
require_once 'config.core.php';
require_once MODX_CORE_PATH.'model/modx/modx.class.php';
$modx = new modX();
$modx->initialize('web');
// Включаем обработку ошибок
$modx->getService('error','error.modError');
$modx->setLogLevel(modX::LOG_LEVEL_FATAL);
$modx->setLogTarget(XPDO_CLI_MODE ? 'ECHO' : 'HTML');
// Логинимся в админку
$response = $modx->runProcessor('security/login', array('username' => 'admin', 'password' => '123456'));
if ($response->isError()) {
$modx->log(modX::LOG_LEVEL_ERROR, $response->getMessage());
return;
}
// Получаем данные из формы
$name = isset($_REQUEST['name']) ? htmlspecialchars($_REQUEST['name']) : null;
$phone = isset($_REQUEST['phone']) ? htmlspecialchars($_REQUEST['phone']) : null;
$email = isset($_REQUEST['email']) ? htmlspecialchars($_REQUEST['email']) : null;
// Создаем ресурс
$response = $modx->runProcessor('resource/create', array(
'pagetitle' => 'Название_страницы',
'alias' => $uniq_token = md5(uniqid(rand(),1)),
'content' => '',
'template' => 1,
'published' => 1,
'parent' => 1
));
if($response->isError()){
$modx->log(modX::LOG_LEVEL_ERROR, $response->getMessage());
return;
}
else{
$object = $response->getObject();
echo "Ресурс успешно создан! $object['id']";
}
// Получаем в качестве объекта вновь созданную страницу и записываем TVшки
$idResource = $response->response['object'];
$res = $modx->getObject('modResource', $idResource['id']);
$res->setTVValue('name', $name);
$res->setTVValue('phone', $phone);
$res->setTVValue('email', $email);
$res->save();
$modx->log(xPDO::LOG_LEVEL_ERROR, "Произошла ошибка при сохранении ТВ");
// Отправка уведомления на почту
$message = $modx->getChunk('myEmailTemplate'); // Чанк с письмом
$modx->getService('mail', 'mail.modPHPMailer');
$modx->mail->set(modMail::MAIL_BODY,$message);
$modx->mail->set(modMail::MAIL_FROM,'info@site.pw');
$modx->mail->set(modMail::MAIL_FROM_NAME,'Имя_отправителя');
$modx->mail->set(modMail::MAIL_SUBJECT,'Тема письма');
$modx->mail->address('to','Email_кому_отправлять');
$modx->mail->address('reply-to','Email_кому_отправлять_копия');
$modx->mail->setHTML(true);
if (!$modx->mail->send()) {
$modx->log(modX::LOG_LEVEL_ERROR,'An error occurred while trying to send the email: '.$modx->mail->mailer->ErrorInfo);
}
$modx->mail->reset();
echo "Отправлено уведомление на почту";