对于我们的常见网站来说,有很多地方需要使用到重复数据,如:相册,组图,一些数据格式相同的内容块。我们通常无法判定数量有多少个,也许需要上传一个,也许需要10个或者更多。
在以前来说,我们可能会预留个最大数量,但是有的内容我只需要传一个,其他多余。
如首页简介里有一组图文,里面有图片,标题,描述,甚至还有链接,这里的内容相对独立,有的cms需要新建一个模块,像添加新闻条目一样,然后再调用。
但是这里的内容相对独立,一个网站有很多这种结构,这样做无疑过于复杂,且维护让人晕头转向,我们希望在当前页就可以编辑,而且数量可以自由增减。
这就是可重复区域的意义。
创建可重复字段
正常情况下,创建一个图片字段如下
<cms:editable type='image' name='my_image' label='Photo' />
如果我需要上传很多图片,数量不确定,可以这样:
<cms:repeatable name='my_multiple_images' > <cms:editable type='image' name='my_image' label='Photo' /> </cms:repeatable>
这样后台就会出现一个可以重复的图片字段,可增删,可拖动排序。

这里的字段支持本cms几乎所有字段,除了缩略图字段,当然缩略图字段有可替代的缩略图调用字段。
<cms:repeatable name='my_multiple_images' > <cms:editable type='image' name='my_image' label='Photo' show_preview='1' preview_width='150' input_width='200' col_width='300' /> <cms:editable type='nicedit' label='Description' name='my_desc' /> </cms:repeatable>
后台字段的样式调节
注意:上面的 col_width='300' 参数,默认情况下,每一组所有字段都在一行,你想自由调节每个宽度可以这样,此外 image和file字段还支持input_width,用于调节输入框的宽度。
如上面已经说过,默认字段横排一行的,我们可以添加一个参数让其竖排,stacked_layout='1'
<cms:repeatable name='contacts' label='Contacts' stacked_layout='1'> <cms:editable name='title' label='Title' type='text' /> <cms:editable name='image' label='Image' type='image' show_preview='1' preview_width='200' /> <cms:editable name='details' label='Details' type='richtext' height='80' /> </cms:repeatable>
前台调用可重复字段
<cms:show_repeatable 'my_multiple_images' startcount='0' > <cms:show k_count /> / <cms:show k_total_records /> <b>Image: <img src="<cms:show my_image />" /> <b>Desc:</b> <cms:show my_desc /> <hr> </cms:show_repeatable>
注意,上面代码可以增加了1个参数,startcount='0', 在循环体内可以调用当前索引:<cms:show k_count />, 总数量:<cms:show k_total_records />
同时支持 'limit', 'offset', 'order' 三个参数。
1、倒序 order='desc'
<cms:show_repeatable 'contacts' order='desc'>...
2、显示指定行数 limit
<cms:show_repeatable 'contacts' limit='3' >..
3、‘offset’参数将使标签在跳过offset中指定的行数后开始显示行
<cms:show_repeatable 'contacts' offset='2' >..
4、使用这三者的组合可以有效地针对表中的特定行,例如:下面将只显示第一行
<cms:show_repeatable 'contacts' limit='1' >..
5、只显示第二行
<cms:show_repeatable 'contacts' limit='1' offset='1'>..
6、只显示最后一行
<cms:show_repeatable 'contacts' limit='1' order='desc' >..
7、只显示倒数第二行
<cms:show_repeatable 'contacts' limit='1' offset='1' order='desc' >..
8、还有2个新变量
<cms:show_repeatable 'contacts'> <cms:if k_first_row > </cms:if> .. <cms:if k_last_row > </cms:if> </cms:show_repeatable>
以上就是可重复区域字段的全部内容!
