Answer the question
In order to leave comments, you need to log in
How to make a new resource in Modx through a form in the frontend with a record in TV?
Good day.
Through the form in the frontend, we create a resource using a snippet. But it only works data entry in the standard fields of the resource. How to make it so that you can enter data into certain tv?
This is not a public site, it was created for joint work on documents, while only specific people who know what they are entering and with authorized access will enter data. Therefore, a simple but working method is needed.
snippet
// Сниппет будет получать данные из формы методом POST
$pagetitle = $_POST['pagetitle'];
$longtitle = $_POST['longtitle'];
$menutitle = $_POST['menutitle'];
$link_attributes = $_POST['link_attributes'];
$description = $_POST['description'];
$introtext = $_POST['introtext'];
$content = $_POST['content'];
$parent = $_POST['parent'];
$template = $_POST['template'];
$publishedon = date('Y-m-d H:i:s');
// Если некоторые значения не будут указаны,
// они будут установлены по умолчанию
if (!$introtext) $introtext = $pagetitle;
if (!$description) $description = $introtext;
if (!$parent) $parent = 1;
if (!$template) $template = 1;
// Создаем ресурс
$newResource = $modx->newObject('modResource');
// Заполняем нужные значения
$newResource->set('pagetitle',$pagetitle);
$newResource->set('longtitle',$longtitle);
$newResource->set('menutitle',$menutitle);
$newResource->set('link_attributes',$link_attributes);
$newResource->set('description',$description);
$newResource->set('introtext',$introtext);
$newResource->set('content',$content);
$newResource->set('alias',$pagetitle);
$newResource->set('template',$template);
$newResource->set('published',1);
$newResource->set('parent',$parent);
$newResource->set('publishedon',$publishedon);
// Сохраняем ресурс
if ($newResource->save()) {
// Очищаем кеш, чтобы изменения были видны сразу
$modx->cacheManager->clearCache();
return true;
}
<form action="" method="post" class="form">
<!-- Если нам нужно указать особенный шаблон, в форме передаем значение -->
<input type="hidden" name="template" id="template" value="3" />
<input type="hidden" name="parent" id="parent" value="2" />
<input type="hidden" name="description" id="description" value="персона"/><br />
<!--
&hooks - то, что будет выполняться при отправке формы.
В данном случае, это сниппет addResource и перенаправление
на страницу с сообщением об успехе.
&validate - проверка значений формы.
У нас title обязательно должен быть заполнен.
&redirectTo - id ресурса, на который будет перенаправляться пользователь,
если сниппет addResource вернет true.
-->
<input class="form-control" type="text" placeholder="Имя" name="pagetitle" id="pagetitle"/>
<input class="form-control" type="text" placeholder="Отчество" name="longtitle" id="longtitle"/>
<input class="form-control" type="text" placeholder="Фамилия" name="menutitle" id="menutitle"/>
....
<button type="submit" class="btn btn-primary" >Добавить</button>
Answer the question
In order to leave comments, you need to log in
Add a line like this to the snippet for each TV:
// Заполняем нужные значения
$newResource->set('pagetitle',$pagetitle);
....
$newResource->setTVValue('TVname', $tvValue);
....
// Сохраняем ресурс
if ($newResource->save()) {
Didn't find what you were looking for?
Ask your questionAsk a Question
731 491 924 answers to any question