Задать вопрос
@GPK1929

Почему ModX Revo сниппет FormIt не дает установить нулевое значение при редактировании TV параметра?

Добрый день,подскажите пожалуйста я создал ресурс с некоторым количеством TV параметров через FormIt так вот при редактировать данного ресурса все также с помощью FormIt эти параметры менять можно но в случае если стереть одно из ранее заполненных полей то ресурс не принимает значение и выдает предыдущее значение. В чем может быть причина?

Код чанка

[[!FormIt?
&id=`form-edit`
&hooks=`formit2resource,redirect`
&preHooks=`resource2formit`
&resource2formitfields=`parent,resource_id,pagetitle,alias,t-adr,t-capacity,t-city-from,t-notes,t-city-to,t-country-from,t-country-to,t-date-from,t-date-to,t-load,t-number,t-pay,t-region-from,t-region-to,t-resolution,t-size1,t-size2,t-size3,t-type,t-volume,createdby`
&redirectTo=`171`
&template=`2`
]]
///////////


Примечания
[[+fi.error.t-notes]]





//////

код сниппета formit2resource

<?php
$doc = $modx->getObject('modResource',array('id'=>$hook->getValue('resource_id')));
if (empty($doc)){
$doc = $modx->newObject('modResource');
$doc->set('createdby', $modx->user->get('id'));
// Публикуем
$doc->set('published', 1);
//НЕ отображаем в меню
$doc->set('hidemenu', 1);
}
else{
$doc->set('editedby', $modx->user->get('id'));
}
$allFormFields = $hook->getValues();
foreach ($allFormFields as $field=>$value)
{

if ($field !== 'spam' && $field !== 'resource_id'){
$doc->set($field, $value);
}
}
$doc->set('template', $template);
$doc->save();
foreach ($allFormFields as $field=>$value)
{
if (!empty($value) && $tv = $modx->getObject('modTemplateVar', array ('name'=>$field)))
{
/* handles checkboxes & multiple selects elements */
if (is_array($value)) {
$featureInsert = array();
while (list($featureValue, $featureItem) = each($value)) {
$featureInsert[count($featureInsert)] = $featureItem;
}
$value = implode('||',$featureInsert);
}
$tv->setValue($doc->get('id'), $value);
$tv->save();
}
}
$response = $modx->runProcessor('gettags',
array(
'update' => 1,
'update_cache' => 1,
'category_id' => $page_parent
),
array('processors_path' => $modx->getOption( 'core_path' ) . 'components/tag_manager/processors/')
);
if ($response->isError()) {
return $response->getMessage();
}
$modx->cacheManager->refresh();

return true;

код сниппета resource2formit
<?php
if (isset($_GET['resId'])){
if ($doc=$modx->getObject('modResource',array('id'=>$_GET['resId']))){
$docarray=$doc->toArray();
$fields = explode(',',$scriptProperties['resource2formitfields']);
$fields[] = 'id';

foreach ($fields as $field){

if ($doc->getFieldName($field) === null) {
/* if field isnt defined, look for TV value */
$tvValue = $doc->getTVValue($field);
if ($tvValue !== null) {
$hook->setValue($field,$tvValue);
}
} else {
/* otherwise get field value */
$hook->setValue($field,$docarray[$field]);
}
}
}

//$errorMsg = ''.print_r($docarray,true).'';
//$hook->addError('error_message',$errorMsg);
}
return true;
  • Вопрос задан
  • 2996 просмотров
Подписаться 1 Оценить Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы