集合字段自动解析

自动为tags/checkbox/transfer等集合类型字段添加_array后缀数组属性,前台模板可直接循环输出,无需手动explode解析
标识autoparse
版本号1.0
文件大小5.1KB
发布时间2026-07-27
最近更新2026-07-27
PHP兼容>=5.6
作者 爱之易
扩展应用
弹性内容[flexible]
获取
¥5.00
请在您的网站后台-应用商店内购买此应用.

集合字段自动解析(autoparse)

自动为 tagscheckboxtransferarticlecheckboximguploadfileupload 等集合类型字段添加 _array 后缀数组属性,前台模板可直接循环输出,无需手动 explode 解析。

问题背景

1CMS 中集合类型输入框的数据以 ;| 分隔存储:

输入框 存储格式 示例
imgupload(图集) 路径1;路径2;路径3 /upload/a.png;/upload/b.png
fileupload(文件集) 路径1;路径2;路径3 /files/doc.pdf;/files/xls.xlsx
tags(单列) 值1;值2;值3 1.jpg;2.jpg;3.jpg
tags(多列) 列1|列2;列1|列2 张三|25;李四|30
checkbox 值1;值2;值3 red;green;blue
transfer 值1;值2;值3 1;3;5
articlecheckbox 值1;值2;值3 101;102;103

前台模板调用时必须手动解析:

{* 以前:需要原生PHP手动解析 *}
{php}$pics=explode(';',$article.pics);{/php}
{loop $pics as $pic}
    <img src="{$pic}">
{/loop}

解决方案

安装本插件后,集合类型字段会自动附带 _array 后缀的数组属性,模板中直接使用即可:

{* 现在:直接使用 _array 后缀 *}
{loop $article.pics_array as $pic}
    <img src="{$pic}">
{/loop}

自动解析

插件通过监听钩子自动工作,无需任何配置。

文章字段

cms:article:get 返回文章列表时,自动为集合类型字段添加 _array 属性:

{* 图集字段(imgupload) *}
{* 原始值 pics = "/upload/a.png;/upload/b.png;/upload/c.png" *}
{loop $pics_array as $pic}
    <img src="{$pic}">
{/loop}

{* 单列 tags 字段 *}
{* 原始值 tags = "tag1;tag2;tag3" *}
{loop $article.tags_array as $tag}
    <span>{$tag}</span>
{/loop}

{* 多列 tags 字段(如2列:图片|链接) *}
{* 原始值 banners = "a.jpg|/about/;b.jpg|/contact/" *}
{loop $article.banners_array as $row}
    <a href="{$row.1}"><img src="{$row.0}"></a>
{/loop}

{* checkbox 字段 *}
{* 原始值 colors = "red;green;blue" *}
{loop $article.colors_array as $color}
    <span class="tag-{$color}">{$color}</span>
{/loop}

栏目变量

cms:channel:get 返回栏目信息时,同样自动添加 _array 属性:

{* 栏目变量中的集合类型 *}
{loop $.banners_array as $banner}
    <img src="{$banner}">
{/loop}

{* 跨栏目调用 *}
{$channel=cms:channel:get(66618101)}
{loop $channel.pics_array as $pic}
    <img src="{$pic}">
{/loop}

兼容说明

  • 原始字符串值不变$article.pics 仍返回 "/upload/a.png;/upload/b.png"
  • _array新增属性,不影响已有模板代码
  • 仅前台生效,后台管理页面不受影响

手动解析方法

如果不想依赖自动钩子,或需要自定义解析,可使用以下模板方法:

split — 解析分隔字符串

{* 默认分号分隔 *}
{$pics=autoparse:split($article.pics)}

{* 自定义分隔符 *}
{$tags=autoparse:split($article.tags,|)}

splitTags — 解析 tags 多列格式

{* 单列 *}
{$items=autoparse:splitTags($article.pics)}

{* 多列(2列) *}
{$rows=autoparse:splitTags($article.info,2)}
{loop $rows as $row}
    姓名:{$row.0}, 年龄:{$row.1}
{/loop}

channelVar — 解析指定栏目集合变量

{* 获取并解析栏目ID为66618101的pics变量 *}
{$pics=autoparse:channelVar(66618101,pics)}
{loop $pics as $pic}
    <img src="{$pic}">
{/loop}

{* 使用当前栏目ID *}
{$pics=autoparse:channelVar($.id,pics)}

支持的输入框类型

输入框 标识 自动解析 手动方法
图片上传(图集) imgupload split
文件上传(文件集) fileupload split
多项文本框 tags splitTags
多选框 checkbox split
穿梭框 transfer split
文章多选框 articlecheckbox split

要求

  • 1CMS ≥ 5.x
  • PHP ≥ 5.6