2010-10-27 1 views
0
<ul> 
{foreach from=$recommend item=value} 
<li><span><em>{$value['content']}</em></span></li> 
{/foreach} 
</ul> 
<ul> 
{foreach from=$recommend item=value} 
<li><h4>{$value['name']}</h4></li> 
{/foreach} 
</ul> 

выше HTML может быть порождена цикла, если не используется Smarty:Как сделать этот шаблон в одном цикле в smarty?

$html1 = $html2 = '<ul>'; 
foreach($recommend as $value) 
{ 
    $html1 .= '<li><span><em>' . $value['content'] . '</em></span></li>'; 
    $html2 .= '<li><h4>' . $value['name'] . '</h4></li>'; 
} 
$html1 .= '</ul>'; 
$html2 .= '</ul>'; 
$html = $html1 . $html2; 

, но я не знаю, как это сделать, когда требуется умник.

+0

Человек, что вы имеете в виду? – nerkn

+0

Мой пример требует 2 цикла для генерации окончательного html, я хочу сделать это в течение 1 цикла. – smarty

+0

Это упрощенный пример, но основная идея такая же. – smarty

ответ

0

Насколько я могу судить, это невозможно сделать в Smarty, поскольку Smarty не может буферизовать содержимое, как вы можете, на PHP.

Однако я не могу понять, почему это необходимо. Для меня это выглядит ненужной (и запутанной) кодовой косметикой.

+0

Smarty может буферизировать, с {capture} http://www.smarty.net/manual/en/language.builtin.functions.php#language.function.capture – JochenJung

0

Вот моя фактическая беда, Category1~Category3 может быть доступна только из $recommend:

<ul class="sort clearfix"> 
    <li class="curr"><span><em>Category1</em></span></li> 
    <li><span><em>Category2</em></span></li> 
    <li><span><em>Category3</em></span></li> 
</ul> 
<ul class="pic_txt_list clearfix"> 
    {recommend path="1" limit=3} 
    {foreach from=$recommend item=value} 
    <li> 
     <script type="text/javascript">im_chat_now({$value['userid']},1)</script> 
    </li> 
    {/foreach} 
    {/recommend} 
    {recommend path="2" limit=3} 
    {foreach from=$recommend item=value} 
    <li> 
     <script type="text/javascript">im_chat_now({$value['userid']},1)</script> 
    </li> 
    {/foreach} 
    {/recommend} 
    {recommend path="3" limit=3} 
    {foreach from=$recommend item=value} 
    <li> 
     <script type="text/javascript">im_chat_now({$value['userid']},1)</script> 
    </li> 
    {/foreach} 
    {/recommend} 
</ul> 
0

Если вы не получить значительное улучшение скорости я предлагаю оставить его на 2 петли, таким образом это легче читать.

Если нет, вы можете использовать теги {php} в smarty для выполнения raw php (не знаю, реализованы ли они по умолчанию, хотя).

1

Это работает с одной петлей:

<ul> 
{foreach from=$recommend item=value} 
    <li><span><em>{$value['content']}</em></span></li> 
    {capture name=list2} 
    <li><h4>{$value['name']}</h4></li> 
    {/capture} 
{/foreach} 
</ul> 
<ul> 
{$smarty.capture.list2} 
</ul> 

Но, как и другие уже писали, я не вижу смысла в этом, ибо ваше решение выглядит более четким.

+0

Ницца, не знал об этом! +1 –

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