Re: [SMARTY-DEV] compilerblock plugins patch

From: Date: Mon, 02 Dec 2002 16:01:21 +0000
Subject: Re: [SMARTY-DEV] compilerblock plugins patch
References: 1 2  Groups: php.smarty.dev 
Request: Send a blank email to php-smarty-dev+get-360@lists.php.net to get a copy of this message
You CAN pass values from inside a block into the block function itself by doing this: ---------------------------------------------------- {* TEMPLATE *} {iterator dir="reverse"} {additem value="xyz"} {additem value="123"} {* ... *} {/iterator} ---------------------------------------------------- /* ADDITEM Function */ function smarty_function_additem($params, &$smarty) { if (!isset($smarty->_block_iterator)) $smarty->_block_iterator = array(); $smarty->_block_iterator[] = $params["value"]; } ---------------------------------------------------- /* ITERATOR BLOCK FUNCTION */ function smarty_block_iterator($params, $content, &$smarty) { if (is_array($smarty->_block_iterator) && count($smarty->_block_iterator) > 0) { if ($params["dir"] == "reverse") { for ($i = count($smarty->_block_iterator); $i > 0; $i--) { echo $smarty->_block_iterator[$i-1]; } } else { for ($i = 0; $i < count($smarty->_block_iterator); $i++) { echo $smarty->_block_iterator[$i]; } } } ---------------------------------------------------- This should output the array which build using the {additem} function. "Monte Ohrt" <monte@ispi.net> schrieb im Newsbeitrag news:1038842016.11742.21.camel@lena.ispi.prv... > I'm wondering, what if we changed the block functions to use this > method, does anything break? (besides needing to be recompiled) If not, > this would keep the API simpler and no new documentation needed, maybe a > technical note adjustment. > > Does your method resolve the issue of evaluating variables in a block > function at runtime? Problem outlined in this posting: > > > http://marc.theaimsgroup.com/?l=smarty-dev&m=103774868829224&w=2 > > Monte > > On Mon, 2002-12-02 at 05:47, M Mohr wrote: > > hello, > > > > i patched smarty to support block-function at compile time. the > > compilerblock-function is searched as compilerblock.[name].php in the > > plugins_dirs and has precedence before simple (==old) > > compiler-funcions. > > > > alternatively you can register compilerblock-functions using > > $smarty->register_compilerblock_function(..). > > > > the function has to be declared as: > > > > function func($tag_args, $start_tag, &$smarty) ... > > > > or > > > > function smarty_compilerblock_csv($tag_args, $start_tag, &$smarty) ... > > > > where tag_args ar the (unparsed) arguments, like in the simple > > compiler-functions and $start_tag is a boolean indicating wether the > > function was called at the beginning or the end of the block. > > > > i attached the diff against the lates cvs-version. it's not small, but > > pretty simple, since it is a mainly a rip-off of > > Smarty_Compiler::_compile_block_tag() > > > > i would love to see it applied in Smarty-2.3.2 and i am willing to > > provide documentation for such plugins and to maintain this patch if > > necessary. > > > > any use for it? > > any comments? > > > > regards > > messju mohr > > > > ______________________________________________________________________ > > > > -- > > Smarty Development Mailing List (http://smarty.php.net/) > > To unsubscribe, visit: http://www.php.net/unsub.php > -- > Monte Ohrt <monte@ispi.net> >

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