0

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


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

TCEMAIN.clearCacheCmd = all

然而,在我的 t3blog 设置中,帖子和评论位于单独的 sysfolder 中。这是设置打字稿

plugin.tx_t3blog_pi1.blogPid = 21

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

4

3 回答 3

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 的作者)。

于 2011-04-14T14:57:23.163 回答
1

您可以在保存您的博客文章的 sysfolder (uid=21) 的 PAGE TS 中添加此行:

TCEMAIN.clearCacheCmd = 1,6,8,24

该行将告诉新博客文章将触发该确切页面列表的清晰缓存。我认为您的用户将需要清除缓存的权限...

它进入您的 sysfolder 的 PAGE TS 而不是插入博客的一个或所有页面的原因是……它们(可能)全部被缓存。您的 sysfolder 未缓存,新记录将被 TYPO3 注意到,并欺骗您刚刚由逗号分隔的字符串定义的缓存页面的清晰缓存。

于 2012-04-30T21:16:30.433 回答
0

您是否尝试在存储评论的 sysfolder 的页面 TSconfig 中包含 clearCacheCmd?您可以使用“所有”、“页面”或相关页面 uid,参见:http ://typo3.org/documentation/document-library/core-documentation/doc_core_tsconfig/4.3.2/view/1/5/#id2505694

如果“用户”是具有相关特权的后端用户,这应该可以工作 - 但我想,当你说“用户写评论”时,它是你正在谈论的前端用户,那么这可能不会有很大帮助。

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

于 2011-04-14T08:41:11.550 回答