可访问 Smarty 对象的 Smarty 修改器插件

Posted

技术标签:

【中文标题】可访问 Smarty 对象的 Smarty 修改器插件【英文标题】:Smarty modifier plugin with access to Smarty object 【发布时间】:2015-02-11 14:25:44 【问题描述】:

php Smarty 的修饰符插件可以访问 Smarty 对象吗?

block 和 function 插件类型都将当前 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

【问题讨论】:

为什么要使用 smarty 对象?如果你需要得到 $index 部分,你可以做一个$_variable = "variable`$index`"|smarty_variable_value:$index 我认为我的例子不够清楚。想法是会有一个名为variable1 的变量。索引也不必是数字。我会相应地编辑问题。 我仍然不确定你为什么需要 smarty 对象。您可以使用 : 运算符将任意数量的变量传递给修饰符:$_color = "color`$index`"|smarty_variable_value:$colorblue:$index:$var1:$var2 【参考方案1】:

我最终创建了一个小的 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"

【讨论】:

以上是关于可访问 Smarty 对象的 Smarty 修改器插件的主要内容,如果未能解决你的问题,请参考以下文章

Smarty模本引擎

使用smarty需要修改php配置么

前端学PHP之Smarty模板引擎

Smarty的应用

Smarty常用函数

smarty模板调数据库并做添加删除修改和分页