Создание ресурса с помощью формы во фронтенде
Василий, здравствуйте! Дайте плз совет как грамотно решать мою задачу.
А задача такая: создание ресурса с помощью кастомной формы, без авторизации. Например, для того чтобы работодатель мог заполнить заявку по набору персонала на сайте университета.
Сейчас реализовал это так.
Исходная форма (для простоты и наглядности беру только два поля, одно — стандартное, другое — TV-параметр )
А так выглядит сниппет savevac:
Все вроде работает, но настораживает следующее. Во-первых нужно прописывать такие параметры, которые могут спокойно генерироваться по умолчанию, например publishedon. Во-вторых, насколько понял, это большая дырка в безопасности. Вы рекомендуете для подобных вещей всегда использовать runProcessor. Можете набросать примерный код как это будет в моем случае?
P.S. У меня так, но не работает
Вашу статью читал, и код minishop разбирал, но все равно не понял:(
Получается что нужно создавать системного пользователя с надлежащими правами и делать
А задача такая: создание ресурса с помощью кастомной формы, без авторизации. Например, для того чтобы работодатель мог заполнить заявку по набору персонала на сайте университета.
Сейчас реализовал это так.
Исходная форма (для простоты и наглядности беру только два поля, одно — стандартное, другое — TV-параметр )
<form id="vacancyForm" action="" method="post">Название: <input type="text" name="vacname" /><br /> // пойдет в pagetitleОтдел: <input type="text" name="depart" /><br /> //пойдет в TV<input type="submit" name="submit1" value="Отправить" />А так выглядит сниппет savevac:
<?php$parent = 20;$template = 6; // определяем родительский ресурс и шаблон$publishedon = date('Y-m-d H:i:s');$newResource = $modx->newObject('modResource');$newResource->set('pagetitle',$_POST['vacname']);$newResource->set('parent',$parent);$newResource->set('template',$template);$newResource->set('published',1);$newResource->set('publishedon',$publishedon);$id = $newResource->get('id');$newResource->save();if ($res = $modx->getObject('modResource', $id)) {$modx->resource->set('depart', null);$res->setTVValue(1, $_POST['depart']);die;}$modx->cacheManager->refresh();return false;?>Все вроде работает, но настораживает следующее. Во-первых нужно прописывать такие параметры, которые могут спокойно генерироваться по умолчанию, например publishedon. Во-вторых, насколько понял, это большая дырка в безопасности. Вы рекомендуете для подобных вещей всегда использовать runProcessor. Можете набросать примерный код как это будет в моем случае?
P.S. У меня так, но не работает
if (!$modx->hasPermission('edit_document')) {return $modx->error->failure($modx->lexicon('access_denied'));}$fields = array('pagetitle' => $_POST['vacname'],'depart' =>$_POST['depart'],'template' => 6,);$response = $modx->runProcessor('resource/create', $fields);if ($response->isError()) {return $modx->error->failure($response->getMessage());}Вашу статью читал, и код minishop разбирал, но все равно не понял:(
Получается что нужно создавать системного пользователя с надлежащими правами и делать
$modx->runProcessor('security/login', array('username' => 'admin', 'password' => '123456'))? Также не понял с помощью какого процессора создаются TV-параметры. Комментарии: 5
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
.
Но мне не ясно, зачем тебе создавать ресурсы, если работодатель заполняет форму? Не лучше ли сохранять эти данные в отдельную таблицу, по которой можно будет организовать поиск?
Если так — то самый простой вариант, это сделать малюсенький компонент при помощи modExtra, а данные в таблицу закидывать через хук FormIt — заодно и валидация будет, и email уведомления о новой записи.
Если же надо прям создавать ресурсы — крайне советую использовать Tickets, ибо он фильтрует разные XSS, теги MODX и прочие угрозы, которые юные хакеры могут засунуть в новый ресурс. Также, он форматирует и типографирует текст, и тебе самому это делать не придётся.
Tickets работает только с авторизованными юзерами, что решается легко и просто при помощи HybridAuth.