#typo3 #typoscript #clear-cache
#typo3 #typoscript #очистить кэш
Вопрос:
Когда пользователь пишет комментарий, он не сразу становится видимым. Это становится видимым, если я очищаю кэш вручную.
Обычно t3blog хранит сообщения и комментарии на самой странице t3blog, и тогда у вас должна быть возможность очистить кэш таким образом.
TCEMAIN.clearCacheCmd = all
Однако в моей настройке t3blog записи и комментарии находятся в отдельной системной папке. Вот сценарий настройки
plugin.tx_t3blog_pi1.blogPid = 21
Есть ли способ, которым я могу активировать очистку кэша, когда пользователь отправляет новый комментарий?
Ответ №1:
Я безуспешно пытался установить перехват ‘aftercommentinsertion’.
Наконец, я решил это, изменив сам t3blog, чтобы вы могли указать uid страниц, которые необходимо очистить с помощью typoscript.
# my typoscript code
plugin.tx_t3blog_pi1.blogList {
# clear these pages when a visitor writes a new comment to a post
clearCacheForPIDsAfterCommentInsertion = 1,6,8,24
}
// the file: t3blog/pi1/widgets/blogList/class.singleFunctions.php
protected function insertNewComment(array $data) {
$data['pid'] = t3blog_div::getBlogPid();
$data['date'] = $data['crdate'] = $GLOBALS['EXEC_TIME'];
$GLOBALS['TYPO3_DB']->exec_INSERTquery('tx_t3blog_com', $data);
$commendId = $GLOBALS['TYPO3_DB']->sql_insert_id();
$this->updateRefIndex('tx_t3blog_com', $commentId);
// Hook after comment insertion
if (is_array($GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['t3blog']['aftercommentinsertion'])) {
foreach($GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['t3blog']['aftercommentinsertion'] as $userFunc) {
$params = array(
'data' => amp;$data,
'table' => 'tx_t3blog_com',
'postUid' => $data['fk_post'],
'commentUid' => $commendId,
);
t3lib_div::callUserFunction($userFunc, $params, $this);
}
}
// ******************* MY CLEAR CACHE CODE *******************
error_log("t3blog inserted new comment");
$pids = $this->conf['clearCacheForPIDsAfterCommentInsertion'];
$pidArray = is_string($pids) ? t3lib_div::trimExplode(',', $pids, 1) : NULL;
error_log("t3blog clearCacheForPIDsAfterCommentInsertion: ".$pids." -- ".print_r($pidArray, true));
if(is_array($pidArray)) {
$tce = t3lib_div::makeInstance('t3lib_TCEmain');
foreach($pidArray as $pid) {
error_log("t3blog clear_cacheCmd: ".$pid);
$tce->clear_cacheCmd((int)$pid);
}
}
}
Я отправил этот код Дмитрию Дулепову (автору t3blog).
Ответ №2:
Вы можете добавить эту строку на свою СТРАНИЦУ TS системной папки (uid = 21), содержащей ваше сообщение в блоге:
TCEMAIN.clearCacheCmd = 1,6,8,24
В этой строке будет указано, что новые записи в блоге должны инициировать очистку кэша именно этого списка страниц. Я думаю, что вашим пользователям понадобятся права для очистки кэша…
Причина, по которой он попадает на страницу TS вашей системной папки, а не на одну или все страницы, на которые вставлен ваш блог, заключается в том, что … они (вероятно) все кэшируются. Ваша системная папка не кэшируется, и новая запись будет замечена TYPO3 и позволит очистить кэш кэшированных страниц, которые вы только что определили с помощью строки, разделенной запятой.
Ответ №3:
Вы пытались включить clearCacheCmd на странице TSconfig системной папки, где хранятся комментарии? Вы можете использовать «все», «страницы» или соответствующие пользовательские идентификаторы страниц, см.: http://typo3.org/documentation/document-library/core-documentation/doc_core_tsconfig/4.3.2/view/1/5/#id2505694
Это должно сработать, если «пользователь» является внутренним пользователем с соответствующими привилегиями — но я предполагаю, что когда вы говорите «пользователь пишет комментарий», вы говорите о внешнем пользователе, и тогда это, вероятно, не сильно поможет.
Тогда решением было бы заставить расширение очищать кэш при получении комментария. Возможно, у вас нет возможности это сделать, но быстрое решение этой проблемы — пометить страницу как недоступную для кэширования («Отключить кэш», вкладка Поведение). Однако будьте осторожны, это приведет к сбоям на вашем сервере.
Комментарии:
1. да, это когда пользователь пишет комментарии через интерфейс. (Кэш очищается, если я пишу комментарии через серверную часть). У меня уже есть clearCacheCmd как в системной папке, так и на самой странице t3blog. Сейчас я изучаю возможность установки перехвата, который очищает кеш, который запускается всякий раз, когда публикуется комментарий. Спасибо, норвебиец