Re: [SMARTY-DEV] compilerblock plugins patch
| From: | Andr� Rabold | 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>
>