我试图了解聪明的捕捉系统。 在我的情况下,我无法访问php,而smarty处于某种安全模式。 我也无法使用包含因为我无法创建新文件。
所以我想宣布我可以用作"模板"的Html部件。在模板中。
我想要的是什么:
// Here i define the smarty Block which i want to use multiple times
{capture name="test"}
<h1>{$item_type}</h1>
{/capture}
// foreach ...
{foreach [...]}
{if $someVariable eq 0}
{assign var="var_item_type" value="test"}
{elseif $someVariable eq 1}
{assign var="var_item_type" value="another test"}
{/if}
// here i want to Output the Block with the Variable
{$smarty.capture.test}
{/foreach}
但是现在它不起作用。根本没有输出。
答案 0 :(得分:1)
它不会起作用,因为变量$ item_type在捕获块中输出时被处理为子 - 所以是空的,你得到的只是<h1></h1>
好消息是,如果你使用smarty 3,你可以使用{function} 并这样做:
{function titlefy}
<h1>{$text}</h1>
{/function}
稍后在任何你想要的地方调用它:
{titlefy text=$var_item_type}
编辑:所以事实证明你正在使用Smarty 2 ......好吧,并非所有希望都失去了。您可以尝试使用您想要变量的标识符来创建子模板引擎,并在以后替换它们:
{capture name="test"}
<h1>%title</h1>
<h2>%subtitle</h2>
{/capture}
并将其命名为:
{$test|replace:'%title':$var_item_type|replace:'%subtitle':'something else'}
不是理想的解决方案,但考虑到约束条件,如果代码块长达数行并且您需要在多个位置使用它,这可能很有用
答案 1 :(得分:1)
将Smarty 捕获用于模板变量( assign = popText 非常重要):
{capture name=some_content assign=popText}
{capture some_content assign=popText} {* short-hand *}
The server is {$my_server_name|upper} at {$my_server_addr}<br>
Your ip is {$my_ip}.
{/capture}
<a href="#">{$popText}</a>