Как сделать этот вид шаблонов в одном цикле в Smarty? - PullRequest
0 голосов
/ 27 октября 2010
<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 может быть сгенерирован циклом 1 , если не используется 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;

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

Ответы [ 4 ]

1 голос
/ 29 октября 2010

Это работает с одним циклом:

<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 голосов
/ 27 октября 2010

Вот моя настоящая проблема, 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 голосов
/ 27 октября 2010

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

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

0 голосов
/ 27 октября 2010

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

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

...