0

ユーザーがコメントを書き込んでも、すぐには表示されません。キャッシュを手動でクリアすると表示されます。


通常、t3blogは投稿とコメントをt3blogページ自体に保存し、この方法でキャッシュをクリアできるはずです。

TCEMAIN.clearCacheCmd = all

ただし、私のt3blogセットアップでは、投稿とコメントは別のsysfolderにあります。これがセットアップのタイプミスです

plugin.tx_t3blog_pi1.blogPid = 21

ユーザーが新しいコメントを送信したときにキャッシュのクリアをトリガーする方法はありますか?

4

3 に答える 3

1

'aftercommentinsertion'フックのインストールに失敗しました。

最後に、t3blog自体を変更して解決しました。これにより、タイプミスでクリアする必要のあるページの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); 
        }
    }

}

このコードをDmitryDulepov(t3blogの作者)に送信しました。

于 2011-04-14T14:57:23.163 に答える
1

この行は、ブログ投稿を保持しているsysfolder(uid = 21)のPAGETSに追加できます。

TCEMAIN.clearCacheCmd = 1,6,8,24

その行は、新しいブログ投稿がその正確なページリストのクリアキャッシュをトリガーすることを示しています。ただし、ユーザーにはキャッシュをクリアする権限が必要だと思います...

それがあなたのsysfolderのPAGETSに入り、あなたのブログが挿入されているページの1つまたはすべてではない理由は...それらは(おそらく)すべてキャッシュされているからです。あなたのsysfolderはキャッシュされておらず、新しいレコードはTYPO3によって認識され、カンマ区切りの文字列で定義したキャッシュされたページのクリアキャッシュをだまします。

于 2012-04-30T21:16:30.433 に答える
0

コメントが保存されているsysfolderのページTSconfigにclearCacheCmdを含めようとしましたか?「all」、「pages」または関連するページ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 に答える