Skip to content
Extraits de code Groupes Projets
RenderTokenParser.php 1,98 ko
Newer Older
  • Learn to ignore specific revisions
  •  * Piwik - free/libre analytics platform
    
     *
     * @link http://piwik.org
     * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
     *
     */
    namespace Piwik\View;
    
    use Twig_Node_Expression_Array;
    
    use Twig_Node_Expression_MethodCall;
    
    use Twig_Token;
    use Twig_TokenParser;
    
    
    /**
     * Defines a new Twig tag that will render a Piwik View.
     *
     * Use the tag like this:
     *
     *     {% render theView %}
     *
     * where `theView` is a variable referencing a View instance.
     */
    class RenderTokenParser extends Twig_TokenParser
    {
        /**
         * Parses the Twig stream and creates a Twig_Node_Include instance that includes
         * the View's template.
         *
         * @return Twig_Node_Include
         */
        public function parse(Twig_Token $token)
        {
            $parser = $this->parser;
            $stream = $parser->getStream();
    
            $view = $parser->getExpressionParser()->parseExpression();
    
    
            $variablesOverride = new Twig_Node_Expression_Array(array(), $token->getLine());
    
            if ($stream->test(Twig_Token::NAME_TYPE, 'with')) {
                $stream->next();
    
                $variablesOverride->addElement($this->parser->getExpressionParser()->parseExpression());
    
            }
    
            $stream->expect(Twig_Token::BLOCK_END_TYPE);
    
            $viewTemplateExpr = new Twig_Node_Expression_MethodCall(
                $view,
                'getTemplateFile',
                new Twig_Node_Expression_Array(array(), $token->getLine()),
                $token->getLine()
            );
    
            $variablesExpr = new Twig_Node_Expression_MethodCall(
                $view,
                'getTemplateVars',
    
                $token->getLine()
            );
    
            return new Twig_Node_Include(
                $viewTemplateExpr,
                $variablesExpr,
                $only = false,
                $ignoreMissing = false,
                $token->getLine()
            );
        }
    
        /**
         * Returns the tag identifier.
         *
         * @return string
         */
        public function getTag()
        {
            return 'render';
        }
    }