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>');
 }
Example #2
0
 /**
  * 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;
 }
Example #3
0
 /**
  * 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;
 }
Example #5
0
 /**
  * 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;
 }