Sounds good!<br><br>Keep up the good work ;-)<br><br>Robin<br><br><div><span class="gmail_quote">On 5/3/07, <b class="gmail_sendername">Earl Miles</b> &lt;<a href="mailto:merlin@logrus.com">merlin@logrus.com</a>&gt; wrote:
</span><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">Robin Monks wrote:<br>&gt; Hey,<br>&gt;<br>&gt;&nbsp;&nbsp; From someone who hasn&#39;t really been following the changes, but who
<br>&gt; really hates PHPTemplate (which is designed more toward developers,<br>&gt; rather than graphics artists and end users IMHO) and would much rather<br>&gt; use Smarty... Will Smarty still be available as an option in 6?&nbsp;&nbsp;AKA.
<br>&gt; Will theme engines support still be there?<br>&gt;<br>&gt; Robin<br><br>In fact, I believe that smarty will be better (assuming someone maintains it<br>and ports it to Drupal 6) due to these changes.<br><br>The actual code in 
phptemplate.engine has been vastly reduced, and much of what<br>it does has been made inherent to Drupal, and it the PHPTemplate renderer has<br>been made the default renderer. Theme engines tell Drupal to use a different
<br>renderer (and, if they like a different extension).<br><br>Additionally, theming with templates has been broken up into two sections, one<br>for pre-processing, which is designed to transform data into something more<br>
suited for presentation (i.e, business logic), leaving the actual presenting to<br>the template (presentation code).<br><br>If you&#39;re familiar with the _phptemplate_variables() function in PHPTemplate,<br>what we&#39;ve done is made it so that *every* theme template gets one (actually, a
<br>series) of these in order to massage the variables so that the template itself<br>can do as little as possible. Let&#39;s take a fairly minor example:<br><br>Grabbing a theme function from aggregator module:<br><br>function theme_aggregator_feed($feed) {
<br>&nbsp;&nbsp; $output&nbsp;&nbsp;= &#39;&lt;div class=&quot;feed-source&quot;&gt;&#39;;<br>&nbsp;&nbsp; $output .= theme(&#39;feed_icon&#39;, $feed-&gt;url) .&quot;\n&quot;;<br>&nbsp;&nbsp; $output .= $feed-&gt;image;<br>&nbsp;&nbsp; $output .= &#39;&lt;div class=&quot;feed-description&quot;&gt;&#39;.
<br>aggregator_filter_xss($feed-&gt;description) .&quot;&lt;/div&gt;\n&quot;;<br>&nbsp;&nbsp; $output .= &#39;&lt;div class=&quot;feed-url&quot;&gt;&lt;em&gt;&#39;. t(&#39;URL:&#39;) .&#39;&lt;/em&gt; &#39;. l($feed-&gt;link,<br>$feed-&gt;link, array(&#39;absolute&#39; =&gt; TRUE)) .&quot;&lt;/div&gt;\n&quot;;
<br><br>&nbsp;&nbsp; if ($feed-&gt;checked) {<br>&nbsp;&nbsp;&nbsp;&nbsp; $updated = t(&#39;@time ago&#39;, array(&#39;@time&#39; =&gt; format_interval(time() -<br>$feed-&gt;checked)));<br>&nbsp;&nbsp; }<br>&nbsp;&nbsp; else {<br>&nbsp;&nbsp;&nbsp;&nbsp; $updated = t(&#39;never&#39;);<br>&nbsp;&nbsp; }
<br><br>&nbsp;&nbsp; if (user_access(&#39;administer news feeds&#39;)) {<br>&nbsp;&nbsp;&nbsp;&nbsp; $updated = l($updated, &#39;admin/content/aggregator&#39;);<br>&nbsp;&nbsp; }<br><br>&nbsp;&nbsp; $output .= &#39;&lt;div class=&quot;feed-updated&quot;&gt;&lt;em&gt;&#39;. t(&#39;Updated:&#39;) . &quot;&lt;/em&gt;
<br>$updated&lt;/div&gt;&quot;;<br>&nbsp;&nbsp; $output .= &quot;&lt;/div&gt;\n&quot;;<br><br>&nbsp;&nbsp; return $output;<br>}<br><br>That&#39;s not terribly bad on its own, but it has a couple of things we really<br>don&#39;t like to see at the theme layer, particularly that filter_xss, which is a
<br>real bear when using an alternate theme. The way this will look in Drupal 6<br>will be, approximately:<br><br>/**<br>&nbsp;&nbsp;* All arguments sent to the theme template will be in $variables. The only<br>&nbsp;&nbsp;* argument this template accepts is &#39;feed&#39;, so we&#39;ll look there.
<br>&nbsp;&nbsp;*/<br><br>function template_preprocess_aggregator_feed(&amp;$variables) {<br>&nbsp;&nbsp; $feed = $variables[&#39;feed&#39;];<br>&nbsp;&nbsp; $variables[&#39;feed_icon&#39;] = theme(&#39;feed_icon&#39;, $feed-&gt;url);<br>&nbsp;&nbsp; $variables[&#39;feed_image&#39;] = $feed-&gt;image;
<br>&nbsp;&nbsp; $variables[&#39;description&#39;] = aggregator_filter_xss($feed-&gt;description);<br>&nbsp;&nbsp; $variables[&#39;feed_url&#39;] = l($feed-&gt;link, $feed-&gt;link, array(&#39;absolute&#39; =&gt; TRUE));<br>&nbsp;&nbsp; if ($feed-&gt;checked) {
<br>&nbsp;&nbsp;&nbsp;&nbsp; $variables[&#39;updated&#39;] = t(&#39;@time ago&#39;, array(&#39;@time&#39; =&gt;<br>format_interval(time() - $feed-&gt;checked)));<br>&nbsp;&nbsp; }<br>&nbsp;&nbsp; else {<br>&nbsp;&nbsp;&nbsp;&nbsp; $variables[&#39;updated&#39;] = t(&#39;Never&#39;);
<br>&nbsp;&nbsp; }<br><br>&nbsp;&nbsp; if (user_access(&#39;administer news feeds&#39;)) {<br>&nbsp;&nbsp;&nbsp;&nbsp; $variables[&#39;updated&#39;] = l($updated, &#39;admin/content/aggregator&#39;);<br>&nbsp;&nbsp; }<br>}<br><br>And then, aggregator_feed.tpl.php will look like this:
<br><br>&lt;div class=&quot;feed-source&quot;&gt;<br>&lt;?php print $feed_url ?&gt;<br>&lt;?php print $feed_image ?&gt;<br>&lt;div class=&quot;feed-description&quot;&gt;<br>&nbsp;&nbsp; &lt;?php print $description ?&gt;<br>&lt;/div&gt;
<br>&lt;div class=&quot;feed-url&quot;&gt;<br>&nbsp;&nbsp; &lt;em&gt;&lt;?php print t(&#39;URL:&#39;) ?&gt;&lt;/em&gt; &lt;?php print $feed_url ?&gt;<br>&lt;/div&gt;<br>&lt;div class=&quot;feed-updated&quot;&gt;<br>&nbsp;&nbsp; &lt;?php print t(&#39;Updated:&#39;) ?&gt;&lt;/em&gt; &lt;?php print $updated ?&gt;
<br>&lt;/div&gt;<br><br><br>As you can see, this template can be in almost any language, with the exception<br>that it probably should somehow support t(). However, it doesn&#39;t have to,<br>because we have preserved and improved the old _phptemplate_variables()
<br>functionality. You can create this function:<br><br>phptemplate_preprocess_aggregator_feed(&amp;$variables) {<br>&nbsp;&nbsp;...<br>}<br><br>Or<br><br>phptemplate_engine_preprocess_aggregator_feed(&amp;$variables) {<br>&nbsp;&nbsp;...<br>
}<br><br>Or<br><br>garland_preprocess_aggregator_feed(&amp;$variables) {<br>&nbsp;&nbsp;...<br>}<br><br>Note that the engine gets its very own preprocess function if it needs it. This<br>isn&#39;t used by PHPTemplate at all, at this point, but other templating engines
<br>may need it to do auto-transformation should they so desire.<br><br>}<br></blockquote></div><br><br clear="all"><br>-- <br>Robin Monks<br>@ <a href="http://www.civicspacelabs.org">www.civicspacelabs.org</a><br>@ <a href="http://www.gmking.org">
www.gmking.org</a><br><br>Fax: (419) 791-8076<br><br>&quot;Some people, when confronted with a problem, think &quot;I know, I&#39;ll use regular expressions.&quot; Now they have two problems.&quot; ~IRC