1

In TYPO3 I want to remove a single page from the cache table with some GET values. I haven't found an extension, that will handle that or a TYPO3 method.

  1. Is there a function, that I can hand over a URL or similar, that produces the cache hash identifier or removes the specific data from the caching tables?
  2. If not, does anybody know, what the algorithm is, that calculates the hash identifier or in which file I might find it?

So any help will be appreciated.

My TYPO3 version: 4.5.x

4

2 回答 2

0

It's like this:

You need a proper TSFE object $GLOBALS['TSFE']
then you need the encryption key from the localconf $TYPO3_CONF_VARS['SYS']['encryptionKey'] and the URL parameters e.g. `tx_ttnews[tt_news]

then these steps

  1. create an (sorted) array with the encryption key and the url parameters
  2. Hand over this array to the property cHash_array of the TSFE object
  3. Get the cHash value from the TSFE's getHash method

$arr = array(
    'encryptionKey' => $TYPO3_CONF_VARS['SYS']['encryptionKey'],
    'tx_ttnews[tt_news]' => $newsid,
    // ...
)
ksort($array);
$GLOBALS['TSFE']->cHash_array = $array;
$chash = $GLOBALS['TSFE']->getHash();
于 2013-08-12T14:34:50.960 回答
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
 */

如果在打字稿中设置了给定的参数,或者您自己创建一个简单的扩展,请使用 userFunc 调用它。

于 2013-04-10T13:53:42.160 回答