这段时间准备写个属于自己的CMS。刚好下雨,加班加点吧。有点急。
用后台模板的时候发现layui还是蛮漂亮的,但由于一些别的想法最终放弃了。还是用自己搞的一套吧,不过自己觉得layui里面的传图控件还是蛮好的。由于这次写的是CMS,里面涉及到配置文件里动态加图,单然最好就是ajax提交图了,网上看了下有的说为了安全图必须在表单里才能上传的。百度折腾了一下,放上来。照例放代码片段吧。
前台部分
<div class="page-container">
<form class="form form-horizontal" id="form" action="{:url('system/system_save')}">
<div id="tab-system" class="HuiTab">
<div class="tabBar cl">
{volist name="Think.config.CONFIG_GROUP_LIST" id="group"}
<span>{$group}</span>
{/volist}
</div>
{volist name="conftab" id="vo"}
<div class="tabCon">
{volist name="vo" id="voo"}
<div class="row cl">
<label class="form-label col-xs-4 col-sm-2">{$voo.title}:</label>
<div class="formControls col-xs-8 col-sm-9">
{switch name="voo.type"}
{case value="0"}
<input type="number" name ="config[{$voo.name}]" placeholder="{$voo.remark}" value="{$voo.value}" class="input-text">
{/case}
{case value="1"}
<input type="text" name ="config[{$voo.name}]" placeholder="{$voo.remark}" value="{$voo.value}" class="input-text">
{/case}
{case value="2"}
<textarea name="config[{$voo.name}]" class="textarea" placeholder="{$voo.remark}" dragonfly="true" >{$voo.value}</textarea>
{/case}
{case value="3"}
<textarea name="config[{$voo.name}]" cols="" rows="" class="textarea" placeholder="{$voo.remark}" dragonfly="true" >{$voo.value}</textarea>
{/case}
{case value="4"}
<select name="config[{$voo.name}]" class="select" style="width:120px;">
{volist name=":parse_config_attr($voo['extra'])" id="vo1"}
<option value="{$key}" {eq name="voo.value" value="$key"}selected{/eq}>{$vo1}</option>
{/volist}
</select>
{/case}
{case value="5"}
<input type="hidden" name ="config[{$voo.name}]" value="{$voo.value}" id="val_{$voo.name}" >
<img src="{$voo.value}" style="width: 100px;height: 50px; margin:20px;" id="img_{$voo.name}" >
<a href="javascript:;" class="file" title="点击选择所要上传的图片" >上传图片
<input type="file" data-href="{$voo.name}" name="image[]" id="file_{$voo.name}" multiple="multiple"/>
</a>
{/case}
{/switch}
</div>
</div>
{/volist}
</div>
{/volist}
</div>
<div class="row cl">
<div class="col-xs-8 col-sm-9 col-xs-offset-4 col-sm-offset-2">
<button class="btn btn-primary radius" type="submit"><i class="Hui-iconfont"></i> 保存</button>
<button onClick="layer_close();" class="btn btn-default radius" type="button"> 取消 </button>
</div>
</div>
</form>
</div>
{/block}
{block name="footerjs"}
{/*请在下方写此页面业务相关的脚本*/ }
<script type="text/javascript">
$(function(){
$.Huitab("#tab-system .tabBar span","#tab-system .tabCon","current","click","0");
function getObjectURL(file,field) {
var url = null;
if (window.createObjectURL != undefined) { // basic
$("#oldcheckpic_"+field).val("nopic");
url = window.createObjectURL(file);
} else if (window.URL != undefined) { // mozilla(firefox)
$("#oldcheckpic_"+field).val("nopic");
url = window.URL.createObjectURL(file);
} else if (window.webkitURL != undefined) { // webkit or chrome
$("#oldcheckpic_"+field).val("nopic");
url = window.webkitURL.createObjectURL(file);
}
return url;
}
$("input[id^=file_]").change(function () {
var field=$(this).attr('data-href'),objUrl = getObjectURL(this.files[0],field);
if (objUrl) {
$("#img_"+field).attr("src", objUrl);
}
//创建FormData对象
var data = new FormData();
//为FormData对象添加数据
$.each($(this)[0].files, function(i, file) {
data.append('file', file);
});
$.ajax({
url:'{:url('api/upload/index',['catid'=>1])}',
type:'POST',
data:data,
cache: false,
contentType: false, //不可缺
processData: false, //不可缺
success:function(data){
if(data.info){
if (data.status==1) {
$("#val_"+field).val(data.src);
}else{
layer.msg(data.info,{icon:2,time:3000});
}
}else{
layer.msg("服务器响应错误",{icon:5});
}
}});
});
});
</script>这里前台在ajax传图前就可以取到图预览的,也是看的别人的代码。觉得不错。后台图上传部分就不贴了。跟thinkphp5里面的传图教程差不多的。