|
@@ -431,13 +431,11 @@ class Pico
|
|
|
);
|
|
|
|
|
|
// render template
|
|
|
- $this->registerTwig();
|
|
|
-
|
|
|
$this->twigVariables = $this->getTwigVariables();
|
|
|
$this->twigTemplate = $this->getTwigTemplate();
|
|
|
$this->triggerEvent('onPageRendering', array(&$this->twigTemplate, &$this->twigVariables));
|
|
|
|
|
|
- $output = $this->twig->render($this->twigTemplate, $this->twigVariables);
|
|
|
+ $output = $this->getTwig()->render($this->twigTemplate, $this->twigVariables);
|
|
|
$this->triggerEvent('onPageRendered', array(&$output));
|
|
|
|
|
|
return $output;
|
|
@@ -1589,62 +1587,45 @@ class Pico
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * Registers the Twig template engine
|
|
|
- *
|
|
|
- * This method also registers Pico's core Twig filters `link` and `content`
|
|
|
- * as well as Pico's {@see PicoTwigExtension} Twig extension.
|
|
|
+ * Returns the Twig template engine
|
|
|
*
|
|
|
* This method triggers the `onTwigRegistered` event when the Twig template
|
|
|
- * engine wasn't initiated yet.
|
|
|
+ * engine wasn't initiated yet. When initiating Twig, this method also
|
|
|
+ * registers Pico's core Twig filters `link` and `content` as well as
|
|
|
+ * Pico's {@see PicoTwigExtension} Twig extension.
|
|
|
*
|
|
|
* @see Pico::getTwig()
|
|
|
* @see http://twig.sensiolabs.org/ Twig website
|
|
|
* @see https://github.com/twigphp/Twig Twig on GitHub
|
|
|
- * @return void
|
|
|
- */
|
|
|
- protected function registerTwig()
|
|
|
- {
|
|
|
- if ($this->twig !== null) {
|
|
|
- // nothing to do
|
|
|
- return;
|
|
|
- }
|
|
|
-
|
|
|
- $twigLoader = new Twig_Loader_Filesystem($this->getThemesDir() . $this->getConfig('theme'));
|
|
|
- $this->twig = new Twig_Environment($twigLoader, $this->getConfig('twig_config'));
|
|
|
- $this->twig->addExtension(new Twig_Extension_Debug());
|
|
|
- $this->twig->addExtension(new PicoTwigExtension($this));
|
|
|
-
|
|
|
- // register content filter
|
|
|
- // we pass the $pages array by reference to prevent multiple parser runs for the same page
|
|
|
- // this is the reason why we can't register this filter as part of PicoTwigExtension
|
|
|
- $pico = $this;
|
|
|
- $pages = &$this->pages;
|
|
|
- $this->twig->addFilter(new Twig_SimpleFilter('content', function ($page) use ($pico, &$pages) {
|
|
|
- if (isset($pages[$page])) {
|
|
|
- $pageData = &$pages[$page];
|
|
|
- if (!isset($pageData['content'])) {
|
|
|
- $pageData['content'] = $pico->prepareFileContent($pageData['raw_content'], $pageData['meta']);
|
|
|
- $pageData['content'] = $pico->parseFileContent($pageData['content']);
|
|
|
- }
|
|
|
- return $pageData['content'];
|
|
|
- }
|
|
|
- return null;
|
|
|
- }));
|
|
|
-
|
|
|
- // trigger onTwigRegistration event
|
|
|
- $this->triggerEvent('onTwigRegistered', array(&$this->twig));
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * Returns the twig template engine
|
|
|
- *
|
|
|
- * @see Pico::registerTwig()
|
|
|
* @return Twig_Environment|null Twig template engine
|
|
|
*/
|
|
|
public function getTwig()
|
|
|
{
|
|
|
if ($this->twig === null) {
|
|
|
- $this->registerTwig();
|
|
|
+ $twigLoader = new Twig_Loader_Filesystem($this->getThemesDir() . $this->getConfig('theme'));
|
|
|
+ $this->twig = new Twig_Environment($twigLoader, $this->getConfig('twig_config'));
|
|
|
+ $this->twig->addExtension(new Twig_Extension_Debug());
|
|
|
+ $this->twig->addExtension(new PicoTwigExtension($this));
|
|
|
+
|
|
|
+ // register content filter
|
|
|
+ // we pass the $pages array by reference to prevent multiple parser runs for the same page
|
|
|
+ // this is the reason why we can't register this filter as part of PicoTwigExtension
|
|
|
+ $pico = $this;
|
|
|
+ $pages = &$this->pages;
|
|
|
+ $this->twig->addFilter(new Twig_SimpleFilter('content', function ($page) use ($pico, &$pages) {
|
|
|
+ if (isset($pages[$page])) {
|
|
|
+ $pageData = &$pages[$page];
|
|
|
+ if (!isset($pageData['content'])) {
|
|
|
+ $pageData['content'] = $pico->prepareFileContent($pageData['raw_content'], $pageData['meta']);
|
|
|
+ $pageData['content'] = $pico->parseFileContent($pageData['content']);
|
|
|
+ }
|
|
|
+ return $pageData['content'];
|
|
|
+ }
|
|
|
+ return null;
|
|
|
+ }));
|
|
|
+
|
|
|
+ // trigger onTwigRegistration event
|
|
|
+ $this->triggerEvent('onTwigRegistered', array(&$this->twig));
|
|
|
}
|
|
|
|
|
|
return $this->twig;
|
|
@@ -1660,10 +1641,6 @@ class Pico
|
|
|
*/
|
|
|
protected function getTwigVariables()
|
|
|
{
|
|
|
- if ($this->twigVariables !== null) {
|
|
|
- return $this->twigVariables;
|
|
|
- }
|
|
|
-
|
|
|
return array(
|
|
|
'config' => $this->getConfig(),
|
|
|
'base_dir' => rtrim($this->getRootDir(), '/'),
|
|
@@ -1688,10 +1665,6 @@ class Pico
|
|
|
*/
|
|
|
protected function getTwigTemplate()
|
|
|
{
|
|
|
- if ($this->twigTemplate !== null) {
|
|
|
- return $this->twigTemplate;
|
|
|
- }
|
|
|
-
|
|
|
$templateName = $this->meta['template'] ?: 'index';
|
|
|
|
|
|
if (file_exists($this->getThemesDir() . $this->getConfig('theme') . '/' . $templateName . '.twig')) {
|