t3blog — как очистить кэш, когда пользователь пишет комментарий?

#typo3 #typoscript #clear-cache

#typo3 #typoscript #очистить кэш

Вопрос:

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


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

 TCEMAIN.clearCacheCmd = all
  

Однако в моей настройке t3blog записи и комментарии находятся в отдельной системной папке. Вот сценарий настройки

 plugin.tx_t3blog_pi1.blogPid = 21
  

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

Ответ №1:

Я безуспешно пытался установить перехват ‘aftercommentinsertion’.

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

 # 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' => amp;$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).

Ответ №2:

Вы можете добавить эту строку на свою СТРАНИЦУ TS системной папки (uid = 21), содержащей ваше сообщение в блоге:

 TCEMAIN.clearCacheCmd = 1,6,8,24
  

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

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

Ответ №3:

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

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

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

Комментарии:

1. да, это когда пользователь пишет комментарии через интерфейс. (Кэш очищается, если я пишу комментарии через серверную часть). У меня уже есть clearCacheCmd как в системной папке, так и на самой странице t3blog. Сейчас я изучаю возможность установки перехвата, который очищает кеш, который запускается всякий раз, когда публикуется комментарий. Спасибо, норвебиец