Carew\Event\Listener\Decorator\Twig::preRenderDocument PHP Method

preRenderDocument() public method

public preRenderDocument ( Document $document, array &$documents = [] )
$document Carew\Document
$documents array
    public function preRenderDocument(Document $document, array &$documents = array())
    {
        $this->setTwigGlobals($document);
        // Force autoloading of Twig_Extension_StringLoader
        $this->twig->getExtension('string_loader');
        try {
            $template = twig_template_from_string($this->twig, $document->getBody() ?: '');
        } catch (\Twig_Error $e) {
            throw $this->enhanceTwigException($e, $document);
        }
        $nbsItems = $template->getNbsItems(array());
        $maxesPerPage = $template->getMaxesPerPage();
        if (!$this->haveToPaginate($nbsItems, $maxesPerPage)) {
            $parameters = array();
            foreach ($nbsItems as $key => $nbItems) {
                $parameters[sprintf('__offset_%d__', $key)] = 0;
                $parameters[sprintf('__pages_%d__', $key)] = array($document);
                $parameters[sprintf('__current_page_%d__', $key)] = 1;
            }
            try {
                $document->setBody($template->render($parameters));
            } catch (\Twig_Error $e) {
                throw $this->enhanceTwigException($e, $document, $template);
            }
        }
        $parameters = array();
        $paginations = array();
        foreach ($nbsItems as $key => $nbItems) {
            $nbPages = ceil($nbItems / $maxesPerPage[$key]);
            $paginations[$key] = $this->generatePages($document, $nbPages, 0 == $key, $key);
            $parameters[sprintf('__offset_%d__', $key)] = 0;
            $parameters[sprintf('__pages_%d__', $key)] = $paginations[$key];
            $parameters[sprintf('__current_page_%d__', $key)] = 1;
        }
        try {
            $body = $template->render($parameters);
        } catch (\Twig_Error $e) {
            throw $this->enhanceTwigException($e, $document, $template);
        }
        $document->setBody($body);
        foreach ($paginations as $key => $pages) {
            $parametersTmp = $parameters;
            foreach ($pages as $nbPage => $page) {
                if (1 == $nbPage) {
                    continue;
                }
                $parametersTmp[sprintf('__offset_%d__', $key)] = ($nbPage - 1) * $maxesPerPage[$key];
                $parametersTmp[sprintf('__current_page_%d__', $key)] = $nbPage;
                try {
                    $body = $template->render($parametersTmp);
                } catch (\Twig_Error $e) {
                    throw $this->enhanceTwigException($e, $document, $template);
                }
                $page->setBody($body);
                $documents[] = $page;
            }
        }
    }