Как изменять и выводить TV поле при каждом обновлении страницы?
Приветствую
Бьюсь вторые сутки, столкнулся с неизвестным для себя — не получается обработать значение TV поля при обновлении страницы (получить > изменить > вывести обновленные данные). Подскажите пожалуйста, как настроить корректно.
Что имеем? — Есть дополнительное поле и его при каждом обновлении страницы надо менять. Приведу пример.
1. Два поля: num_tv (числовое) и text_tv (текстовое).
2. Есть плагин:
3. Есть сниппет («update_page_snippet»):
4. Сниппет вывожу в шаблон:
По логике при каждом обновлении страницы плагин должен получать значения полей и менять их, а сниппет выводить их на страницу, но этого не происходит или происходит однократно при очистке кеша. Если отключить кеширование ресурса (снять чекбокс кеширования в настройках ресурса), то все работает и через плагин и через сниппет.
Подскажите пожалуйста правильное решение — какой самый оптимальный способ есть для получения, изменения и вывода обновленных данных TV полей?
Бьюсь вторые сутки, столкнулся с неизвестным для себя — не получается обработать значение TV поля при обновлении страницы (получить > изменить > вывести обновленные данные). Подскажите пожалуйста, как настроить корректно.
Что имеем? — Есть дополнительное поле и его при каждом обновлении страницы надо менять. Приведу пример.
1. Два поля: num_tv (числовое) и text_tv (текстовое).
2. Есть плагин:
switch ($modx->event->name) {
case 'OnLoadWebDocument':
// получаем значения полей
$num_tv = $modx->resource->getTVValue('num_tv');
$text_tv = $modx->resource->getTVValue('text_tv');
// меняем значения полей
$num_tv += 5;
$text_tv .= 'abc';
// устанавливаем значения полей
$modx->resource->setTVValue('num_tv', $num_tv);
$modx->resource->setTVValue('text_tv', $text_tv);
break;
}
3. Есть сниппет («update_page_snippet»):
// получаем значение полей
$num_tv = $modx->resource->getTVValue('num_tv');
$text_tv = $modx->resource->getTVValue('text_tv');
// выводим значение полей
echo '<p>NUM_TV: '.$num_tv.'</p>';
echo '<p>TEXT_TV: '.$text_tv.'</p>';
4. Сниппет вывожу в шаблон:
[[!update_page_snippet?]]
По логике при каждом обновлении страницы плагин должен получать значения полей и менять их, а сниппет выводить их на страницу, но этого не происходит или происходит однократно при очистке кеша. Если отключить кеширование ресурса (снять чекбокс кеширования в настройках ресурса), то все работает и через плагин и через сниппет.
Подскажите пожалуйста правильное решение — какой самый оптимальный способ есть для получения, изменения и вывода обновленных данных TV полей?
Комментарии: 5
Делайте setTVValue при вызове СНИППЕТА! Зачем вам тут плагин то? save не забудьте.
HitsPage, например, работает по данному принципу.
HitsPage, например, работает по данному принципу.
Перенес все в сниппет:
В общем, видимо где-то что-то я делаю не так. Подскажите пожалуйста что ктонкретно не так на примере, если сможете.
// получаем значения полей
$num_tv = $modx->resource->getTVValue('num_tv');
$text_tv = $modx->resource->getTVValue('text_tv');
// меняем значения полей
$num_tv += 5;
$text_tv .= 'abc';
// устанавливаем значения полей
$modx->resource->setTVValue('num_tv', $num_tv);
$modx->resource->setTVValue('text_tv', $text_tv);
// сохраняем — ХЗ как, тут я не понимаю как
$num_tv->save();
$text_tv->save();
// выводим значение полей
echo '<p>-NUM_TV: '.$num_tv.'</p>';
echo '<p>-TEXT_TV: '.$text_tv.'</p>';
В общем, видимо где-то что-то я делаю не так. Подскажите пожалуйста что ктонкретно не так на примере, если сможете.
// 1. Сначала получаем
$num_tv = $modx->resource->getTVValue('num_tv');
$text_tv = $modx->resource->getTVValue('text_tv');
// 2. меняем
$num_tv += 5;
$text_tv .= 'abc';
// 3. Устанавливаем TV
$modx->resource->setTVValue('num_tv', $num_tv);
$modx->resource->setTVValue('text_tv', $text_tv);
// 4. Сохраняем ресурс!!!
$modx->resource->save();
// 5. Выводим значения
echo '<p>-NUM_TV: '.$num_tv.'</p>';
echo '<p>-TEXT_TV: '.$text_tv.'</p>';
p.s. выводить из сниппета лучше через return! никакого echo.Если в выводе есть html код — то лучше вынести его в чанк.
Алексей, добавил сохранение ресурса по вашему примеру. Результат тот же — на кешированной странице ничего не меняется, а на некешированной все прекрасно меняется.
Вот пример:
— кешированная страница
— некешированная страница
Если есть возможность глянуть в админку:
— url: s12901.h7.modhost.pro/manager/
— manager
— adminmodx.pro
А если нет возможности, то какие еще могут быть варианты?
Вот пример:
— кешированная страница
— некешированная страница
Если есть возможность глянуть в админку:
— url: s12901.h7.modhost.pro/manager/
— manager
— adminmodx.pro
А если нет возможности, то какие еще могут быть варианты?
Варианты:
1. $resource->clearCache(); после save
2. Используйте modx процессоры для обновления данных ресурсов (рекомендуется) docs.modx.com/revolution/2.x/developing-in-modx/advanced-development/using-runprocessor
ps. Это наверно как раз про «некорректный кеш» в другой вашей теме?
1. $resource->clearCache(); после save
2. Используйте modx процессоры для обновления данных ресурсов (рекомендуется) docs.modx.com/revolution/2.x/developing-in-modx/advanced-development/using-runprocessor
ps. Это наверно как раз про «некорректный кеш» в другой вашей теме?
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.