Differences

This shows you the differences between two versions of the page.

filters [2010/12/05 14:19]
213.253.3.111 MTnGZpHBHxrMn
filters [2013/05/24 08:58] (current)
Line 1: Line 1:
-iAmSfY &lt;a href="http://iiggbsdapffr.com/">iiggbsdapffr</a>, [url=http://gijtxgoznjdh.com/]gijtxgoznjdh[/url], [link=http://cbjgpnbdmxwr.com/]cbjgpnbdmxwr[/link], http://ecyupqwhbmyc.com/+====== Prefilters ====== 
 + 
 + 
 +Implementation is not finished yet! But have a look at the source of  
 +PHPTAL/PreFilter.php: 
 + 
 +http://phptal.org/files/PHPTAL-1.2.1b3.tar.gz 
 + 
 + 
 +There's base abstract class for prefilters. Previously you had to   
 +implement interface, now you'll have to extend the class. This change   
 +allows me to add new ways of filtering in the future without any   
 +breaking changes in the interface. 
 + 
 +The class has methods like ''filterDOM($node)'', ''filter($source)'' — you   
 +just override which ones you want. You can override all of them at   
 +once if you need, all will be called. 
 + 
 +DOM version lets you edit PHPTAL DOM nodes after they've been parsed   
 +and edit exactly what PHPTAL &quot;sees". 
 + 
 + 
 +There's also ''filterDOMFragment($node)'' method. I plan to add   
 +phptal:filter="name_of_the_filter" attribute, which will let you apply   
 +filters selectively, e.g. (this is not implemented yet) 
 + 
 +   <ul phptal:filter="remove_whitespace"> 
 +    <li>IE hates newlines in lists</li> 
 +   </ul> 
 + 
 +   <script phptal:filter="minify_javascript"> 
 +    etc. 
 +   </script> 
 + 
 +I've replaced'' PHPTAL->setPreFilter($filter)'' with ''PHPTAL->addPreFilter  
 +($filter, $name = null)''. Yes, this means you can have any number of   
 +filters without workarounds (finally! :) 
 + 
 + 
 +I wonder if there should be separate method for adding named   
 +prefilters for use with ''phptal:filter'' only? (e.g. you might want to   
 +make JS minification prefilter available, but you don't want to minify   
 +entire file). Currently I expect this to be handled within filter,   
 +i.e. filter would implement ''filterDOMFragment()'' only, and have   
 +''filterDOM()'' do nothing. 
 + 
 + 
 +Is that easy to use? Powerful enough? What do you think? 
 + 
 +===== Suggested improvements ===== 
 + 
 +[[http://lists.motion-twin.com/pipermail/phptal/2009-September/001865.html|link]] [[http://lists.motion-twin.com/pipermail/phptal/2009-September/001871.html|prototype]
 + 
 +The API looks ok to me, just one thing, since it's not a runtime operation 
 +(in the sense that a php file is generated for the template),  I think it'll 
 +be great if it used something along the lines of Zend_Loader_PluginLoader. 
 + 
 +Which basically when setup with paths and class prefixes is able to find 
 +"plugins" in several folders. This would allow to have a set of default 
 +filters in PHPTAL distribution but override them and create new ones easily 
 +just by placing the class files in a directory, not needing to register them 
 +manually at runtime, which once the template is compiled, is of no use. 
 + 
 +So -- ''phptal:filter="remove_whitespace"'' -- would automatically try to 
 +include and instantiate a class for that filter. 
 + 
 +While -- ''%%PHPTAL->addPreFilter("remove_whitespace")%%'' -- would just store the 
 +name for when compiling the template and instantiate the class then.