Проблема с TV параметрами в MODx
$modx -> resource -> setTVValue(11, 1);
print_r($modx -> resource -> getTVValue(11));
$modx -> resource -> setTVValue(11, 2);
print_r($modx -> resource -> getTVValue(11));
That code outputs 2 and 2, when must outputs 1 and 2, the whole code is in the snippet, resource cache is turned off, snippet call is not cacheble too, like "[[!..."
Переводить не стал, думаю ты язык знаешь, вот тот же вопрос на stackoverflow.com/questions/14052207/modx-revo-settvvalue-returns-old-data
print_r($modx -> resource -> getTVValue(11));
$modx -> resource -> setTVValue(11, 2);
print_r($modx -> resource -> getTVValue(11));
That code outputs 2 and 2, when must outputs 1 and 2, the whole code is in the snippet, resource cache is turned off, snippet call is not cacheble too, like "[[!..."
Переводить не стал, думаю ты язык знаешь, вот тот же вопрос на stackoverflow.com/questions/14052207/modx-revo-settvvalue-returns-old-data
Комментарии: 28
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
Работает без проблем, но только при одном условии — если вызывается не на странице, ТВ которой он должен обновить.
А вот так — выдаёт прикольный глюк, очевидно связанный с кэшированием.
Поэтому, переходим на обычный xPDO
Почему выходит такая фигня — мне не ведомо, а копать исходники времени нет.
надо добавить
или
где tv_name — имя tv-параметра с id равным 11. Это позволит дальше на странице использовать новое значение tv-параметра, если оно необходимо.
$modx->resource->save() не помогает, конечно. А если значение нужно только на время работы скрипта, и сохранять его не надо — то и ТВ ни к чему, можно любое имя написать.
тот код просто использовать вдобавок, чтобы обновить значение у текущего ресурса modx, на время обращения к нему.
Спасибо за новый способ работы с ТВ.
Если по очереди комментировать вызовы setTVValue — хорошо видно.
А ваш хак отлично работает, хоть и выглядит это некрасиво.
Тв сразу же актуальны.
Это поле будет работать только во время выполнения скрипта. То есть, методом set мы выставляем любое поле с любым значением, потом можем его использовать как хотим, а после работы оно пропадает — ибо сохранить его некуда, в модели то его нет.
Если же ничего туда не писать, а просто print_r($modx->resource->get('test')); — то будут данные ТВ параметра.
Всё это очень интересно, но мне надо работать, так что не буду копать «почему всё именно так, а не иначе». Вообще, стараюсь не использовать ТВ, если это возможно.
Хотя, уже ничему не удивлюсь =)
$tv = $modx->getObject('modTemplateVar',array('id'=>'11'));
$tv -> setValue($modx->resource->get('id'), 88);
$tv->save();
print_r($modx -> resource -> getTVValue(11));
Выводит сперва значение которое было, после перезагрузки страницы уже то что выставляю в скрипте.