@medvedgoff

Как сделать в Modx новый ресурс через форму во фронтэнде с записью в тв?

Доброго времени суток.
Через форму во фронтэнде создаем ресурс с помощью снипета. Но в нем только работает ввод данных в стандартные поля ресурса. Как сделать так, чтобы можно было вводить данные в определенные tv?

Это не публичный сайт, создан для совместной работы надо документами, при том что будут вводить данные только конкретные люди, знающие что вводят и разрешенным доступом. Поэтому нужен простой но работающий способ.

Сниппет
// Сниппет будет получать данные из формы методом 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;
}


Форма
[[!FormIt?
   &hooks=`addResource,redirect`
   &validate=`pagetitle:required`
   &redirectTo=`[[*id]]`
]]
<form action="[[~[[*id]]]]" method="post" class="form">
	<!-- Если нам нужно указать особенный шаблон, в форме передаем значение -->
	<input type="hidden" name="template" id="template" value="3" />
	<input type="hidden" name="parent" id="parent" value="[[*id]]" />
	<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>
  • Вопрос задан
  • 22 просмотра
Решения вопроса 1
himuro
@himuro
Full stack web developer
Допишите в сниппет для каждого TV строку вида:
// Заполняем нужные значения
$newResource->set('pagetitle',$pagetitle);
....
$newResource->setTVValue('TVname', $tvValue);
....
// Сохраняем ресурс
if ($newResource->save()) {

и передайте из формы нужные вам значения.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы