Yzncms系列教程(九):自定义字段的使用方法

御宅男 2020年12月18日 18 11:42 AM 4373浏览 7642字数

前言

截止目前yzncms可以定义以下字段
<code>输入框[text],复选框[checkbox],多行文本[textarea],单选按钮[radio]
开关[switch],数组[array],下拉框[select],下拉框(多选)[selects]
高级下拉框[selectpage],单张图[image],多张图[images]
标签[tags],数字[number],日期和时间[datetime]
百度编辑器[Ueditor],markdown编辑器[markdown]
多文件[files],单文件[file],颜色值[color],城市地区[city]</code>

当我们的字段不能够满足业务需求,或者需要对现有字段进行调整,可以使用本自定义字段。
需求例子1:我们需要拓展数组字段,如下效果

里面包含了图片选择,文本框,单选框和下拉框基本满足了一般需求

新建文件

在<code>application/admin/view/custom/</code>目录下新建custom.html文件

代码

代码如下:可以自行调整自己所需组件,本代码可能存在过时,最新代码请查阅yzncms手册

&lt;style type=&quot;text/css&quot;&gt;
.custom-fachoose-image{    border: 1px dashed #d9d9d9; width: 38px; height: 38px; line-height: 38px; border-radius: 2px; background-color: #fbfbfb; text-align: center; cursor: pointer; display: inline-block; box-sizing: border-box;}
&lt;/style&gt;
&lt;div class=&quot;layui-form-item layui-form-text&quot;&gt;
    &lt;label class=&quot;layui-form-label&quot;&gt;{$vo.title} {if condition=&quot;isset($vo.ifrequire) AND $vo.ifrequire&quot;}&amp;nbsp;&lt;font color=&quot;red&quot;&gt;*&lt;/font&gt;{/if}&lt;/label&gt;
    &lt;div class=&quot;layui-input-block&quot;&gt;
        &lt;table class=&quot;layui-form-field-label layui-table fieldlist&quot; data-name=&quot;{$vo.fieldArr}[{$vo.name}]&quot; data-id=&quot;{$vo.name}&quot; data-template=&quot;true&quot; data-tag=&quot;tr&quot;&gt;
            &lt;tr&gt;
                &lt;td width=&quot;80&quot;&gt;图片&lt;/td&gt;
                &lt;td&gt;姓名&lt;/td&gt;
                &lt;td&gt;年龄&lt;/td&gt;
                &lt;td&gt;成绩&lt;/td&gt;
                &lt;td&gt;城市&lt;/td&gt;
                &lt;td width=&quot;140&quot;&gt;性别&lt;/td&gt;
                &lt;td width=&quot;70&quot;&gt;&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;&lt;td colspan=&quot;10&quot;&gt;&lt;button type=&quot;button&quot; class=&quot;layui-btn btn-append&quot;&gt;追加&lt;/button&gt;&lt;/td&gt;&lt;/tr&gt;

        &lt;/table&gt;
        &lt;textarea name=&quot;{$vo.fieldArr}[{$vo.name}]&quot; class=&quot;layui-textarea layui-hide&quot;&gt;{$vo.value}&lt;/textarea&gt;
    &lt;/div&gt;
    {if $vo.remark}&lt;div class=&quot;layui-form-mid2 layui-word-aux&quot;&gt;{$vo.remark|raw}&lt;/div&gt;{/if}
&lt;/div&gt;
&lt;script type=&quot;text/html&quot; id=&quot;{$vo.name}Tpl&quot;&gt;
    &lt;tr class=&quot;layui-form-item rules-item&quot;&gt;
        {{# layui.each(d.lists, function(index, item) { }}
        &lt;td&gt;
            &lt;img data-image src=&quot;{{item.row.image || '/static/admin/img/none.png'}}&quot; data-original=&quot;{{item.row.image || '/static/admin/img/none.png'}}&quot; alt=&quot;&quot; width=&quot;38&quot; height=&quot;38&quot; style=&quot;vertical-align: bottom;&quot;&gt;
            &lt;input type=&quot;hidden&quot; class=&quot;tabbar-img-value&quot; name=&quot;{{item.name}}[{{item.index}}][image]&quot;  id=&quot;c-{{item.index}}-image&quot; value=&quot;{{item.row.image|| ''}}&quot;&gt;
            &lt;div class=&quot;custom-fachoose-image fachoose&quot; data-multiple=&quot;false&quot; data-input-id=&quot;c-{{item.index}}-image&quot; id=&quot;fachoose-c-{{item.index}}-image&quot;&gt;&lt;i class=&quot;iconfont icon-add&quot;&gt;&lt;/i&gt;&lt;/div&gt;
        &lt;/td&gt;
        &lt;td&gt;&lt;input type=&quot;text&quot; class=&quot;layui-input&quot; name=&quot;{{item.name}}[{{item.index}}][name]&quot; placeholder=&quot;姓名&quot; value=&quot;{{item.row.name|| ''}}&quot; /&gt;&lt;/td&gt;
        &lt;td&gt;&lt;input type=&quot;text&quot; class=&quot;layui-input&quot; name=&quot;{{item.name}}[{{item.index}}][age]&quot; placeholder=&quot;年龄&quot; value=&quot;{{item.row.age|| ''}}&quot; /&gt;&lt;/td&gt;
        &lt;td&gt;&lt;input type=&quot;text&quot; class=&quot;layui-input&quot; name=&quot;{{item.name}}[{{item.index}}][score]&quot; placeholder=&quot;成绩&quot; value=&quot;{{item.row.score|| ''}}&quot; /&gt;&lt;/td&gt;
        &lt;td&gt;&lt;select name=&quot;{{item.name}}[{{item.index}}][city]&quot; lay-filter=&quot;fieldlist&quot;&gt;
            &lt;option value=&quot;&quot;&gt;&lt;/option&gt;
            &lt;option value=&quot;1&quot; {{#  if(item.row.city == 1){ }}selected{{#  } }}&gt;江苏&lt;/option&gt;
            &lt;option value=&quot;2&quot; {{#  if(item.row.city == 2){ }}selected{{#  } }}&gt;上海&lt;/option&gt;
            &lt;option value=&quot;3&quot; {{#  if(item.row.city == 3){ }}selected{{#  } }}&gt;深圳&lt;/option&gt;
            &lt;option value=&quot;4&quot; {{#  if(item.row.city == 4){ }}selected{{#  } }}&gt;香港&lt;/option&gt;
        &lt;/select&gt;&lt;/td&gt;

        &lt;td&gt;&lt;input type=&quot;radio&quot; class=&quot;layui-input&quot; name=&quot;{{item.name}}[{{item.index}}][sex]&quot; value=&quot;1&quot; {{#  if(item.row.sex == 1){ }}checked{{#  } }} title=&quot;男&quot; lay-filter=&quot;fieldlist&quot;/&gt;
        &lt;input type=&quot;radio&quot; class=&quot;layui-input&quot; name=&quot;{{item.name}}[{{item.index}}][sex]&quot; value=&quot;2&quot; {{#  if(item.row.sex == 2){ }}checked{{#  } }} title=&quot;女&quot; lay-filter=&quot;fieldlist&quot;/&gt;&lt;/td&gt;

        &lt;td&gt;&lt;button type=&quot;button&quot; class=&quot;layui-btn layui-btn-danger btn-remove layui-btn-xs&quot;&gt;&lt;i class=&quot;iconfont icon-close&quot;&gt;&lt;/i&gt;&lt;/button&gt;
        &lt;button type=&quot;button&quot; class=&quot;layui-btn btn-dragsort layui-btn-xs&quot;&gt;&lt;i class=&quot;iconfont icon-yidong&quot;&gt;&lt;/i&gt;&lt;/button&gt;&lt;/td&gt;
        {{# }); }}
    &lt;/tr&gt;
&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
$(document).on(&quot;change&quot;, &quot;.fieldlist .tabbar-img-value&quot;, function (e, obj) {
    console.log($(this).prev().find('img'));
    $(this).prev('img').attr(&quot;src&quot;,$(this).val());
});
&lt;/script&gt;

新建字段

最后

这样就OK了,你可以完善更多的高级自定义字段
ps:需要注意的是,自定义没有经过处理,像上面的例子的字段要展现在前端需要json_decode处理下

标签: yzncms
最后修改:2021年08月31日 17:12 PM

非特殊说明,本博所有文章均为博主原创。