我正在使用CMSMS 1.11.11,其中内置了Smarty 3。我有以下代码,它允许我检测是否存在新闻字段定义....
{if isset($entry->fields)}
<div class="flexslider">
<ul class="slides">
{foreach from=$entry->fields item='field'}
{if $field->type == 'file'}
{if $field->name|strpos:"Photo" !== false}
{if $field->displayvalue != ''}
<li><img src="{$entry->file_location}/{$field->displayvalue}"/></li>
{/if}
{/if}
{/if}
{/foreach}
</ul>
</div>
{/if}
...如果它们确实存在,那么foreach循环会将每个项目循环到<li>
我的问题是,是否可以将<div class="flexslider">
和<ul class="slides">
置于foreach循环中仍然可以获得相同的效果?我基本上希望在foreach循环中打包所有内容,但只有li
继续循环和增加,而外<ul>
和外<div>
只加载一次,如果有的话条件得到满足。
这可能吗?
答案 0 :(得分:2)
你可以将div和ul放在foreach中,但是你仍然需要if
条件:
{if isset($entry->fields)}
{foreach $entry->fields as $field}
{if $field@first}
<div class="flexslider">
<ul class="slides">
{/if}
{if $field->type == 'file'}
{if $field->name|strpos:"Photo" !== false}
{if $field->displayvalue != ''}
<li><img src="{$entry->file_location}/{$field->displayvalue}"/></li>
{/if}
{/if}
{/if}
{if $field@last}
</ul>
</div>
{/if}
{/foreach}
{/if}
我也改变了从Smarty2到Smarty3的循环风格