/** * Post process output for caching information * * The content cache stores cache segments with markers inside the generated content. This method creates cache * segments and will process the final outer result (currentPathIsEntryPoint) to remove all cache markers and * store cache entries. * * @param array $evaluateContext The current evaluation context * @param object $tsObject The current TypoScript object (for "this" in evaluations) * @param mixed $output The generated output after caching information was removed * @return mixed The post-processed output with cache segment markers or cleaned for the entry point */ public function postProcess(array $evaluateContext, $tsObject, $output) { if ($this->enableContentCache && $evaluateContext['cacheForPathEnabled'] && $evaluateContext['cacheForPathDisabled']) { $contextArray = $this->runtime->getCurrentContext(); if (isset($evaluateContext['configuration']['context'])) { $contextVariables = []; foreach ($evaluateContext['configuration']['context'] as $contextVariableName) { $contextVariables[$contextVariableName] = $contextArray[$contextVariableName]; } } else { $contextVariables = $contextArray; } $cacheTags = $this->buildCacheTags($evaluateContext['configuration'], $evaluateContext['typoScriptPath'], $tsObject); $cacheMetadata = array_pop($this->cacheMetadata); $output = $this->contentCache->createDynamicCachedSegment($output, $evaluateContext['typoScriptPath'], $contextVariables, $evaluateContext['cacheIdentifierValues'], $cacheTags, $cacheMetadata['lifetime'], $evaluateContext['cacheDiscriminator']); } elseif ($this->enableContentCache && $evaluateContext['cacheForPathEnabled']) { $cacheTags = $this->buildCacheTags($evaluateContext['configuration'], $evaluateContext['typoScriptPath'], $tsObject); $cacheMetadata = array_pop($this->cacheMetadata); $output = $this->contentCache->createCacheSegment($output, $evaluateContext['typoScriptPath'], $evaluateContext['cacheIdentifierValues'], $cacheTags, $cacheMetadata['lifetime']); } elseif ($this->enableContentCache && $evaluateContext['cacheForPathDisabled'] && $this->inCacheEntryPoint) { $contextArray = $this->runtime->getCurrentContext(); if (isset($evaluateContext['configuration']['context'])) { $contextVariables = []; foreach ($evaluateContext['configuration']['context'] as $contextVariableName) { if (isset($contextArray[$contextVariableName])) { $contextVariables[$contextVariableName] = $contextArray[$contextVariableName]; } else { $contextVariables[$contextVariableName] = null; } } } else { $contextVariables = $contextArray; } $output = $this->contentCache->createUncachedSegment($output, $evaluateContext['typoScriptPath'], $contextVariables); } if ($evaluateContext['cacheForPathEnabled'] && $evaluateContext['currentPathIsEntryPoint']) { $output = $this->contentCache->processCacheSegments($output, $this->enableContentCache); $this->inCacheEntryPoint = null; $this->addCacheSegmentMarkersToPlaceholders = false; } return $output; }