Re: [SMARTY-DEV] making Smarty_Compiler more flexible
| From: | Monte Ohrt | Date: | Tue, 28 Jan 2003 21:39:46 +0000 |
| Subject: | Re: [SMARTY-DEV] making Smarty_Compiler more flexible | ||
| References: | 1 2 3 | Groups: | php.smarty.dev |
| Request: | Send a blank email to php-smarty-dev+get-645@lists.php.net to get a copy of this message | ||
We can't have call-time pass-by-reference in the Smarty library.
On Tue, 2003-01-28 at 09:36, André Rabold wrote:
> 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.
> >
--
Monte Ohrt <monte@ispi.net>