protected function injectTemplate(Page $page) { /** @var $twig \Grav\Common\Twig\Twig */ $twig = $this->grav['twig']; $original_content = $page->content(); $template = 'partials/recaptcha_container.html.twig'; $data = ['recaptchacontact' => $this->grav['config']->get('plugins.recaptchacontact'), 'page' => $page]; $data['recaptchacontact']['message'] = $this->submissionMessage; // The surrounding div tags are SOLELY a workaround for a // Parsedown bug that throws away anything after the page content // which, in this case is the entire form, if it is not surrounded. $page->content('<div>' . $original_content . $twig->processTemplate($template, $data) . '</div>'); }
/** * Twig process that renders a page item. It supports two variations: * 1) Handles modular pages by rendering a specific page based on its modular twig template * 2) Renders individual page items for twig processing before the site rendering * * @param Page $item The page item to render * @param string $content Optional content override * @return string The rendered output * @throws \Twig_Error_Loader */ public function processPage(Page $item, $content = null) { $content = $content !== null ? $content : $item->content(); // override the twig header vars for local resolution $this->grav->fireEvent('onTwigPageVariables'); $twig_vars = $this->twig_vars; $twig_vars['page'] = $item; $twig_vars['media'] = $item->media(); $twig_vars['header'] = $item->header(); $local_twig = clone $this->twig; $modular_twig = $item->modularTwig(); $process_twig = isset($item->header()->process['twig']) ? $item->header()->process['twig'] : false; try { // Process Modular Twig if ($modular_twig) { $twig_vars['content'] = $content; $template = $item->template() . TEMPLATE_EXT; $output = $content = $local_twig->render($template, $twig_vars); } // Process in-page Twig if (!$modular_twig || $modular_twig && $process_twig) { $name = '@Page:' . $item->path(); $this->setTemplate($name, $content); $output = $local_twig->render($name, $twig_vars); } } catch (\Twig_Error_Loader $e) { throw new \RuntimeException($e->getRawMessage(), 404, $e); } return $output; }
/** * Replaces page object with admin one. */ public function onAdminPagesInitialized() { // Create admin page. $page = new Page(); $page->init(new \SplFileInfo(__DIR__ . "/pages/gantry.md")); $page->slug('gantry'); // Dispatch Gantry in output buffer. ob_start(); $gantry = Gantry::instance(); $gantry['router']->dispatch(); $content = ob_get_clean(); // Store response into the page. $page->content($content); // Hook page into Grav as current page. unset($this->grav['page']); $this->grav['page'] = function () use($page) { return $page; }; }
/** * @param Page $page * @param Data $config * @return string * @throws \ErrorException * @throws \Exception */ protected function processPage(Page $page, Data $config) { if ($config->get('responsive')) { $this->enableResponsiveness($config); } $container = $this->getEmbedContainer($config); $services = array_filter((array) $config->get('services', []), function ($service) { return !empty($service['enabled']); }); $usedServices = []; $content = $page->content(); foreach ($services as $serviceName => $serviceConfig) { $service = $this->getServiceByName($serviceName, $serviceConfig); $content = $service->processHtml($content, $container, $processedCnt); if ($processedCnt > 0) { $usedServices[] = $serviceName; } } if (!empty($usedServices)) { $this->defineAssets($page, $config, $usedServices); } return $content; }
/** * Twig process that renders a page item. It supports two variations: * 1) Handles modular pages by rendering a specific page based on its modular twig template * 2) Renders individual page items for twig processing before the site rendering * * @param Page $item The page item to render * @param string $content Optional content override * @return string The rendered output * @throws \Twig_Error_Loader */ public function processPage(Page $item, $content = null) { $content = $content !== null ? $content : $item->content(); // override the twig header vars for local resolution $this->grav->fireEvent('onTwigPageVariables'); $twig_vars = $this->twig_vars; $twig_vars['page'] = $item; $twig_vars['media'] = $item->media(); $twig_vars['header'] = $item->header(); $local_twig = clone $this->twig; // Get Twig template layout if ($item->modularTwig()) { $twig_vars['content'] = $content; $template = $item->template() . TEMPLATE_EXT; $output = $local_twig->render($template, $twig_vars); } else { $name = '@Page:' . $item->path(); $this->setTemplate($name, $content); $output = $local_twig->render($name, $twig_vars); } return $output; }