Re: [SMARTY-DEV] compilerblock plugins patch
| From: | Andr� Rabold | Date: | Mon, 02 Dec 2002 16:03:59 +0000 |
| Subject: | Re: [SMARTY-DEV] compilerblock plugins patch | ||
| References: | 1 2 3 | Groups: | php.smarty.dev |
| Request: | Send a blank email to php-smarty-dev+get-361@lists.php.net to get a copy of this message | ||
forgot to meantion you should clear the $smarty->_block_iterator variable at
the end of your smarty_block_iterator function just before the if-construct
is closed:
unset($smart->_block_iterator);
Otherwise you cannot use two iterators in the same template ;-)
"André Rabold" <arabold@nero.com> schrieb im Newsbeitrag
news:20021202160121.66192.qmail@pb1.pair.com...
> 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>
> >
>
>