Мой хук FormIt кэшируется, и он портит каждый запуск после 1-го.

У меня есть следующий фрагмент кода, подключенный к форме электронной почты FormIt:

$tv = "taken" . (int)$hook->getValue('datetime');
$docID = $modx->resource->get('id'); //get the page id
$page = $modx->getObject('modResource', $docID);
$current = (int)$page->getTVValue($tv);
if (!$page->setTVValue($tv, $current + 1)) {
    $modx->log(xPDO::LOG_LEVEL_ERROR, 'There was a problem saving your TV...');
}
$modx->setPlaceholder('successMessage','<h2 class="success">'.$current.'</h2>');
return true;`

Он увеличивает переменную шаблона при каждом запуске и выводит сообщение об успешном выполнении (хотя сейчас я использую эту функцию для вывода сообщения отладки). Проблема в том, что он увеличивает размер TV только один раз после сохранения фрагмента, тем самым обновляя кеш. Обычно я бы назвал фрагмент без кеша, добавив ! к его названию, но, похоже, это не работает для хуков FormIt. Как я могу заставить этот код работать? Прямо сейчас я запускаю всю страницу как некэшируемую, но это явно неоптимально. Возможно, есть способ перехватить сниппет без кэширования? Вызвать фрагмент из фрагмента как некэшированный?


person kotekzot    schedule 06.12.2012    source источник


Ответы (2)


Я делаю что-то подобное, но для подсчета загрузок страниц мне кажется, что вам не хватает последнего кусочка: $current->save();

<?php
$docID = $modx->resource->get('id');

$tvIdm = 32;
$tvm = $modx->getObject('modTemplateVar',$tvIdm );
$tvm->setValue($docID, $tvm->getValue($docID) + 1 );
$tvm->save();
person Sean Kimball    schedule 06.12.2012
comment
К сожалению, это не работает так же - работает при 1-м запуске, затем останавливается; пересохранение дает мне еще 1 хороший прогон, потом снова перестает работать. Что ж, было бы чудом, если бы этого не произошло — setTVvalue фиксируется автоматически, а если бы это было не так, оно также не увеличивалось бы при первом запуске. - person kotekzot; 06.12.2012

Попробуйте добавить это перед сохранением объекта $tv

$tv->_processed = ложь;

Он получен из свойства modElement, которое он расширяет.

person goldsky    schedule 27.12.2013