2015-10-06 2 views
1

Я пытаюсь понять систему захвата Smarty. В моем случае у меня нет доступа к php, а smarty - в каком-то безопасном режиме. И я также не могу использовать, потому что я не могу создавать новые файлы.Добавить переменную в блок Smarty Capture без php

Так что я хочу объявить детали 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

Он не будет работать, так как переменная $ item_type обрабатывается как сын, как вы выводите его внутри блока захвата - так пусто, и все, что вы получаете <h1></h1>

Хорошая новость заключается в том, что если вы» повторно используя Smarty 3, вы можете использовать {function} и сделать это:

{function titlefy} 
<h1>{$text}</h1> 
{/function} 

и позвонить позже в любом месте вы хотите, как это:

{titlefy text=$var_item_type} 

EDIT: Значит, вы используете Smarty 2 ... Ну, не всякая надежда потеряна. Вы можете попробовать рода создать subtemplate двигатель, используя идентификаторы, где вы хотите, переменные и заменяя их позже:

{capture name="test"} 
    <h1>%title</h1> 
    <h2>%subtitle</h2> 
{/capture} 

и назвать его:

{$test|replace:'%title':$var_item_type|replace:'%subtitle':'something else'} 

не идеальное решение, но с учетом ограничений, это может быть полезно, если блок кода несколько строк, и вы должны использовать его в более чем одном месте

+0

ах человек. Это выглядело так прекрасно. Но я только что узнал, что мне нужно использовать * 2.6.9 * –

+0

Посмотрите на мой отредактированный ответ, может быть, это работает для вас – Borgtex

+0

все еще нет выхода. Но спасибо!!! –

0

использование Smarty захвата в переменную шаблона (правопреемником = 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> 

http://www.smarty.net/docs/en/language.function.capture.tpl

Смежные вопросы