M
M
medvedgoff2021-04-19 16:58:42
MODX
medvedgoff, 2021-04-19 16:58:42

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;
}


The form

<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

1 answer(s)
A
Anton Tarasov, 2021-04-19
@medvedgoff

Add a line like this to the snippet for each TV:

// Заполняем нужные значения
$newResource->set('pagetitle',$pagetitle);
....
$newResource->setTVValue('TVname', $tvValue);
....
// Сохраняем ресурс
if ($newResource->save()) {

and pass the values ​​you need from the form.

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question