I'd modify clear() to allow it to receive an array as well.
I hadn't thought about the problem of iterating through variables you're not using - to be honest that never comes up for me. When I have multiple templates, I use my template object to call, for example, page.tpl. page.tpl then includes head.tpl and foot.tpl. I'd imagine the parser then parses through the result & replaces any variables it finds.
So... I did my own version of SMTemplate without using regex & it's much faster. ~arborint's code renders 1000 of my templates in about 0.27 seconds. My code renders 1000 of the same template in about 0.1 seconds.
Rather than pasting the whole class, here's just the relevant functions. These two functions replace render()
And finally, here's my template. I added some lorem ipsum & included the variables a few more times - to hopefully get closer to a real-word situation.
Code: Select all
<html>
<head>
<title>
{ $testTitle }
</title>
</head>
<body>
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Praesent gravida sodales mi. Phasellus tristique, neque id gravida blandit, mi urna lobortis est, sit amet vulputate velit lectus ut dolor. Curabitur accumsan metus in lectus. Praesent sit amet felis. Vestibulum ullamcorper. Nam ultricies diam eget pede. Maecenas ac dui scelerisque nulla tempor consectetuer. Pellentesque ligula. Nunc erat tellus, euismod volutpat, sodales non, consectetuer ut, est. Duis posuere, massa in faucibus faucibus, justo nisi tristique diam, ut ultricies lorem purus nec lectus. Nunc sodales fringilla purus. Aliquam sit amet justo. Etiam mollis velit quis tortor. Aliquam vestibulum, diam eget pellentesque vulputate, odio arcu fringilla dui, sit amet malesuada metus neque quis eros. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Proin vel elit sit amet purus elementum viverra. Donec egestas faucibus felis. Integer hendrerit. Donec vel ipsum. In venenatis volutpat erat.
Nulla pharetra dapibus orci. Praesent felis libero, dignissim vitae, varius sed, varius vel, felis. Pellentesque sapien. Cras hendrerit pharetra velit. Vestibulum nisl odio, congue at, scelerisque nec, vehicula sit amet, turpis. Ut arcu quam, congue nec, dapibus sed, egestas quis, lacus. Nunc in diam vel nulla feugiat tempus. Donec non lectus. Nunc ac turpis. Morbi commodo ante a massa.
{ $bar }
In nec velit. Ut vitae erat. Ut pulvinar accumsan nulla. Suspendisse eget purus sit amet massa sodales vehicula. Integer adipiscing mi sed risus. Aliquam justo eros, convallis pulvinar, dictum nec, consectetuer a, urna. Fusce mollis. Phasellus purus mi, placerat sed, tempor a, rutrum sit amet, nulla. Sed lobortis orci sit amet orci. Sed in diam. Nam rhoncus mollis sapien. Curabitur mauris. Duis in lectus quis massa volutpat sodales. Nam pretium vulputate mi. Donec quam nisl, accumsan a, commodo eu, mollis pulvinar, purus. Donec tincidunt neque vel justo. Cras at eros sed orci luctus laoreet.
In vitae quam. Aliquam dictum pulvinar elit. Vestibulum eget nulla. Nulla congue pulvinar nibh. Cras quis erat eu ligula molestie egestas. Vestibulum eget mi. Suspendisse tempor laoreet metus. Suspendisse convallis lacus mollis libero. Sed rhoncus lacinia turpis. Morbi est nisi, sagittis at, sollicitudin nec, eleifend non, nibh. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Vivamus luctus sollicitudin metus. Duis nisi. Sed vestibulum odio. Donec volutpat bibendum ligula.
Aliquam erat volutpat. Vivamus sed pede. In pede. Nullam nec lorem non nisi aliquet auctor. In hac habitasse platea dictumst. Cras condimentum tincidunt justo. Quisque posuere varius nibh. Donec sit amet risus. Nam elementum. Morbi iaculis eros ut risus. Integer et lacus. Praesent id urna id odio eleifend egestas. In fermentum lectus ut elit. Proin vehicula, sapien sed tempus dictum, massa tortor fringilla massa, sed facilisis lectus orci sit amet dolor.
<p><strong>Foo:</strong> { $foo }<br />
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Praesent gravida sodales mi. Phasellus tristique, neque id gravida blandit, mi urna lobortis est, sit amet vulputate velit lectus ut dolor. Curabitur accumsan metus in lectus. Praesent sit amet felis. Vestibulum ullamcorper. Nam ultricies diam eget pede. Maecenas ac dui scelerisque nulla tempor consectetuer. Pellentesque ligula. Nunc erat tellus, euismod volutpat, sodales non, consectetuer ut, est. Duis posuere, massa in faucibus faucibus, justo nisi tristique diam, ut ultricies lorem purus nec lectus. Nunc sodales fringilla purus. Aliquam sit amet justo. Etiam mollis velit quis tortor. Aliquam vestibulum, diam eget pellentesque vulputate, odio arcu fringilla dui, sit amet malesuada metus neque quis eros. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Proin vel elit sit amet purus elementum viverra. Donec egestas faucibus felis. Integer hendrerit. Donec vel ipsum. In venenatis volutpat erat.
Nulla pharetra dapibus orci. Praesent felis libero, dignissim vitae, varius sed, varius vel, felis. Pellentesque sapien. Cras hendrerit pharetra velit. Vestibulum nisl odio, congue at, scelerisque nec, vehicula sit amet, turpis. Ut arcu quam, congue nec, dapibus sed, egestas quis, lacus. Nunc in diam vel nulla feugiat tempus. Donec non lectus. Nunc ac turpis. Morbi commodo ante a massa.
In nec velit. Ut vitae erat. Ut pulvinar accumsan nulla. Suspendisse eget purus sit amet massa sodales vehicula. Integer adipiscing mi sed risus. Aliquam justo eros, convallis pulvinar, dictum nec, consectetuer a, urna. Fusce mollis. Phasellus purus mi, placerat sed, tempor a, rutrum sit amet, nulla. Sed lobortis orci sit amet orci. Sed in diam. Nam rhoncus mollis sapien. Curabitur mauris. Duis in lectus quis massa volutpat sodales. Nam pretium vulputate mi. Donec quam nisl, accumsan a, commodo eu, mollis pulvinar, purus. Donec tincidunt neque vel justo. Cras at eros sed orci luctus laoreet.
In vitae quam. Aliquam dictum pulvinar elit. Vestibulum eget nulla. Nulla congue pulvinar nibh. Cras quis erat eu ligula molestie egestas. Vestibulum eget mi. Suspendisse tempor laoreet metus. Suspendisse convallis lacus mollis libero. Sed rhoncus lacinia turpis. Morbi est nisi, sagittis at, sollicitudin nec, eleifend non, nibh. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Vivamus luctus sollicitudin metus. Duis nisi. Sed vestibulum odio. Donec volutpat bibendum ligula.
Aliquam erat volutpat. Vivamus sed pede. In pede. Nullam nec lorem non nisi aliquet auctor. In hac habitasse platea dictumst. Cras condimentum tincidunt justo. Quisque posuere varius nibh. Donec sit amet risus. Nam elementum. Morbi iaculis eros ut risus. Integer et lacus. Praesent id urna id odio eleifend egestas. In fermentum lectus ut elit. Proin vehicula, sapien sed tempus dictum, massa tortor fringilla massa, sed facilisis lectus orci sit amet dolor.
<strong>Test Variable:</strong> { $test }<br />
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Praesent gravida sodales mi. Phasellus tristique, neque id gravida blandit, mi urna lobortis est, sit amet vulputate velit lectus ut dolor. Curabitur accumsan metus in lectus. Praesent sit amet felis. Vestibulum ullamcorper. Nam ultricies diam eget pede. Maecenas ac dui scelerisque nulla tempor consectetuer. Pellentesque ligula. Nunc erat tellus, euismod volutpat, sodales non, consectetuer ut, est. Duis posuere, massa in faucibus faucibus, justo nisi tristique diam, ut ultricies lorem purus nec lectus. Nunc sodales fringilla purus. Aliquam sit amet justo. Etiam mollis velit quis tortor. Aliquam vestibulum, diam eget pellentesque vulputate, odio arcu fringilla dui, sit amet malesuada metus neque quis eros. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Proin vel elit sit amet purus elementum viverra. Donec egestas faucibus felis. Integer hendrerit. Donec vel ipsum. In venenatis volutpat erat.
Nulla pharetra dapibus orci. Praesent felis libero, dignissim vitae, varius sed, varius vel, felis. Pellentesque sapien. Cras hendrerit pharetra velit. Vestibulum nisl odio, congue at, scelerisque nec, vehicula sit amet, turpis. Ut arcu quam, congue nec, dapibus sed, egestas quis, lacus. Nunc in diam vel nulla feugiat tempus. Donec non lectus. Nunc ac turpis. Morbi commodo ante a massa.
In nec velit. Ut vitae erat. Ut pulvinar accumsan nulla. Suspendisse eget purus sit amet massa sodales vehicula. Integer adipiscing mi sed risus. Aliquam justo eros, convallis pulvinar, dictum nec, consectetuer a, urna. Fusce mollis. Phasellus purus mi, placerat sed, tempor a, rutrum sit amet, nulla. Sed lobortis orci sit amet orci. Sed in diam. Nam rhoncus mollis sapien. Curabitur mauris. Duis in lectus quis massa volutpat sodales. Nam pretium vulputate mi. Donec quam nisl, accumsan a, commodo eu, mollis pulvinar, purus. Donec tincidunt neque vel justo. Cras at eros sed orci luctus laoreet.
{ $foo }
In vitae quam. Aliquam dictum pulvinar elit. Vestibulum eget nulla. Nulla congue pulvinar nibh. Cras quis erat eu ligula molestie egestas. Vestibulum eget mi. Suspendisse tempor laoreet metus. Suspendisse convallis lacus mollis libero. Sed rhoncus lacinia turpis. Morbi est nisi, sagittis at, sollicitudin nec, eleifend non, nibh. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Vivamus luctus sollicitudin metus. Duis nisi. Sed vestibulum odio. Donec volutpat bibendum ligula.
Aliquam erat volutpat. Vivamus sed pede. In pede. Nullam nec lorem non nisi aliquet auctor. In hac habitasse platea dictumst. Cras condimentum tincidunt justo. Quisque posuere varius nibh. Donec sit amet risus. Nam elementum. Morbi iaculis eros ut risus. Integer et lacus. Praesent id urna id odio eleifend egestas. In fermentum lectus ut elit. Proin vehicula, sapien sed tempus dictum, massa tortor fringilla massa, sed facilisis lectus orci sit amet dolor.
<strong>Test Array Variable:</strong> { $testArray.variable.nested.deep }</p>
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Praesent gravida sodales mi. Phasellus tristique, neque id gravida blandit, mi urna lobortis est, sit amet vulputate velit lectus ut dolor. Curabitur accumsan metus in lectus. Praesent sit amet felis. Vestibulum ullamcorper. Nam ultricies diam eget pede. Maecenas ac dui scelerisque nulla tempor consectetuer. Pellentesque ligula. Nunc erat tellus, euismod volutpat, sodales non, consectetuer ut, est. Duis posuere, massa in faucibus faucibus, justo nisi tristique diam, ut ultricies lorem purus nec lectus. Nunc sodales fringilla purus. Aliquam sit amet justo. Etiam mollis velit quis tortor. Aliquam vestibulum, diam eget pellentesque vulputate, odio arcu fringilla dui, sit amet malesuada metus neque quis eros. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Proin vel elit sit amet purus elementum viverra. Donec egestas faucibus felis. Integer hendrerit. Donec vel ipsum. In venenatis volutpat erat.
Nulla pharetra dapibus orci. Praesent felis libero, dignissim vitae, varius sed, varius vel, felis. Pellentesque sapien. Cras hendrerit pharetra velit. Vestibulum nisl odio, congue at, scelerisque nec, vehicula sit amet, turpis. Ut arcu quam, congue nec, dapibus sed, egestas quis, lacus. Nunc in diam vel nulla feugiat tempus. Donec non lectus. Nunc ac turpis. Morbi commodo ante a massa.
{ $bar } { $bar }
In nec velit. Ut vitae erat. Ut pulvinar accumsan nulla. Suspendisse eget purus sit amet massa sodales vehicula. Integer adipiscing mi sed risus. Aliquam justo eros, convallis pulvinar, dictum nec, consectetuer a, urna. Fusce mollis. Phasellus purus mi, placerat sed, tempor a, rutrum sit amet, nulla. Sed lobortis orci sit amet orci. Sed in diam. Nam rhoncus mollis sapien. Curabitur mauris. Duis in lectus quis massa volutpat sodales. Nam pretium vulputate mi. Donec quam nisl, accumsan a, commodo eu, mollis pulvinar, purus. Donec tincidunt neque vel justo. Cras at eros sed orci luctus laoreet.
In vitae quam. Aliquam dictum pulvinar elit. Vestibulum eget nulla. Nulla congue pulvinar nibh. Cras quis erat eu ligula molestie egestas. Vestibulum eget mi. Suspendisse tempor laoreet metus. Suspendisse convallis lacus mollis libero. Sed rhoncus lacinia turpis. Morbi est nisi, sagittis at, sollicitudin nec, eleifend non, nibh. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Vivamus luctus sollicitudin metus. Duis nisi. Sed vestibulum odio. Donec volutpat bibendum ligula.
{ $foo }
Aliquam erat volutpat. Vivamus sed pede. In pede. Nullam nec lorem non nisi aliquet auctor. In hac habitasse platea dictumst. Cras condimentum tincidunt justo. Quisque posuere varius nibh. Donec sit amet risus. Nam elementum. Morbi iaculis eros ut risus. Integer et lacus. Praesent id urna id odio eleifend egestas. In fermentum lectus ut elit. Proin vehicula, sapien sed tempus dictum, massa tortor fringilla massa, sed facilisis lectus orci sit amet dolor.
<p>{ $testArray.not.valid.variable }</p>
</body>
</html>