421 lines
26 KiB
HTML
421 lines
26 KiB
HTML
{template "header.html"}
|
||
|
||
{php echo \Phpcmf\Service::L('Field')->get('select')->get_select_search_code();}
|
||
<form action="" class="form-horizontal" method="post" name="myform" id="myform">
|
||
{$form}
|
||
<div class="myfbody">
|
||
<div class="portlet bordered light ">
|
||
<div class="portlet-title tabbable-line">
|
||
<ul class="nav nav-tabs" style="float:left;">
|
||
<li class="{if $page==0}active{/if}">
|
||
<a href="#tab_0" data-toggle="tab" onclick="$('#dr_page').val('0')"> <i class="fa fa-cog"></i> {dr_lang('基本设置')} </a>
|
||
</li>
|
||
<li class="{if $page==3}active{/if}">
|
||
<a href="#tab_3" data-toggle="tab" onclick="$('#dr_page').val('3')"> <i class="fa fa-code"></i> {dr_lang('字段样式')} </a>
|
||
</li>
|
||
<li class="{if $page==1}active{/if}">
|
||
<a href="#tab_1" data-toggle="tab" onclick="$('#dr_page').val('1')"> <i class="fa fa-crop"></i> {dr_lang('数据验证')} </a>
|
||
</li>
|
||
<li class="{if $page==2}active{/if}">
|
||
<a href="#tab_2" data-toggle="tab" onclick="$('#dr_page').val('2')"> <i class="fa fa-user"></i> {dr_lang('字段权限')} </a>
|
||
</li>
|
||
</ul>
|
||
</div>
|
||
<div class="portlet-body">
|
||
<div class="tab-content">
|
||
|
||
<div class="tab-pane {if $page==0}active{/if}" id="tab_0">
|
||
<div class="form-body">
|
||
|
||
<div class="form-group">
|
||
<label class="col-md-2 control-label">{dr_lang('显示名称')}</label>
|
||
<div class="col-md-9">
|
||
<label><input class="form-control" type="text" name="data[name]" value="{htmlspecialchars((string)$data.name)}" id="dr_name" onblur="d_topinyin('fieldname','name');" /></label>
|
||
<span class="help-block" id="dr_name_tips">{dr_lang('为字段取个名字')}</span>
|
||
</div>
|
||
</div>
|
||
<div class="form-group">
|
||
<label class="col-md-2 control-label">{dr_lang('字段名称')}</label>
|
||
<div class="col-md-9">
|
||
<label><input class="form-control" type="text" name="data[fieldname]" value="{htmlspecialchars((string)$data.fieldname)}" {if $data.id}disabled{/if} id="dr_fieldname" /></label>
|
||
<span class="help-block" id="dr_fieldname_tips">{dr_lang('只能由小写字母、数字、下划线组成')}</span>
|
||
</div>
|
||
</div>
|
||
{if $ismain}
|
||
<input name="data[ismain]" type="hidden" value="1" />
|
||
{else}
|
||
<div class="form-group">
|
||
<label class="col-md-2 control-label">{dr_lang('是否主表')}</label>
|
||
<div class="col-md-9">
|
||
<div class="mt-radio-inline">
|
||
<label class="mt-radio mt-radio-outline"><input type="radio" id="iszb1" name="data[ismain]" value="0" {if $id} disabled{/if} {if !$data.ismain} checked{/if} /> {dr_lang('附表')} <span></span></label>
|
||
<label class="mt-radio mt-radio-outline"><input type="radio" id="iszb2" name="data[ismain]" value="1" {if $id} disabled{/if} {if $data.ismain} checked{/if} /> {dr_lang('主表')} <span></span></label>
|
||
</div>
|
||
<span class="help-block">{dr_lang('主表字段可用于列表循环或者搜索;附表只能用于内容页显示')}</span>
|
||
</div>
|
||
</div>
|
||
{/if}
|
||
<div class="form-group">
|
||
<label class="col-md-2 control-label">{dr_lang('字段类别')}</label>
|
||
<div class="col-md-9">
|
||
<label><select class="form-control bs-select" data-live-search="true" data-actions-box="true" {if $id && !$is_edit} readonly="readonly"{/if} id="dr_fieldtype" name="data[fieldtype]" onChange="show_field_option(this.value)">
|
||
<option value=""> -- </option>
|
||
{loop $ftype $t}
|
||
<option value="{$t.id}" {if $t.id==$data.fieldtype} selected="selected"{/if}> {$t.name}({$t.id}) </option>
|
||
{/loop}
|
||
</select>
|
||
</label>
|
||
<label id="dr_loading" style="display:none">
|
||
|
||
<img width="16" src="{THEME_PATH}assets/images/loading-2.gif">
|
||
</label>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="form-body" id="dr_option">
|
||
|
||
</div>
|
||
</div>
|
||
<div class="tab-pane {if $page==1}active{/if}" id="tab_1">
|
||
<div class="form-body">
|
||
<div class="form-group">
|
||
<label class="col-md-2 control-label">{dr_lang('XSS过滤')}</label>
|
||
<div class="col-md-9">
|
||
<input type="checkbox" name="data[setting][validate][xss]" value="1" {if $data['setting']['validate']['xss']}checked{/if} data-on-text="{dr_lang('已开启')}" data-off-text="{dr_lang('已关闭')}" data-off-color="danger" data-on-color="success" class="make-switch" data-size="small">
|
||
<span class="help-block">{dr_lang('非法字符会被安全替换掉')}</span>
|
||
</div>
|
||
</div>
|
||
<div class="form-group">
|
||
<label class="col-md-2 control-label">{dr_lang('前端禁止修改')}</label>
|
||
<div class="col-md-9">
|
||
<input type="checkbox" name="data[setting][validate][isedit]" value="1" {if $data['setting']['validate']['isedit']}checked{/if} data-on-text="{dr_lang('已开启')}" data-off-text="{dr_lang('已关闭')}" data-on-color="success" data-off-color="danger" class="make-switch" data-size="small">
|
||
<span class="help-block">{dr_lang('前端用户提交之后将不能修改字段值,后台仍然可以修改值')}</span>
|
||
</div>
|
||
</div>
|
||
<div class="form-group dr_is_validate">
|
||
<label class="col-md-2 control-label">{dr_lang('内容验证必填')}</label>
|
||
<div class="col-md-9">
|
||
<div class="mt-radio-inline">
|
||
<label class="mt-radio mt-radio-outline"><input type="radio" name="data[setting][validate][required]" value="0" {if $data['setting']['validate']['required']==0}checked{/if} onclick="set_required(0)" /> {dr_lang('不验证')} <span></span></label>
|
||
<label class="mt-radio mt-radio-outline"><input type="radio" name="data[setting][validate][required]" value="1" {if $data['setting']['validate']['required']==1}checked{/if} onclick="set_required(1)" /> {dr_lang('验证')} <span></span></label>
|
||
</div>
|
||
<span class="help-block">{dr_lang('对提交内容进行必填验证(超管不进行验证)')}</span>
|
||
</div>
|
||
</div>
|
||
<div id="required" class="dr_is_validate" style="display:none">
|
||
<div class="form-group">
|
||
<label class="col-md-2 control-label">{dr_lang('正则验证')}</label>
|
||
<div class="col-md-9">
|
||
<div class="input-group ">
|
||
<input class="form-control" type="text" name="data[setting][validate][pattern]" value="{$data['setting']['validate']['pattern']}" >
|
||
<span class="input-group-btn">
|
||
<button class="btn blue" onclick="dr_iframe_show('{dr_lang('正则表达式')}', '{dr_url('api/test_pattern')}')" type="button">{dr_lang('测试')}</button>
|
||
</span>
|
||
</div>
|
||
<span class="help-block">{dr_lang('例如数字正则表达式格式:/^[0-9]+$/')}</span>
|
||
</div>
|
||
</div>
|
||
<div class="form-group">
|
||
<label class="col-md-2 control-label">{dr_lang('验证提示')}</label>
|
||
<div class="col-md-9">
|
||
<input class="form-control" type="text" name="data[setting][validate][errortips]" value="{htmlspecialchars((string)$data['setting']['validate']['errortips'])}" id="dr_errortips" />
|
||
<span class="help-block">{dr_lang('当字段校验未通过时的提示信息,如“标题必须在80字以内”等等')}</span>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="form-group">
|
||
<label class="col-md-2 control-label">{dr_lang('校验函数/方法')}</label>
|
||
<div class="col-md-9">
|
||
<label><input class="form-control input-large"type="text" name="data[setting][validate][check]" value="{htmlspecialchars((string)$data['setting']['validate']['check'])}" id="dr_check"> </label>
|
||
<label><a class="btn btn-sm blue" href="javascript:dr_test_call('dr_check');"> {dr_lang('检测')} </a></label>
|
||
<span class="help-block"> <a href="javascript:dr_help('601');"> {dr_lang('此功能需要有PHP编程经验,了解函数的定义')}</a> </span>
|
||
</div>
|
||
</div>
|
||
<div class="form-group">
|
||
<label class="col-md-2 control-label">{dr_lang('过滤函数/方法')}</label>
|
||
<div class="col-md-9">
|
||
|
||
<label><input class="form-control input-large"type="text" name="data[setting][validate][filter]" value="{htmlspecialchars((string)$data['setting']['validate']['filter'])}" id="dr_filter"> </label>
|
||
<label><a class="btn btn-sm blue" href="javascript:dr_test_call('dr_filter');"> {dr_lang('检测')} </a></label>
|
||
<span class="help-block"> <a href="javascript:dr_help('602');"> {dr_lang('此功能需要有PHP编程经验,了解函数的定义')}</a> </span>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="tab-pane {if $page==3}active{/if}" id="tab_3">
|
||
<div class="form-body">
|
||
|
||
<div class="form-body" id="dr_css">
|
||
|
||
</div>
|
||
<div class="form-group">
|
||
<label class="col-md-2 control-label">{dr_lang('字段提示信息')}</label>
|
||
<div class="col-md-9">
|
||
<input class="form-control" type="text" name="data[setting][validate][tips]" value="{htmlspecialchars((string)$data['setting']['validate']['tips'])}" />
|
||
<span class="help-block">{dr_lang('对字段简短的提示,来说明这个字段是用来干什么的')}</span>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="form-group">
|
||
<label class="col-md-2 control-label">{dr_lang('Css样式表')}</label>
|
||
<div class="col-md-9">
|
||
<input class="form-control" type="text" name="data[setting][option][css]" value="{htmlspecialchars((string)$data['setting']['option']['css'])}" />
|
||
<span class="help-block">{dr_lang('[不建议使用] Text类型字段可用,对字段进行样式控制,使用开发者自定义的css样式')}</span>
|
||
</div>
|
||
</div>
|
||
<div class="form-group">
|
||
<label class="col-md-2 control-label">{dr_lang('表单附加属性')}</label>
|
||
<div class="col-md-9">
|
||
<textarea class="form-control" style="height:120px" name="data[setting][validate][formattr]">{$data['setting']['validate']['formattr']}</textarea>
|
||
<span class="help-block">{dr_lang('[不建议使用] Text类型字段可用,可以通过此处加入js事件、ajax验证、css等')}</span>
|
||
</div>
|
||
</div>
|
||
|
||
</div>
|
||
</div>
|
||
<div class="tab-pane {if $page==2}active{/if}" id="tab_2">
|
||
<div class="form-body">
|
||
|
||
<div class="form-group">
|
||
<label class="col-md-2 control-label">{dr_lang('禁止使用')}</label>
|
||
<div class="col-md-9">
|
||
<input type="checkbox" name="data[disabled]" value="1" {if $data['disabled']}checked{/if} data-on-text="{dr_lang('已禁止')}" data-off-text="{dr_lang('已开放')}" data-on-color="success" data-off-color="danger" class="make-switch" data-size="small">
|
||
</div>
|
||
</div>
|
||
<div class="form-group">
|
||
<label class="col-md-2 control-label">{dr_lang('显示位置')}</label>
|
||
<div class="col-md-9">
|
||
<div class="mt-radio-inline">
|
||
<label class="mt-radio mt-radio-outline"><input type="radio" name="data[setting][is_right]" value="0" {if !$data['setting']['is_right']}checked{/if} /> {dr_lang('默认')} <span></span></label>
|
||
<label class="mt-radio mt-radio-outline"><input type="radio" name="data[setting][is_right]" value="1" {if 1==$data['setting']['is_right']}checked{/if} /> {dr_lang('右侧')} <span></span></label>
|
||
<label class="mt-radio mt-radio-outline"><input type="radio" name="data[setting][is_right]" value="2" {if 2==$data['setting']['is_right']}checked{/if} /> {dr_lang('手动')} <span></span></label>
|
||
</div>
|
||
<span class="help-block">{dr_lang('此功能仅支持模块内容字段使用,选择“右侧”时字段显示在右侧部分; 当选择"手动"时,需要开发者手动调用')}
|
||
<?php echo '{';?>$diyfield}
|
||
</span>
|
||
</div>
|
||
</div>
|
||
<div class="form-group">
|
||
<label class="col-md-2 control-label">{dr_lang('后台不显示该字段')}</label>
|
||
<div class="col-md-9">
|
||
<label style="min-width: 200px">
|
||
<select class="form-control bs-select" name="data[setting][show_admin][]" multiple data-actions-box="true">
|
||
{loop $role $t}
|
||
{if $t.id>1}
|
||
<option {if dr_in_array($t.id, (array)$data.setting.show_admin)} selected{/if} value="{$t.id}">{dr_lang($t.name)}</option>
|
||
{/if}
|
||
{/loop}
|
||
</select>
|
||
</label>
|
||
|
||
<span class="help-block">{dr_lang('后台发布内容时该角色将不会看到这个字段')}</span>
|
||
</div>
|
||
</div>
|
||
<div class="form-group ">
|
||
<label class="col-md-2 control-label">{dr_lang('前端不显示该字段')}</label>
|
||
<div class="col-md-9">
|
||
|
||
<label style="min-width: 200px">
|
||
<select class="form-control bs-select" name="data[setting][show_member][]" multiple data-actions-box="true">
|
||
<option {if dr_in_array(0, (array)$data.setting.show_member)} selected{/if} value="0">{dr_lang('游客')}</option>
|
||
{list action=cache name=MEMBER.group}
|
||
<option {if dr_in_array($t.id, (array)$data.setting.show_member)} selected{/if} value="{$t.id}">{dr_lang($t.name)}</option>
|
||
{/list}
|
||
</select>
|
||
</label>
|
||
|
||
|
||
<span class="help-block">{dr_lang('前端发布内容时该会员组将不会看到这个字段,如果“前端显示”关闭了此功能就无效')}</span>
|
||
</div>
|
||
</div>
|
||
<div class="form-group">
|
||
<label class="col-md-2 control-label">{dr_lang('前端显示')}</label>
|
||
<div class="col-md-9">
|
||
<input type="checkbox" name="data[ismember]" value="1" {if $data['ismember']}checked{/if} data-on-text="{dr_lang('已显示')}" data-off-text="{dr_lang('已隐藏')}" data-on-color="success" data-off-color="danger" class="make-switch" data-size="small">
|
||
<span class="help-block">{dr_lang('前端发布内容时,前端表单或者会员中心控制是否显示它')}</span>
|
||
</div>
|
||
</div>
|
||
|
||
|
||
{if $issearch}
|
||
<div class="form-group">
|
||
<label class="col-md-2 control-label">{dr_lang('category_search_field标签')}</label>
|
||
<div class="col-md-9">
|
||
<input type="checkbox" name="data[issearch]" value="1" {if $data['issearch']}checked{/if} data-on-text="{dr_lang('已开启')}" data-off-text="{dr_lang('已关闭')}" data-on-color="success" data-off-color="danger" class="make-switch" data-size="small">
|
||
<span class="help-block">{dr_lang('只针对栏目模型字段搜索时,category_search_field标签使用,只支持Select、Radio、Checkbox')}</span>
|
||
</div>
|
||
</div>
|
||
{/if}
|
||
|
||
|
||
</div>
|
||
</div>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="portlet-body form myfooter">
|
||
<div class="form-actions text-center">
|
||
<label><button type="button" onclick="dr_ajax_submit3('{dr_now_url()}&page='+$('#dr_page').val(), 'myform', '2000', '')" class="btn blue"> <i class="fa fa-save"></i> {dr_lang('保存')}</button></label>
|
||
<label><button type="button" onclick="dr_ajax_submit3('{dr_now_url()}&page='+$('#dr_page').val(), 'myform', '2000', '{dr_url('field/index', ['rname' => $rname, 'rid' => $rid])}')" class="btn green"> <i class="fa fa-mail-reply-all"></i> {dr_lang('保存并返回')}</button></label>
|
||
</div>
|
||
</div>
|
||
</form>
|
||
<script type="text/javascript">
|
||
$(function() {
|
||
set_required({intval($data['setting']['validate']['required'])});
|
||
$("#dr_loading").show();
|
||
$.ajax({type: "GET",dataType:"json", url: '{dr_url('api/field')}&rand='+Math.random(),
|
||
data: {type:'{$data['fieldtype']}', relatedid:'{$rid}', relatedname:'{$rname}', app:'{$namespace}', id:{intval($data.id)}},
|
||
success: function(data) {
|
||
$('#dr_css').html(data.style);
|
||
$('#dr_option').html(data.option);
|
||
$("#dr_loading").hide();
|
||
App.init();
|
||
},
|
||
error: function(HttpRequest, ajaxOptions, thrownError) {
|
||
dr_ajax_alert_error(HttpRequest, this, thrownError);
|
||
}
|
||
});
|
||
});
|
||
function dr_ajax_submit3(url, form, time, go) {
|
||
var loading = layer.load(2, {
|
||
shade: [0.3,'#fff'], //0.1透明度的白色背景
|
||
time: 100000000
|
||
});
|
||
$.ajax({
|
||
type: "POST",
|
||
dataType: "json",
|
||
url: url,
|
||
data: $("#"+form).serialize(),
|
||
success: function(json) {
|
||
layer.close(loading);
|
||
// token 更新
|
||
if (json.token) {
|
||
var token = json.token;
|
||
$("#"+form+" input[name='"+token.name+"']").val(token.value);
|
||
}
|
||
if (json.code < 0) {
|
||
layer.confirm(
|
||
json.msg,
|
||
{
|
||
icon: 3,
|
||
shade: 0,
|
||
title: lang['ts'],
|
||
btn: ['{dr_lang("仍然创建")}', '{dr_lang("变更名字")}']
|
||
}, function(index) {
|
||
dr_ajax_submit3(url+"&is_op_add=1", form, time, go);
|
||
});
|
||
} else if (json.code > 0) {
|
||
dr_cmf_tips(json.code, json.msg, json.data.time);
|
||
if (time) {
|
||
var gourl = url;
|
||
if (go != '' && go != undefined && go != 'undefined') {
|
||
gourl = go;
|
||
} else if (json.data.url) {
|
||
gourl = json.data.url;
|
||
}
|
||
setTimeout("window.location.href = '"+gourl+"'", time);
|
||
}
|
||
dr_sync_cache(0); // 自动更新缓存
|
||
} else {
|
||
dr_cmf_tips(0, json.msg, json.data.time);
|
||
if (json.data.field) {
|
||
$('#'+form+' #dr_row_'+json.data.field).addClass('has-error');
|
||
$('#'+form+' #dr_'+json.data.field).focus();
|
||
}
|
||
}
|
||
},
|
||
error: function(HttpRequest, ajaxOptions, thrownError) {
|
||
dr_ajax_alert_error(HttpRequest, this, thrownError);
|
||
}
|
||
});
|
||
}
|
||
function show_field_option(type) {
|
||
{if $id}
|
||
var ftype = '{$data.fieldtype}';
|
||
if (ftype != type) {
|
||
$.ajax({type: "GET",dataType:"json", url: '{dr_url("field/type_edit")}&my='+ftype+'&to='+type,
|
||
success: function(json) {
|
||
if (json.code==1) {
|
||
$("#dr_loading").show();
|
||
$.ajax({type: "GET",dataType:"json", url: '{dr_url('api/field')}&rand='+Math.random(),
|
||
data: {type:type, relatedid:'{$rid}', relatedname:'{$rname}', app:'{$namespace}', id:{intval($data.id)}},
|
||
success: function(data) {
|
||
$('#dr_css').html(data.style);
|
||
$('#dr_option').html(data.option);
|
||
$("#dr_loading").hide();
|
||
App.init();
|
||
},
|
||
error: function(HttpRequest, ajaxOptions, thrownError) {
|
||
dr_ajax_alert_error(HttpRequest, this, thrownError);
|
||
}
|
||
});
|
||
} else {
|
||
layer.confirm(
|
||
json.msg,
|
||
{
|
||
icon: 3,
|
||
shade: 0,
|
||
title: lang['ts'],
|
||
btn: [lang['ok'], lang['esc']]
|
||
}, function(index) {
|
||
$("#dr_loading").show();
|
||
$.ajax({type: "GET",dataType:"json", url: '{dr_url('api/field')}&rand='+Math.random(),
|
||
data: {type:type, relatedid:'{$rid}', relatedname:'{$rname}', app:'{$namespace}', id:{intval($data.id)}},
|
||
success: function(data) {
|
||
$('#dr_css').html(data.style);
|
||
$('#dr_option').html(data.option);
|
||
$("#dr_loading").hide();
|
||
App.init();
|
||
},
|
||
error: function(HttpRequest, ajaxOptions, thrownError) {
|
||
dr_ajax_alert_error(HttpRequest, this, thrownError);
|
||
}
|
||
});
|
||
});
|
||
}
|
||
},
|
||
error: function(HttpRequest, ajaxOptions, thrownError) {
|
||
dr_ajax_alert_error(HttpRequest, this, thrownError);
|
||
}
|
||
});
|
||
|
||
}
|
||
{else}
|
||
$("#dr_loading").show();
|
||
$.ajax({type: "GET",dataType:"json", url: '{dr_url('api/field')}&rand='+Math.random(),
|
||
data: {type:type, relatedid:'{$rid}', relatedname:'{$rname}', app:'{$namespace}', id:{intval($data.id)}},
|
||
success: function(data) {
|
||
$('#dr_css').html(data.style);
|
||
$('#dr_option').html(data.option);
|
||
$("#dr_loading").hide();
|
||
App.init();
|
||
},
|
||
error: function(HttpRequest, ajaxOptions, thrownError) {
|
||
dr_ajax_alert_error(HttpRequest, this, thrownError);
|
||
}
|
||
});
|
||
{/if}
|
||
}
|
||
function set_required(id) {
|
||
if (!id) {
|
||
$('#required').hide();
|
||
} else {
|
||
$('#required').show();
|
||
}
|
||
}
|
||
|
||
function dr_test_call(value) {
|
||
$.ajax({type: "GET",dataType:"json", url: "{dr_url('api/field_call')}&name="+$('#'+value).val(),
|
||
success: function(json) {
|
||
dr_tips(json.code, json.msg);
|
||
},
|
||
error: function(HttpRequest, ajaxOptions, thrownError) {
|
||
dr_ajax_alert_error(HttpRequest, this, thrownError);
|
||
}
|
||
});
|
||
}
|
||
</script>
|
||
{template "footer.html"} |