Domanda

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

È stato utile?

Soluzione 2

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();

Altri suggerimenti

You can create a function which clear the cache of a specified page, following code is needed:

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);
}

And $cacheCmd can have following values: /typo3/sysext/core/Classes/DataHandling/DataHandler.php:clear_cacheCmd (> 6.0) or /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
 */

Call this with a userFunc if a given parameter is set in typoscript or create a simple extension by your own.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top