1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 |
- <?php
- /**
- * @package Grav\Common\Twig
- *
- * @copyright Copyright (C) 2015 - 2020 Trilby Media, LLC. All rights reserved.
- * @license MIT License; see LICENSE file for details.
- */
- namespace Grav\Common\Twig\TokenParser;
- use Grav\Common\Grav;
- use Grav\Common\Twig\Node\TwigNodeCache;
- use Twig\Token;
- use Twig\TokenParser\AbstractTokenParser;
- /**
- * Adds ability to cache Twig between tags.
- *
- * {% cache 600 %}
- * {{ some_complex_work() }}
- * {% endcache %}
- *
- * Where the `600` is an optional lifetime in seconds
- */
- class TwigTokenParserCache extends AbstractTokenParser
- {
- /**
- * {@inheritDoc}
- */
- public function parse(Token $token)
- {
- $lineno = $token->getLine();
- $stream = $this->parser->getStream();
- $key = $this->parser->getVarName() . $lineno;
- $lifetime = Grav::instance()['cache']->getLifetime();
- // Check for optional lifetime override
- if (!$stream->test(Token::BLOCK_END_TYPE)) {
- $lifetime_expr = $this->parser->getExpressionParser()->parseExpression();
- $lifetime = $lifetime_expr->getAttribute('value');
- }
- $stream->expect(Token::BLOCK_END_TYPE);
- $body = $this->parser->subparse(array($this, 'decideCacheEnd'), true);
- $stream->expect(Token::BLOCK_END_TYPE);
- return new TwigNodeCache($key, $lifetime, $body, $lineno, $this->getTag());
- }
- /**
- * Decide if current token marks end of cache block.
- *
- * @param Token $token
- * @return bool
- */
- public function decideCacheEnd(Token $token)
- {
- return $token->test('endcache');
- }
- /**
- * {@inheritDoc}
- */
- public function getTag()
- {
- return 'cache';
- }
- }
|