page: store placeholder values in $Page object
[minimedit.git] / article.inc.php
index c63089843c5d89f3da48fbb165683a2cda47491b..cff69ffdec449dcd44fccd1299abc2a793aa1d3e 100644 (file)
@@ -18,6 +18,7 @@ class ArchiveArticle
 {
        public $raw, $title, $body; # file contents
        public $meta = [];  # head metadata properties
+       public $place = []; # template variables replaced in render()
 
        function __construct($path)
        {
@@ -184,10 +185,9 @@ class ArchiveArticle
                $Page = clone $this;
                $Page->handler = $Page->handler . $Page->path; // .= with explicit getter
                $Page->path = '';
-               $Place = $GLOBALS['Place'];
                foreach ($params as $param) {
                        if ($set = strpos($param, '=')) {
-                               $Place[ substr($param, 0, $set) ] = substr($param, $set + 1);
+                               $Page->place[ substr($param, 0, $set) ] = substr($param, $set + 1);
                        }
                        elseif (!empty($param)) {
                                $Page->path .= '/'.$param;
@@ -205,11 +205,11 @@ class ArchiveArticle
                }
        }
 
-       function render($blocks = [])
+       function render()
        {
                $doc = ob_get_clean();
 
-               if (!empty($blocks['warn'])) {
+               if (!empty($this->place['warn'])) {
                        $warn = '<p class="warn">[[warn]]</p>';
                        if ($offset = strpos($doc, '</h2>')) {
                                $doc = substr_replace($doc, "\n\n".$warn, $offset + 5, 0);
@@ -226,9 +226,9 @@ class ArchiveArticle
 
                return preg_replace_callback(
                        '{ \[\[ ([^] ]+) ([^]]*) \]\] }x',
-                       function ($sub) use ($blocks) {
+                       function ($sub) {
                                list ($placeholder, $name, $params) = $sub;
-                               $html = $blocks[$name] ??
+                               $html = $this->place[$name] ??
                                        $this->widget($name, explode(' ', $params));
                                if (empty($html) or $html[0] != '<') {
                                        $html = "<span>$html</span>";