Browse Source

Add support for extra template params.

ADmad 10 years ago
parent
commit
25bcfaaab5
2 changed files with 21 additions and 2 deletions
  1. 6 1
      src/View/StringTemplate.php
  2. 15 1
      tests/TestCase/View/StringTemplateTest.php

+ 6 - 1
src/View/StringTemplate.php

@@ -231,6 +231,11 @@ class StringTemplate
         if ($template === null) {
             return null;
         }
+
+        if (isset($data['templateParams'])) {
+            $data += $data['templateParams'];
+            unset($data['templateParams']);
+        }
         $replace = [];
         foreach ($placeholders as $placeholder) {
             $replace[] = isset($data[$placeholder]) ? $data[$placeholder] : null;
@@ -273,7 +278,7 @@ class StringTemplate
             $exclude = [];
         }
 
-        $exclude = ['escape' => true, 'idPrefix' => true] + array_flip($exclude);
+        $exclude = ['escape' => true, 'idPrefix' => true, 'templateParams' => true] + array_flip($exclude);
         $escape = $options['escape'];
         $attributes = [];
 

+ 15 - 1
tests/TestCase/View/StringTemplateTest.php

@@ -90,7 +90,8 @@ class StringTemplateTest extends TestCase
     {
         $templates = [
             'link' => '<a href="{{url}}">{{text}}</a>',
-            'text' => '{{text}}'
+            'text' => '{{text}}',
+            'custom' => '<custom {{standard}} v1="{{var1}}" v2="{{var2}}" />'
         ];
         $this->template->add($templates);
 
@@ -108,6 +109,12 @@ class StringTemplateTest extends TestCase
             'text' => 'example'
         ]);
         $this->assertEquals('<a href="/">example</a>', $result);
+
+        $result = $this->template->format('custom', [
+            'standard' => 'default',
+            'templateParams' => ['var1' => 'foo']
+        ]);
+        $this->assertEquals('<custom default v1="foo" v2="" />', $result);
     }
 
     /**
@@ -196,6 +203,13 @@ class StringTemplateTest extends TestCase
             ' data-hero="&lt;batman&gt;"',
             $result
         );
+
+        $attrs = ['name' => 'bruce', 'data-hero' => '<batman>', 'templateParams' => ['foo' => 'bar']];
+        $result = $this->template->formatAttributes($attrs, ['name']);
+        $this->assertEquals(
+            ' data-hero="&lt;batman&gt;"',
+            $result
+        );
     }
 
     /**