Как обновить TV поле MIGX после сохранения документа?
Приветствую, помогите решить задачу.
Есть MIGX TV field-facts, в нем есть поле с типом data.
Вкладки формы выглядят так
Решил делать плагином на событие OnDocFormSave, в нем запускаю сниппет cutDate где и редактирую поле date
Есть 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(); // Кэш тоже чистим
Но не работает это, где ошибся? Подскажите пожалуйста. Комментарии: 4
Попробуйте так (просто плагин на 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)));
Не работает к сожалению, страница сохраняется без конца.
На третьей строке поменяйте $modx->resource->get('id') на $resource->get(''id''):
if(!$tvo = $modx->getObject('modTemplateVarResource', array('tmplvarid' => $tvid, 'contentid' => $resource->get('id')))) return;
Благодарю!
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.