t3blog - 用户写评论时如何清除缓存?

时间:2011-04-13 12:46:50

标签: typo3 typoscript clear-cache

当用户撰写评论时,它不会立即显示。如果我手动清除缓存,它就会变得可见。


通常t3blog会在t3blog页面中存储帖子和评论,然后一个人应该能够以这种方式清除缓存。

TCEMAIN.clearCacheCmd = all

但是在我的t3blog设置中,帖子和评论都在一个单独的sysfolder中。这是设置typoscript

plugin.tx_t3blog_pi1.blogPid = 21

当用户提交新评论时,我有没有办法触发清除缓存?

3 个答案:

答案 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

如果“用户”是具有相关权限的后端用户,这应该有效 - 但我想,当你说“用户写评论”时,它是你正在谈论的前端用户,然后这将是可能没什么帮助。

然后解决方案是让扩展程序在收到评论后清除缓存。这可能是您无法做到的,但快速解决此问题的方法是将页面标记为不可缓存(“禁用缓存”,“行为”选项卡)。但要注意,这会导致服务器受损。