I found this message on php-general list, and I'm cross-posting the
reply to Smarty list.

I see a couple of issues with passing Smarty object to modifiers.

1. You want to use _current_file and _current_lineno member variables,
but they are only defined in Smarty_Compiler class, and what actually
runs the modifiers is Smarty class. Check Smarty::_run_mod_handler().

2. The only reasonable way to make Smarty object available to modifiers
is to pass it as a last parameter. However, you run into problems when
your modifier has default parameters. For example:

function x_mod($arg1, $arg2 = 5, &$smarty)
{
  ...
}

If you call modifier as {$foo|x}, $arg2 would actually point to the
Smarty object, and you will get a notice complaining about $smarty
parameter not being passed. So, it would not be possible to use default
parameters for modifiers which is a big step back IMO.

Can you provide alternative ideas?

> Hi,
> 
> is there a way to access the calling smarty object from withing a 
> modifier callback function?
> 
> Regular smarty callback functions get passed a list of "parameters" of 
> the function call as a first argument and a reference to the calling 
> smarty object as a second argument.
> 
> function my_smary_func($params, &$smarty) {
>     ...
> 
>      if (my_smarty_check_params($params, $allowed)) {
>        return true;
>      }
> 
>     $smarty->assign();
>     ...
> }
> 
> 
> That way you can not only modify the smarty object but access properties 
>    of the object. Two of them help me to generate error messages: 
> $smarty->_current_line_no and $smarty->_current_file (btw. one should 
> "make them public").
> 
> function my_smarty_check_params($params, $allowed, &$smarty) {
>    ....
>    if (...) {
>       return sprintf("Error on %s %d", $smarty->_current_file, ...);
>    }
>    ...
> }
> 
> Can I do something similar with modifiers, which seem to have this
> format. Is there a way to access the calling smarty object?
> 
> function my_smarty_modifier($value, $option = '', ...) {
>     ??? $smarty->... ???
> }

-Andrei

When we eliminate the impossible, whatever remains,
however improbable, must be true. -- Sherlock Holmes

-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
To contact the list administrators, e-mail: [EMAIL PROTECTED]

Reply via email to