[FEATURE] Add TSFE pageCacheTags to our own cache
authorBenjamin Franzke <bfr@qbus.de>
Wed, 23 Dec 2015 14:07:30 +0000 (15:07 +0100)
committerTim Lochm├╝ller <tim@fruit-lab.de>
Tue, 29 Dec 2015 09:12:37 +0000 (10:12 +0100)
By adding those tags, we're able to flush by all tags (core tags, page tags, runtime assigned) that can be
used to flush the 'pages' cache group.

This fixes the usage of:
  * cachetag syntax in TCEMAIN.clearCacheCmd, example:
    TCEMAIN.clearCacheCmd = cachetag:foo
  * DataHandlers automatic flush, example:
    when record NN of table tx_foo_domain_model_foo is changed, it will call the CacheManager:
    CacheManager::flushCachesInGroupByTag('pages', 'tx_foo_domain-model_foo_NN')
    (Note that you'd have to set the tags in your extension using $TSFE->addCacheTags() or stdWrap.addPageCacheTags)

We're adding a 'sfc_' prefix to our own tags to not clash with core/user defined tags.
Note that the pageId_NNN tag will be retrieved from $TSFE->pageCacheTags, and thus flushByTag('pageId_N')
will continue to work.

Classes/Module/CacheModule.php
Classes/StaticFileCache.php

index 40be6fa..869b1ee 100644 (file)
@@ -84,7 +84,7 @@ class CacheModule extends AbstractFunctionModule
 
         foreach ($tree->tree as $row) {
 
-            $cacheEntries = $cache->getByTag('pageId_' . $row['row']['uid']);
+            $cacheEntries = $cache->getByTag('sfc_pageId_' . $row['row']['uid']);
             if ($cacheEntries) {
                 $isFirst = true;
                 foreach ($cacheEntries as $identifier => $info) {
index d759439..b4c17b6 100644 (file)
@@ -139,10 +139,10 @@ class StaticFileCache implements SingletonInterface
 
         if (!$ruleArguments['skipProcessing']) {
 
-            $cacheTags = [
-                'pageId_' . $pObj->page['uid'],
-                'domain_' . str_replace('.', '_', parse_url($uri, PHP_URL_HOST)),
-            ];
+            // The page tag pageId_NN is included in $pObj->pageCacheTags
+            $cacheTags = ObjectAccess::getProperty($pObj, 'pageCacheTags', true);
+            $cacheTags[] = 'sfc_pageId_' . $pObj->page['uid'];
+            $cacheTags[] = 'sfc_domain_' . str_replace('.', '_', parse_url($uri, PHP_URL_HOST));
 
             // This is supposed to have "&& !$pObj->beUserLogin" in there as well
             // This fsck's up the ctrl-shift-reload hack, so I pulled it out.