* * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Asm89\Twig\CacheExtension\Node; /** * Cache twig node. * * @author Alexander */ class CacheNode extends \Twig_Node { private static $cacheCount = 1; /** * @param \Twig_Node_Expression $annotation * @param \Twig_Node_Expression $keyInfo * @param \Twig_NodeInterface $body * @param integer $lineno * @param string $tag */ public function __construct(\Twig_Node_Expression $annotation, \Twig_Node_Expression $keyInfo, \Twig_Node $body, $lineno, $tag = null) { parent::__construct(array('key_info' => $keyInfo, 'body' => $body, 'annotation' => $annotation), array(), $lineno, $tag); } /** * {@inheritDoc} */ public function compile(\Twig_Compiler $compiler) { $i = self::$cacheCount++; if (version_compare(\Twig_Environment::VERSION, '1.26.0', '>=')) { $extension = 'Asm89\Twig\CacheExtension\Extension'; } else { $extension = 'asm89_cache'; } $compiler ->addDebugInfo($this) ->write("\$asm89CacheStrategy".$i." = \$this->env->getExtension('{$extension}')->getCacheStrategy();\n") ->write("\$asm89Key".$i." = \$asm89CacheStrategy".$i."->generateKey(") ->subcompile($this->getNode('annotation')) ->raw(", ") ->subcompile($this->getNode('key_info')) ->write(");\n") ->write("\$asm89CacheBody".$i." = \$asm89CacheStrategy".$i."->fetchBlock(\$asm89Key".$i.");\n") ->write("if (\$asm89CacheBody".$i." === false) {\n") ->indent() ->write("ob_start();\n") ->indent() ->subcompile($this->getNode('body')) ->outdent() ->write("\n") ->write("\$asm89CacheBody".$i." = ob_get_clean();\n") ->write("\$asm89CacheStrategy".$i."->saveBlock(\$asm89Key".$i.", \$asm89CacheBody".$i.");\n") ->outdent() ->write("}\n") ->write("echo \$asm89CacheBody".$i.";\n") ; } }