具有访问Smarty对象的Smarty修饰符插件

3

一个用于PHP Smarty的修改器插件是否能够访问Smarty对象?

块和函数插件类型都需要将当前的Smarty对象作为参数传递。例如:

function smarty_function_NAME($params, Smarty_Internal_Template $Smarty) {...}
function smarty_block_NAME($params, $content, Smarty_Internal_Template $Smarty, &$repeat) {...}

但是修改器插件不支持,即:
function smarty_modifier_NAME($arg1, $arg2, ...) {...}

有没有办法在修饰符内部访问Smarty对象?

我想创建一个修饰符,可以获取变量名称字符串的值,就像这样:

{$colorblue = '#0317e9'}
{$index = 'blue'}
{$_color = "color`$index`"|smarty_variable_value}

1
你为什么需要Smarty对象?如果你需要获取$index部分,你可以使用{$_variable = "variable\$index`"|smarty_variable_value:$index}`。 - periklis
我认为我的例子不够清晰。想法是有一个名为variable1的变量。索引也不一定是数字。我会相应地编辑问题。 - Martijn
我仍然不确定为什么你需要Smarty对象。你可以使用“:”运算符将任意数量的变量传递给你的修饰符:{$_color = "color`$index`"|smarty_variable_value:$colorblue:$index:$var1:$var2}`。 - periklis
1个回答

0

最终我创建了一个小的get扩展函数来处理这个问题:

function smarty_function_get($params, Smarty_Internal_Template $Smarty) {
    if (!isset($params['name'])) {
        return;
    }

    $value = $Smarty->getTemplateVars($params['name']);

    if (!isset($params['assign'])) {
        return $value;
    }

    $Smarty->assign($params['assign'], $value);
}

使用调用

{get name="color`$index`" assign="_color"}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接