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;
}
}
}