注意:

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}

{case value="pictxt"}
            <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}

点赞(0)

评论列表 共有 0 条评论

暂无评论
立即
投稿
发表
评论
返回
顶部