注意:
a.新增的类型可能是全局的。可能会影响其他插件或主程序的自定义字段的功能
b.字段类型新增完毕后,每次新增字段都需要重复步骤4和步骤5
1.新增类型
\application\common\model\Config.php
$typeList 数组增加
'shipintxt' => __('Shipintxt'), //修改
'pictxt' => __('Pictxt'), //修改
2.新增类型的语言配置
\application\admin\lang\zh-cn\cms\fields.php
'Pictxt' => '多图(带描述)', //修改
'Shipintxt' => '多视频(带描述)', //修改
3.后台选择对应的字段类型,并添加字段信息,比如名称:bangzhusp,jiaochengsp
4.图片和描述是两个字段,数据库需新增字段 字段名称_txt,比如"bangzhusp_txt","jiaochengsp_txt"
5.修改提交保存时的过滤字段加上手工添加的字段
\application\admin\model\cms\Archives.php 146行
//修改提交保存时的过滤字段,多图描述,图片和描述是两个字段
//$values = array_intersect_key($row->getData(), array_flip($model->fields));
$values = array_intersect_key($row->getData(), array_flip(array_merge($model->fields,["bangzhusp_txt","jiaochengsp_txt"])));
6.给手工添加的字段赋值
\addons\cms\library\Service.php 245行
//优先取编辑的值,再次取默认值
$v->value = $values[$v['name']] ?? (is_null($v['defaultvalue']) ? '' : $v['defaultvalue']);
//修改
if($v->type=="shipintxt" || $v->type=="pictxt"){
$v->value_txt= isset($values[$v['name']."_txt"]) ? $values[$v['name']."_txt"] : "";
}
7.渲染新增两个字段的html
\application\admin\view\cms\common\fields.html
{case value="shipintxt"}
<div class="input-group">
<input id="c-{$item.name|htmlentities}" data-rule="required" class="form-control" size="50" name="row[{$item.name|htmlentities}]" type="text" value="{$item.value|htmlentities}">
<div class="input-group-addon no-border no-padding">
<span><button type="button" id="plupload-{$item.name|htmlentities}" class="btn btn-danger plupload" data-input-id="c-{$item.name|htmlentities}" data-mimetype="mp4" data-multiple="true" data-preview-id="p-{$item.name|htmlentities}"><i class="fa fa-upload"></i> 上传</button></span>
<span><button type="button" id="fachoose-{$item.name|htmlentities}" class="btn btn-primary fachoose" data-input-id="c-{$item.name|htmlentities}" data-mimetype="video/mp4" data-multiple="true"><i class="fa fa-list"></i> 选择</button></span>
</div>
<span class="msg-box n-right" for="c-{$item.name|htmlentities}"></span>
</div>
<!--ul需要添加 data-template和data-name属性,并一一对应且唯一 -->
<ul class="row list-inline plupload-preview" id="p-{$item.name|htmlentities}" data-template="{$item.name|htmlentities}tpl" data-name="row[{$item.name|htmlentities}_txt]"></ul>
<!--请注意 ul和textarea间不能存在其它任何元素,实际开发中textarea应该添加个hidden进行隐藏-->
<textarea name="row[{$item.name|htmlentities}_txt]" class="form-control" style="margin-top:5px;">{$item.value_txt}</textarea>
<!--这里自定义图片预览的模板 开始-->
<script type="text/html" id="{$item.name|htmlentities}tpl">
<li class="col-xs-3">
<a href="<%=fullurl%>" data-url="<%=url%>" target="_blank" class="thumbnail">
<img src="/gl.php/ajax/icon?suffix=mp4" class="img-responsive">
</a>
<input type="text" name="row[{$item.name|htmlentities}_txt2][<%=index%>]" class="form-control mb-1" placeholder="请输入文件描述" value="<%=value?value:''%>"/>
<a href="javascript:;" class="btn btn-danger btn-xs btn-trash"><i class="fa fa-trash"></i></a>
</li>
</script>
<!--这里自定义图片预览的模板 结束-->
{/case}
<div class="input-group">
<input id="c-{$item.name|htmlentities}" class="form-control" size="50" name="row[{$item.name|htmlentities}]" type="text" value="{$item.value|htmlentities}">
<div class="input-group-addon no-border no-padding">
<span><button type="button" id="plupload-{$item.name|htmlentities}" class="btn btn-danger plupload" data-input-id="c-{$item.name|htmlentities}" data-mimetype="image/gif,image/jpeg,image/png,image/jpg,image/bmp,image/webp" data-multiple="true" data-preview-id="p-{$item.name|htmlentities}"><i class="fa fa-upload"></i> 上传</button></span>
<span><button type="button" id="fachoose-{$item.name|htmlentities}" class="btn btn-primary fachoose" data-input-id="c-{$item.name|htmlentities}" data-mimetype="image/*" data-multiple="true"><i class="fa fa-list"></i> 选择</button></span>
</div>
<span class="msg-box n-right" for="c-{$item.name|htmlentities}"></span>
</div>
<!--ul需要添加 data-template和data-name属性,并一一对应且唯一 -->
<ul class="row list-inline plupload-preview" id="p-{$item.name|htmlentities}" data-template="{$item.name|htmlentities}tpl" data-name="row[{$item.name|htmlentities}_txt]"></ul>
<!--请注意 ul和textarea间不能存在其它任何元素,实际开发中textarea应该添加个hidden进行隐藏-->
<textarea name="row[{$item.name|htmlentities}_txt]" class="form-control" style="margin-top:5px; display: none;">{$item.value_txt|htmlentities}</textarea>
<!--这里自定义图片预览的模板 开始-->
<script type="text/html" id="{$item.name|htmlentities}tpl">
<li class="col-xs-3">
<a href="<%=fullurl%>" data-url="<%=url%>" target="_blank" class="thumbnail">
<img src="<%=fullurl%>" class="img-responsive">
</a>
<textarea name="row[{$item.name|htmlentities}_txt2][<%=index%>]" class="form-control mb-1" placeholder="请输入文件描述" /><%=value?value:''%></textarea>
<a href="javascript:;" class="btn btn-danger btn-xs btn-trash"><i class="fa fa-trash"></i></a>
</li>
</script>
<!--这里自定义图片预览的模板 结束-->
{/case}
发表评论 取消回复