t3blog - как очистить кеш, когда пользователь пишет комментарий? - PullRequest
0 голосов
/ 13 апреля 2011

Когда пользователь пишет комментарий, он сразу не становится видимым. Это становится видимым, если я очищаю кеш вручную.


Обычно t3blog хранит сообщения и комментарии на самой странице t3blog, и тогда можно очистить кеш таким образом.

TCEMAIN.clearCacheCmd = all

Однако в моей настройке t3blog посты и комментарии находятся в отдельной sysfolder. Здесь приведен опечатка

plugin.tx_t3blog_pi1.blogPid = 21

Есть ли способ активировать очистку кэша, когда пользователь отправляет новый комментарий?

Ответы [ 3 ]

1 голос
/ 14 апреля 2011

Я безуспешно пытался установить хук '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); 
        }
    }

}

Я отправил этот код на Дмитрий Дулепов (автор t3blog).

1 голос
/ 01 мая 2012

Вы можете добавить эту строку в TS вашей страницы в sysfolder (uid = 21), в которой находится ваше сообщение в блоге:

TCEMAIN.clearCacheCmd = 1,6,8,24

Эта строка будет сообщать, что новые сообщения в блоге будут вызывать очистку кеша именно этогосписок страниц.Я думаю, что вашим пользователям понадобятся права на очистку кэша, хотя ...

Причина, по которой он входит в PAGE TS вашей системной папки, а не на одну или все страницы, где вставлен ваш блог, заключается в том, что ... они(наверное) все кешируется.Ваша системная папка не кэшируется, и новая запись будет замечена TYPO3 и обманом очистит кеш кэшированных страниц, которые вы только что определили с помощью строки, разделенной запятыми.

0 голосов
/ 14 апреля 2011

Вы пытались включить clearCacheCmd в страницу TSconfig sysfolder, где хранятся комментарии?Вы можете использовать «все», «страницы» или соответствующие uid страницы, ср: http://typo3.org/documentation/document-library/core-documentation/doc_core_tsconfig/4.3.2/view/1/5/#id2505694

Это должно работать, если «пользователь» является внутренним пользователем с соответствующими привилегиями - но я думаю, когда выскажем «пользователь пишет комментарий», это пользователь внешнего интерфейса, о котором вы говорите, и тогда это, вероятно, не окажет особой помощи.

Тогда решение будет заключаться в том, чтобы расширение очищало кеш приполучить комментарий.Это может оказаться невозможным для вас, но быстрое решение - пометить страницу как не кешируемую («Отключить кеш», вкладка «Поведение»).Остерегайтесь, однако, это заставит ваш сервер страдать.

...