/**
* Returns a rendered structure.
*
* @param StructureInterface $structure The structure, which has been loaded for rendering
* @param array $attributes Additional attributes, which will be passed to twig
* @param bool $preview Defines if the site is rendered in preview mode
* @param bool $partial Defines if only the content block of the template should be rendered
*
* @return Response
*/
protected function renderStructure(StructureInterface $structure, $attributes = [], $preview = false, $partial = false)
{
// extract format twig file
if (!$preview) {
$request = $this->getRequest();
$requestFormat = $request->getRequestFormat();
} else {
$requestFormat = 'html';
}
$viewTemplate = $structure->getView() . '.' . $requestFormat . '.twig';
try {
// get attributes to render template
$data = $this->getAttributes($attributes, $structure, $preview);
// if partial render only content block else full page
if ($partial) {
$content = $this->renderBlock($viewTemplate, 'content', $data);
} else {
$content = parent::renderView($viewTemplate, $data);
}
return new Response($content);
} catch (InvalidArgumentException $e) {
// template not found
throw new HttpException(406, 'Error encountered when rendering content', $e);
}
}