TYPO3:计算缓存标识符哈希值?

时间:2013-04-10 12:30:57

标签: caching typo3 typo3-4.5

在TYPO3中,我想从缓存表中删除一个具有一些GET值的页面。我还没有找到一个扩展,它会处理那个或TYPO3方法。

  1. 是否有一个函数,我可以移交一个URL或类似的函数,它产生缓存哈希标识符或从缓存表中删除特定数据?
  2. 如果没有,有人知道,算法是什么,计算哈希标识符或我可能在哪个文件中找到它?
  3. 所以任何帮助都将受到赞赏。

    我的TYPO3版本:4.5.x

2 个答案:

答案 0 :(得分:0)

您可以创建一个清除指定页面缓存的函数,需要以下代码:

TYPO3 6.0

public function clearCache($cacheCmd) {
    /** @var $tce \TYPO3\CMS\Core\DataHandling\DataHandler */
    $tce = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance("TYPO3\\CMS\\Core\\DataHandling\\DataHandler");
    $tce->stripslashes_values = 0;
    $tce->start(array(), array());

    switch($cacheCmd) {
        case 'pages':
        case 'all':
            $tce->admin = 1;
    }

    $tce->clear_cacheCmd($cacheCmd);
    unset($tce);
}

TYPO3 4.x

public function clearCache($cacheCmd) {
    /** @var $tce t3lib_TCEmain */
    $tce = t3lib_div::makeInstance("t3lib_TCEmain");
    $tce->stripslashes_values = 0;
    $tce->start(array(), array());

    switch($cacheCmd) {
        case 'pages':
        case 'all':
            $tce->admin = 1;
    }

    $tce->clear_cacheCmd($cacheCmd);
    unset($tce);
}

$cacheCmd可以包含以下值: /typo3/sysext/core/Classes/DataHandling/DataHandler.php:clear_cacheCmd(> 6.0)或/t3lib/class.t3lib_tcemain.php(4.x)

/**
 * Clears the cache based on the command $cacheCmd.
 *
 * $cacheCmd='pages':   Clears cache for all pages. Requires admin-flag to
 * be set for BE_USER.
 *
 * $cacheCmd='all':     Clears all cache_tables. This is necessary if
 * templates are updated. Requires admin-flag to be set for BE_USER.
 *
 * $cacheCmd=[integer]: Clears cache for the page pointed to by $cacheCmd
 * (an integer).
 *
 * $cacheCmd='cacheTag:[string]':  Flush page and pagesection cache by given tag
 *
 * $cacheCmd='cacheId:[string]':  Removes cache identifier from page and page section cache
 *
 * Can call a list of post processing functions as defined in
 * $GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['t3lib/class.t3lib_tcemain.php']['clearCachePostProc']
 * (numeric array with values being the function references, called by
 * \TYPO3\CMS\Core\Utility\GeneralUtility::callUserFunction()).
 *
 * Note: The following cache_* are intentionally not cleared by
 * $cacheCmd='all':
 *
 * - cache_md5params:   RDCT redirects.
 * - cache_imagesizes:  Clearing this table would cause a lot of unneeded
 * Imagemagick calls because the size informations have
 * to be fetched again after clearing.
 *
 * @param string $cacheCmd The cache command, see above description
 * @return void
 */

如果在typoscript中设置了给定参数或者创建了一个简单的扩展名,请使用userFunc调用此方法。

答案 1 :(得分:0)

就是这样:

您需要一个合适的TSFE对象$GLOBALS['TSFE']
那么你需要来自localconf $TYPO3_CONF_VARS['SYS']['encryptionKey']的加密密钥 和URL参数,例如`tx_ttnews [tt_news]

然后是这些步骤

  1. 使用加密密钥和url参数
  2. 创建(已排序)数组
  3. 将此数组移交给TSFE对象的属性cHash_array
  4. 从TSFE的getHash方法获取cHash值

  5. $arr = array(
        'encryptionKey' => $TYPO3_CONF_VARS['SYS']['encryptionKey'],
        'tx_ttnews[tt_news]' => $newsid,
        // ...
    )
    ksort($array);
    $GLOBALS['TSFE']->cHash_array = $array;
    $chash = $GLOBALS['TSFE']->getHash();