Как обновить TV поле MIGX после сохранения документа?

Приветствую, помогите решить задачу.

Есть MIGX TV field-facts, в нем есть поле с типом data.

Вкладки формы выглядят так
[
{"caption":"Информация", "fields": [
{"field":"date","caption":"Дата","inputTVtype":"date"}
]}
]
После того как в админке пользователь выберет дату и сохранит документ, есть задача отредактировать поле.
Решил делать плагином на событие OnDocFormSave, в нем запускаю сниппет cutDate где и редактирую поле date

if ($modx->event->name == 'OnDocFormSave') { 
$modx->runSnippet('cutDate');
}
Сниппет cutDate который должен переписать поле date

$migx = $modx->resource->getTVValue('field-facts');
$items = $modx->fromJSON($migx);
$output = array();
foreach($items as $item) {
  $item['date'] = 'newdate';
  $output[] = $item;
}
$modx->resource->setTVValue('field-facts', $modx->toJSON($output));
$modx->cacheManager->clearCache();      // Кэш тоже чистим
Но не работает это, где ошибся? Подскажите пожалуйста.
Роман
27 марта 2021, 17:54
modx.pro
627
0

Комментарии: 4

Павел Романов
27 марта 2021, 19:42
1
+1
Попробуйте так (просто плагин на OnDocFormSave, без сниппета и TV-шку доставайте через modTemplateVarResource):
<?php
$tvid = 5; // ID TV-шки
if(!$tvo = $modx->getObject('modTemplateVarResource', array('tmplvarid' => $tvid, 'contentid' => $modx->resource->get('id')))) return;
$tv = $tvo->get('value');
$items = $modx->fromJSON($tv);
$output = array();

foreach($items as $item) {
	$item['date'] = 'newdate';
	$output[] = $item;
}

$tvo->set('value' , $modx->toJSON($output));
$tvo->save();

// очистка кеша ресурса
$cacheKey = $resource->getCacheKey();
$modx->cacheManager->refresh(array('resource' => array('key' => $cacheKey)));
    Роман
    27 марта 2021, 20:04
    0
    Не работает к сожалению, страница сохраняется без конца.
      Павел Романов
      28 марта 2021, 19:27
      1
      +1
      На третьей строке поменяйте $modx->resource->get('id') на $resource->get(''id''):
      if(!$tvo = $modx->getObject('modTemplateVarResource', array('tmplvarid' => $tvid, 'contentid' => $resource->get('id')))) return;
        Роман
        29 марта 2021, 12:23
        0
        Благодарю!
    Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
    4