0
@@ -16,6 +16,7 @@ class midcom_core_services_templating_midgard implements midcom_core_services_te
0
private $dispatcher = null;
0
private $stacks = array();
0
private $stack_elements = array();
0
+ private $cache_directory = '';
0
private $elements_shown = array();
0
@@ -24,6 +25,37 @@ class midcom_core_services_templating_midgard implements midcom_core_services_te
0
$this->stacks[0] = array();
0
+ private function get_cache_identifier()
0
+ return "{$_MIDGARD['host']}-{$_MIDGARD['page']}-{$_MIDGARD['style']}-" . $_MIDCOM->context->get_current_context() . "-{$_MIDCOM->context->route_id}";
0
+ private function get_cache_directory()
0
+ switch ($_MIDGARD['config']['prefix'])
0
+ return '/var/cache/midgard';
0
+ return "{$_MIDGARD['config']['prefix']}/var/cache/midgard";
0
+ private function prepare_cache()
0
+ $this->cache_directory = str_replace('__MIDGARDCACHE__', $this->get_cache_directory(), $_MIDCOM->configuration->get('cache_directory'));
0
+ if (!file_exists($this->cache_directory))
0
+ mkdir($this->cache_directory, 0777, true);
0
+ if (!is_writable($this->cache_directory))
0
+ throw new Exception("Cache directory {$cache_directory} is not writable");
0
public function append_directory($directory)
0
if (!file_exists($directory))
0
@@ -174,9 +206,10 @@ class midcom_core_services_templating_midgard implements midcom_core_services_te
0
if (is_array($element))
0
+ // Element is array in the preg_replace_callback case (evaluating element includes)
0
$element = $element[1];
0
$stack = $_MIDCOM->context->get_current_context();
0
if (!isset($this->stacks[$stack]))
0
@@ -188,6 +221,11 @@ class midcom_core_services_templating_midgard implements midcom_core_services_te
0
$this->stack_elements[$stack] = array();
0
+ if ($element == 'content')
0
+ $element = $_MIDCOM->context->content_entry_point;
0
if (isset($this->stack_elements[$stack][$element]))
0
return $this->stack_elements[$stack][$element];
0
@@ -219,7 +257,7 @@ class midcom_core_services_templating_midgard implements midcom_core_services_te
0
$this->stack_elements[$stack][$element] = $element_content;
0
-
eval('?>' . preg_replace_callback("/<\\(([a-zA-Z0-9 _-]+)\\)>/", array($this, 'get_element'), $this->stack_elements[$stack][$element]));
0
+
return preg_replace_callback("/<\\(([a-zA-Z0-9 _-]+)\\)>/", array($this, 'get_element'), $this->stack_elements[$stack][$element]);
0
@@ -325,10 +363,8 @@ class midcom_core_services_templating_midgard implements midcom_core_services_te
0
$_MIDCOM->context->create();
0
$data = $this->dynamic_call($component_name, $route_id, $arguments, false);
0
- $this->display(ob_get_clean());
0
+ $this->template('content_entry_point');
0
$_MIDCOM->context->delete();
0
@@ -336,17 +372,17 @@ class midcom_core_services_templating_midgard implements midcom_core_services_te
0
* Include the template based on either global or controller-specific template entry point.
0
- public function template(
)
0
+ public function template(
$element_identifier = 'template_entry_point')
0
- $this->get_element($_MIDCOM->context->template_entry_point);
0
- * Include the content template based on either global or controller-specific template entry point.
0
- public function content()
0
- $this->get_element($_MIDCOM->context->content_entry_point);
0
+ $this->prepare_cache();
0
+ $cache_file = $this->cache_directory . '/' . $this->get_cache_identifier() . '.php';
0
+ if (file_exists($cache_file))
0
+ file_put_contents($cache_file, $this->get_element($_MIDCOM->context->$element_identifier));
0
@@ -354,10 +390,15 @@ class midcom_core_services_templating_midgard implements midcom_core_services_te
0
* @param string $content Content to display
0
- public function display(
$content)
0
+ public function display(
)
0
$data = $_MIDCOM->context->get();
0
+ $cache_file = $this->cache_directory . '/' . $this->get_cache_identifier() . '.php';
0
+ $content = ob_get_clean();
0
switch ($data['template_engine'])
0
@@ -372,7 +413,7 @@ class midcom_core_services_templating_midgard implements midcom_core_services_te
0
$_MIDCOM->timer->setMarker('post-require');
0
+ $tal = new PHPTAL(
$this->get_cache_identifier());
0
$tal->show_toolbar = false;
0
if ( isset($_MIDCOM->toolbar)
Comments
No one has commented yet.