在smarty中,我遇到了这样的HTML代码。**
{section name=listAll loop=$scope}
(input id="a1" name="from" / >
(input id="b1" name="from" / >
(input id="c1" name="from" / >
{/section}
{section name=listAll loop=$scope}
(input id="a2" name="from" / >
(input id="b2" name="from" / >
(input id="c2" name="from" / >
{/section}
{section name=listAll loop=$scope}
(input id="a3" name="from" / >
(input id="b3" name="from" / >
(input id="c3" name="from" / >
{/section}
我可以将它转移到如下功能:
function RenderControl($i)
{
return '
{section name=listAll loop=$scope}
(input id="a$i" name="from" / >
(input id="b$i" name="from" / >
(input id="c$i" name="from" / >
{/section}
} ';
然后在tpl文件中调用它,如:
{RenderControl i=1}
{RenderControl i=2}
{RenderControl i=3}
为什么以下内容无法用于smarty tpl?$ smarty-> register_function('RenderHtml','RenderHtml');函数RenderHtml($ params){extract($ params); // $ html ='{include file =“tke-pre_bid_scopeworkModules / Section1_Factory_to_Price_Optional_Configurat ion.tpl”}'; return $ html; }
{RenderHtml num = 12}
答案 0 :(得分:2)
您可能正在寻找{function},您可以在模板中定义简单的可重复使用的文本生成器:
{function name=controls i=0}
(input id="a{$i}" name="from" / >
(input id="b{$i}" name="from" / >
(input id="c{$i}" name="from" / >
{/function}
{controls i=1}
{controls i=2}
{controls i=3}
取决于您输入的结构,您甚至可能希望按照
的方式进行细化{function name=controls i=0}
{$fields = ["a", "b", "c"]}
{foreach $fields as $field}
(input id="{$field}{$i}" name="from" / >
{/foreach}
{/function}
这是一个Smarty3功能。 Smarty2没有模板功能。您可以将上述{function}的内容提取到单独的文件中,并{include file="controls.tpl" i=1}
。或者,正如@Brett所说,为它编写一个插件函数。
您的问题的第二部分是关于以下代码
$smarty->register_function('RenderHtml','RenderHtml');
function RenderHtml($params){
extract($params);
$html= '{include file="tke-pre_bid_scopeworkModules/Section1_Factory_to_Price_Optional_Configuration.tpl"}';
return $html;
}
这将不包括您似乎期待的文件。无论这些插件函数返回什么,都会直接写入模板输出。没有什么可以阻止你按照
的方式做事了function RenderHtml($params, &$smarty){
// create new smarty instance
$t = new Smarty();
// copy all values to new instance
$t->assign($smarty->get_template_vars());
// overwrite whatever was given in params
$t->assign($params);
// execute the template, returning the generated html
return $t->fetch('tke-pre_bid_scopeworkModules/Section1_Factory_to_Price_Optional_Configuration.tpl');
}
答案 1 :(得分:1)
您可能需要http://www.smarty.net/docs/en/advanced.features.prefilters.tpl以确保在处理之前对代码进行评估,因此您可以像在示例中那样进行。
您也可以查看http://www.smarty.net/docs/en/plugins.tpl
(以上是Smarty 3)