当用户撰写评论时,它不会立即显示。如果我手动清除缓存,它就会变得可见。
通常t3blog会在t3blog页面中存储帖子和评论,然后一个人应该能够以这种方式清除缓存。
TCEMAIN.clearCacheCmd = all
但是在我的t3blog设置中,帖子和评论都在一个单独的sysfolder中。这是设置typoscript
plugin.tx_t3blog_pi1.blogPid = 21
当用户提交新评论时,我有没有办法触发清除缓存?
答案 0 :(得分:1)
我没有尝试安装'aftercommentinsertion'钩子。
最后我通过修改t3blog本身来解决它,这样你就可以指定需要通过typoscript清除的页面的uid。
# 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' => &$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);
}
}
}
我已将此代码发送给Dmitry Dulepov(t3blog的作者)。
答案 1 :(得分:1)
您可以在sysfolder(uid = 21)的PAGE TS中添加此行,并保留您的博文:
TCEMAIN.clearCacheCmd = 1,6,8,24
该行将告诉新的博客帖子应触发该确切页面列表的清晰缓存。我认为您的用户需要有权清除缓存...
它进入你的sysfolder的PAGE TS而不是你的博客插入的一个或所有页面的原因是......它们(可能)都被缓存了。你的sysfolder没有被缓存,TYPO3会注意到新的记录,并且用逗号分隔的字符串快速缓存你刚刚定义的缓存页面。
答案 2 :(得分:0)
您是否尝试将clearCacheCmd包含在存储注释的sysfolder的页面TSconfig中?您可以使用“所有”,“页面”或相关的页面uid,cf:http://typo3.org/documentation/document-library/core-documentation/doc_core_tsconfig/4.3.2/view/1/5/#id2505694
如果“用户”是具有相关权限的后端用户,这应该有效 - 但我想,当你说“用户写评论”时,它是你正在谈论的前端用户,然后这将是可能没什么帮助。
然后解决方案是让扩展程序在收到评论后清除缓存。这可能是您无法做到的,但快速解决此问题的方法是将页面标记为不可缓存(“禁用缓存”,“行为”选项卡)。但要注意,这会导致服务器受损。