Re: [SMARTY-DEV] making Smarty_Compiler more flexible

From: Date: Tue, 28 Jan 2003 15:36:48 +0000
Subject: Re: [SMARTY-DEV] making Smarty_Compiler more flexible
References: 1 2  Groups: php.smarty.dev 
Request: Send a blank email to php-smarty-dev+get-644@lists.php.net to get a copy of this message
Following changes: - Smarty_Compiler has a back reference to the calling Smarty class called Smarty_Compiler::$_smarty - New method Smarty::_load_compiler() which returns a compiler object - Altered Smarty::_compile_template() to use Smarty::_load_compiler() method bye, André ------------------------------------------------ cvs diff Smarty_Compiler.class.php (in directory C:\CVS-Checkout\smarty\) Index: Smarty_Compiler.class.php =================================================================== RCS file: /repository/smarty/Smarty_Compiler.class.php,v retrieving revision 1.152 diff -r1.152 Smarty_Compiler.class.php 66a67 > var $_smarty = null; // caller reference 72c73 < function Smarty_Compiler() --- > function Smarty_Compiler(&$smarty) 181c182,184 < } --- > // Remember the caller reference > $this->_smarty =& $smarty; > } ------------------------------------------------ cvs diff Smarty.class.php (in directory C:\CVS-Checkout\smarty\) Index: Smarty.class.php =================================================================== RCS file: /repository/smarty/Smarty.class.php,v retrieving revision 1.334 diff -r1.334 Smarty.class.php 1120,1121c1120,1121 < Function: _compile_template() < Purpose: called to compile the templates --- > Function: _load_compiler() > Input: instantiates the compiler class 1123c1123 < function _compile_template($tpl_file, $template_source, &$template_compiled) --- > function &_load_compiler() 1132c1132,1133 < $smarty_compiler = new $this->compiler_class; --- > return new $this->compiler_class(&$this); > } 1133a1135,1141 > /*======================================================================*\ > Function: _compile_template() > Purpose: called to compile the templates > \*======================================================================*/ > function _compile_template($tpl_file, $template_source, &$template_compiled) > { > $smarty_compiler = $this->_load_compiler(); ------------------------------------------------ "Monte Ohrt" <monte@ispi.net> schrieb im Newsbeitrag news:1043766427.26389.28.camel@lena.ispi.prv... > On Tue, 2003-01-28 at 04:32, André Rabold wrote: > > Hi, > > > > Some using some advanced features I need to make Smarty_Compiler more > > flexible. > > Here a some feature request: > > > > 1) Smarty::$compiler_class can be set to anything I like but Smarty tries to > > load it from SMARTY_DIR with extension ".class.php". That's not really a > > good solution I think. I would first try to check if the compiler class does > > not already exists. So the programmer could include his own class manually. > > I think this has come up before, I'm not sure why it was done this way. > It might be that the $compiler_class variable is used for both the > filename and the class name, so with one variable it can know what file > to load and what class to reference. We could introduce a new variable > with the full pathname/filename. > > > > > Line 1125: > > if (!class_exists($this->compiler_class)) > > include_once SMARTY_DIR.$this->compiler_class . '.class.php'; > > > > 2) function _compile_template is not flexible enough. I needed to set some > > more variables of the compiler class which is not possible easily. You need > > to copy past the whole function to your own Smarty class. Perhaps you could > > consider instantiating the Compiler in another function > > > > Smarty.class.php: > > function _load_compiler() { > > if (!class_exists($this->compiler_class)) > > include_once SMARTY_DIR.$this->compiler_class . '.class.php'; > > $this->_compiler = new $this->compiler_class; > > } > > > > This way a programmer could override the default _compile_template method > > this way: > > > > MySmarty.class.php: > > function _compile_template (...) { > > parent::_compile_template(...); > > $this->_compiler->foo = $bar; > > } > > > > 3) Perhaps a back-reference in the compiler class to the calling Smarty > > class whould also be useful. Perhaps you could give the current object to > > the compiler as parameter: > > > > Smarty.class.php: > > function _load_compiler() { > > if (!class_exists($this->compiler_class)) > > include_once SMARTY_DIR.$this->compiler_class . '.class.php'; > > $this->_compiler = new $this->compiler_class ($this); // <-------- HERE!!! > > } > > > > This could make things even more flexible. > > These changes look fine to me, go ahead and submit the patches directly > to me. >

« previous php.smarty.dev (#644) next »