<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                [TOC] ## 知識點 > 1、信息增加編輯鏈接帶參數 2、模板中加載默認值 3、百度webuploader編輯加載默認圖片 4、轉義字符(\)的轉義 $v = str_replace("\/","\\",$v); 5、多文件上傳bootstrap-fileinput 6、保存編輯 7、上傳路徑規劃 ## 問題解決 > 1、SQLSTATE[42S02]: Base table or view not found: 1146 Table 'thinkphp5.tp_' doesn't exist 原因:傳參的問題,參數錯誤,導致查詢不到相關信息。如內容ID,還是分類catid,要確認清楚。 > 功能實現 ## 一、信息增加編輯鏈接帶參數 ### 1、編輯鏈接 編輯鏈接要在控制器中添加,這個與datatables插件有關系 ~~~ public function getDataTables($id = 0) { $lists[$key]['operate'] = "<a href='". url('edit',['id'=>$value['id'], 'catid'=>$value['catid']]) ."' title='編輯' target='_parent'><i class='fa fa-edit text-navy'></i></a>&nbsp;&nbsp; <a name='delete' href='". url('delete',['id'=>$value['id'], 'catid'=>$value['catid']]) ."' title='刪除'><i class='fa fa-trash-o text-navy'></i></a>"; } ~~~ 備注:target='_parent' 這個是在父窗口中打開 參數:信息ID和分類ID ### 2、控制器edit操作 思路:首先顯示字段;其次加載默認數據 關鍵:$value['realvalue'] = $article[$field];(組合數據) ~~~ //編輯功能 public function edit( $catid= 0, $id = 0) { if(request()->isPost()) { $content = new ContentModel; if($content->editContent(input('post.'))) { return success('信息編輯成功!',url('index')); } else { return error('信息編輯失敗!'); } }else { //獲取數據 $tablename = getModInfoById($catid,'tablename'); $article = Db::name($tablename)->where('id',$id)->find(); //根據分類ID獲取模型ID $modelid = getModInfoById($catid,'id'); $modelsFieldArray = Db::name('models_field')->where('modelid',$modelid)->order('sort')->select(); foreach ($modelsFieldArray as $value) { //字段名 $field = $value['field']; //字段類型 $func = $value['formtype']; $value['realvalue'] = $article[$field]; //判斷函數是否存在 if(function_exists($func)){ //獲取表單HTML代碼 $form = $func($value); if($form != ''){ $info[$field] = array( 'name' => $value['name'], 'form' => $form, 'formtype' => $value['formtype'] ); } } } $this->assign('forminfos',$info); //分類名稱 $catname = getCatInfoById($catid,'catname'); $this->assign('catname',$catname); return view(); } } ~~~ ### 3、模板 edit模板與add類似,這里不再顯示出來 ## 二、模板中加載默認值 思路:每個字段就是個函數,函數返回表單信息;控制器中分配真實數據;判斷真實數據是否為空,為空則用默認數據 關鍵:$value = is_null($fieldinfo['realvalue']) ? $setting['defaultvalue'] : $fieldinfo['realvalue']; ~~~ 1、text $value = is_null($fieldinfo['realvalue']) ? $setting['defaultvalue'] : $fieldinfo['realvalue']; <input id="info_$field" name="info[$field]" type="$type" class="form-control" value="$value" /> 2、textarea $value = is_null($fieldinfo['realvalue']) ? $setting['defaultvalue'] : $fieldinfo['realvalue']; <textarea type="text" id="info_$field" name="info[$field]" class="form-control" style="height:$height">$value</textarea> 3、number $value = is_null($fieldinfo['realvalue']) ? $setting['defaultvalue'] : $fieldinfo['realvalue']; <input id="info_$field" name="info[$field]" type="type" class="form-control" value="$value" /> 4、datetime $date = is_null($fieldinfo['realvalue']) ? date('Y-m-d') : $fieldinfo['realvalue']; $datetime = is_null($fieldinfo['realvalue']) ? date('Y-m-d H:i:s') : $fieldinfo['realvalue']; <input class="form-control layer-date" name="info[$field]" value="$date" onclick="laydate({format: 'YYYY-MM-DD'})"> <input class="form-control layer-date" name="info[$field]" value="$datetime" onclick="laydate({istime: true, format: 'YYYY-MM-DD hh:mm:ss'})"> 5、image $value = is_null($fieldinfo['realvalue']) ? '' : $fieldinfo['realvalue']; <input id="info_$field" name="info[$field]" class="input-large form-control" type="text" value="$value"> 6、downfile $value = is_null($fieldinfo['realvalue']) ? '' : $fieldinfo['realvalue']; <input id="info_$field" name="info[$field]" class="input-large form-control" type="text" value="$value"> 7、editor $value = is_null($fieldinfo['realvalue']) ? $setting['defaultvalue'] : $fieldinfo['realvalue']; 8、box $defaultvalue = is_null($fieldinfo['realvalue']) ? $setting['defaultvalue'] : $fieldinfo['realvalue']; // 考慮多值情況 9、images $value = is_null($fieldinfo['realvalue']) ? '' : $fieldinfo['realvalue']; 見三、百度webuploader編輯加載默認圖片 10、downfiles $value = is_null($fieldinfo['realvalue']) ? '' : $fieldinfo['realvalue']; ~~~ ## 三、百度webuploader編輯加載默認圖片 ### (一)靜態編輯 #### 1、多圖片靜態html 新增樣式:queueListSuccess ~~~ <div id="uploader-list-container" class="uploader-list-container"> <div class="queueListSuccess" style="margin:20px"> <ul class="filelist"> <li id="WU_FILE_XXX" class="state-complete" studyfox_img="20170423\\042be1ff5366d878ae96c80bd55a1f82.jpg"> <p class="imgWrap"><img src="__PUBLIC__/uploads/20170423/042be1ff5366d878ae96c80bd55a1f82.jpg" width="110" height="110"></p> <div class="file-panel" style="height: 0px;"><span class="cancel">刪除</span></div> <span class="success"></span> </li> <li id="WU_FILE_YYY" class="state-complete" studyfox_img="20170423\\e38e95c1269e323b2c44f46448c8d06f.jpg"> <p class="imgWrap"><img src="__PUBLIC__/uploads/20170423/e38e95c1269e323b2c44f46448c8d06f.jpg" width="110" height="110"></p> <div class="file-panel" style="height: 0px;"><span class="cancel">刪除</span></div> <span class="success"></span> </li> </ul> </div> </div> ~~~ 以上代碼只能在信息編輯時候才顯示出來,新增內容時不顯示以上代碼。 #### 2、js刪除 ~~~ //刪除原圖片 $(".cancel").click(function(){ var img_src = $(this).parent().parent().attr('studyfox_img'); var id = $(this).parent().parent().attr('id'); //后臺刪除圖片 $.ajax({ url: '$delete_url', type: 'POST', data: {'img': img_src}, success: function(result, textStatus){ //圖片刪除成功后移除文本框圖片信息,三種情況 ,號位置在前 后 或沒有,號 var images_value = $('#info_$field').val();//隱藏文本框的值 images_value = images_value.replace(img_src+',', '').replace(','+img_src, '').replace(img_src, ''); //替換,號在右邊;左邊;直接替換 //重新賦值 $('#info_$field').val(images_value); //view的銷毀 var li = $('#'+id); delete percentages[ id ]; updateTotalProgress(); li.off().find('.file-panel').off().end().remove(); //刪除所有圖片之后銷毀外框 if(images_value==''){ $("#uploader-list-container").remove(); } }, error: function(XMLHttpRequest, textStatus){ layer.alert('刪除失敗!', {icon:2}); } }); }); ~~~ #### 3、淡入淡出 ~~~ var topli = $(".cancel").parent().parent(); topli.on( 'mouseenter', function() { $(this).children('.file-panel').stop().animate({height: 30}); }); topli.on( 'mouseleave', function() { $(this).children('.file-panel').stop().animate({height: 0}); }); ~~~ ### (二)動態編輯 #### 1、判斷是編輯還是新增 ~~~ $public = config("view_replace_str.__PUBLIC__"); $value = is_null($fieldinfo['realvalue']) ? '' : $fieldinfo['realvalue']; if($value!='') { $values = explode(',',$value); $str = ''; foreach ($values as $key => $v) { $num = rand(1000,9999); $v = str_replace("\/","\\",$v); $str .= <<<EOF <li id="WU_FILE_$num" class="state-complete" studyfox_img="$v"> <p class="imgWrap"><img src="$public/uploads/$v" width="110" height="110"></p> <div class="file-panel" style="height: 0px;"><span class="cancel">刪除</span></div> <span class="success"></span> </li> EOF; } $values = <<<EOF <div id="uploader-list-container" class="uploader-list-container"> <div class="queueListSuccess" style="margin:20px"> <ul class="filelist"> $str </ul> </div> </div> EOF; }else{ $values = ''; } $str = <<<EOF <input type="text" id="info_$field" name="info[$field]" class="input-large form-control" value="$value"> $values //妙哉!妙哉!妙哉! <div class="uploader-list-container"> <div class="queueList"> <div id="dndArea" class="placeholder"> <div id="filePicker-2"></div> <p>或將圖片拖到這里,單次最多可選 $maxnumber 張</p> </div> </div> <div class="statusBar" style="display:none;"> <div class="progress"> <span class="text">0%</span> <span class="percentage"></span> </div> <div class="info"></div> <div class="btns"> <div id="filePicker2"></div> <div class="uploadBtn">開始上傳</div> </div> </div> </div> <script src="__ADMIN__/plugins/webuploader-0.1.5/webuploader.min.js"></script> <script type="text/javascript" > …… </javascript" > EOF; return $str; ~~~ #### 2、轉義字符(\)的轉義 $v = str_replace("\/","\\",$v); 具體見第四點 ## 四、轉義字符(\)的轉義 參考網址:轉義序列(反斜線) http://php.net/manual/zh/regexp.reference.escape.php 反斜線有多種用法。首先,如果緊接著是一個非字母數字字符,表明取消 該字符所代表的特殊涵義。這種將反斜線作為轉義字符的用法在字符類 內部和外部都可用。 比如,如果你希望匹配一個 "*" 字符,就需要在模式中寫為 "\*"。 這適用于一個字符在不進行轉義會有特殊含義的情況下。 但是, 對于非數字字母的字符,總是在需要其進行原文匹配的時候在它前面增加一個反斜線, 來聲明它代表自己,這是安全的。 如果要匹配一個反斜線,那么在模式中使用 ”\\”。 $v = str_replace("\/","\\",$v); ## 五、多文件上傳bootstrap-fileinput 思路:參照多圖片上傳 ### (一)靜態刪除 #### 1、靜態html ~~~ <div id="file-input" class="file-input"> <div class="file-preview"> <div class=" file-drop-zone"> <div class="file-preview-thumbnails"> <div class="file-preview-frame krajee-default kv-preview-thumb file-preview-success" id="uploaded-XXX" data-fileindex="-1" data-template="rar" title="" studyfox_img="20170429\f074865d0fdc50e5391e6d4029ee2e90.zip"> <div class="kv-file-content" style="height:130px"> <div class="kv-preview-data file-preview-other-frame"> <div class="file-preview-other"> <span class="file-other-icon"><i class="glyphicon glyphicon-file"></i></span> </div> </div> </div> <div class="file-thumbnail-footer" style="height:0"> <div class="file-upload-indicator" title="上傳" style="margin-left: 0px; bottom:-26px;"><i class="glyphicon glyphicon-ok-sign text-success"></i></div> <div class="file-actions"> <div class="file-footer-buttons"> <button type="button" class="kv-file-upload btn btn-xs btn-default" title="上傳文件" style="display: none;"><i class="glyphicon glyphicon-upload text-info"></i></button> <button type="button" class="kv-file-remove btn btn-xs btn-default" title="刪除文件"><i class="glyphicon glyphicon-trash text-danger"></i></button> </div> <div class="clearfix"></div> </div> </div> </div> </div> <div class="clearfix"></div> <div class="file-preview-status text-center text-success"></div> <div class="kv-fileinput-error file-error-message" style="display: none;"></div> </div> </div> </div> ~~~ #### 2、刪除文件js 第一步 刪除本地文件 第二步 view的銷毀 第三步 刪除所有文件之后銷毀外框 ~~~ $('button.kv-file-remove').click(function(){ var par = $(this).parent().parent().parent().parent(); var img_src = par.attr('studyfox_img'); var id = par.attr('id'); //后臺刪除文件 $.ajax({ url: '$delete_url', type: 'POST', data: {'img': img_src}, success: function(result, textStatus){ //圖片刪除成功后移除文本框圖片信息,三種情況 ,號位置在前 后 或沒有,號 var images_value = $('#info_$field').val();//隱藏文本框的值 images_value = images_value.replace(img_src+',', '').replace(','+img_src, '').replace(img_src, ''); //替換,號在右邊;左邊;直接替換 //重新賦值 $('#info_$field').val(images_value); //view的銷毀 par.remove(); //刪除所有文件之后銷毀外框 if(images_value==''){ $("#file-input").remove(); } }, error: function(XMLHttpRequest, textStatus){ layer.alert('刪除失敗!', {icon:2}); } }); }); ~~~ ### (二)動態刪除 ~~~ $value = is_null($fieldinfo['realvalue']) ? '' : $fieldinfo['realvalue']; if($value!='') { $values = explode(',',$value); $str = ''; foreach ($values as $key => $v) { $num = rand(1000,9999); $v = str_replace("\/","\\",$v); $str .= <<<EOF <div class="file-preview-frame krajee-default kv-preview-thumb file-preview-success" id="uploaded-$num" data-fileindex="-1" data-template="rar" title="" studyfox_img="$v"> <div class="kv-file-content" style="height:130px"> <div class="kv-preview-data file-preview-other-frame"> <div class="file-preview-other"> <span class="file-other-icon"><i class="glyphicon glyphicon-file"></i></span> </div> </div> </div> <div class="file-thumbnail-footer" style="height:0"> <div class="file-upload-indicator" title="上傳" style="margin-left: 0px; bottom:-26px;"><i class="glyphicon glyphicon-ok-sign text-success"></i></div> <div class="file-actions"> <div class="file-footer-buttons"> <button type="button" class="kv-file-upload btn btn-xs btn-default" title="上傳文件" style="display: none;"><i class="glyphicon glyphicon-upload text-info"></i></button> <button type="button" class="kv-file-remove btn btn-xs btn-default" title="刪除文件"><i class="glyphicon glyphicon-trash text-danger"></i></button> </div> <div class="clearfix"></div> </div> </div> </div> EOF; } $values = <<<EOF <div id="file-input" class="file-input"> <div class="file-preview"> <div class=" file-drop-zone"> <div class="file-preview-thumbnails"> $str </div> <div class="clearfix"></div> <div class="file-preview-status text-center text-success"></div> <div class="kv-fileinput-error file-error-message" style="display: none;"></div> </div> </div> </div> EOF; }else{ $values = ''; } $str = <<<EOF <input type="hidden" id="info_$field" name="info[$field]" class="input-large form-control" value="$value" > $values <input id="file-zh" name="file[]" type="file" multiple> <link href="$admin/plugins/bootstrap-fileinput/css/fileinput.css" media="all" rel="stylesheet" type="text/css" /> <script src="$admin/plugins/bootstrap-fileinput/js/fileinput.js" type="text/javascript"></script> <script src="$admin/plugins/bootstrap-fileinput/js/locales/zh.js" type="text/javascript"></script> …… EOF; } return $str; ~~~ ## 六、保存編輯 ### 1、控制器業務邏輯 ~~~ //編輯功能 public function edit( $catid= 0, $id = 0) { if(request()->isPost()) { $content = new ContentModel; if($content->editContent(input('post.'))) { return success('信息編輯成功!',url('index',['id'=>input('post.catid')])); } else { return error('信息編輯失敗!'); } }else { //獲取數據 $tablename = getModInfoById($catid,'tablename'); $article = Db::name($tablename)->where('id',$id)->find(); //根據分類ID獲取模型ID $modelid = getModInfoById($catid,'id'); $modelsFieldArray = Db::name('models_field')->where('modelid',$modelid)->order('sort')->select(); foreach ($modelsFieldArray as $value) { //字段名 $field = $value['field']; //字段類型 $func = $value['formtype']; $value['realvalue'] = $article[$field]; //判斷函數是否存在 if(function_exists($func)){ //獲取表單HTML代碼 $form = $func($value); if($form != ''){ $info[$field] = array( 'name' => $value['name'], 'form' => $form, 'formtype' => $value['formtype'] ); } } } $this->assign('forminfos',$info); //分類名稱 $catname = getCatInfoById($catid,'catname'); $this->assign('catname',$catname); return view(); } } ~~~ ### 2、模型數據處理 ~~~ public function editContent($data) { //dump($data); if(empty($data) || !is_array($data)) { return false; } $tablename = getModInfoById($data['catid'], 'tablename');//表名 $data['info']['catid'] = $data['catid']; $data['info']['id'] = $data['id']; //checkbox和multiple處理 foreach ($data['info'] as $key => $value) { if(is_array($value)){ $data['info'][$key] = implode(',',$value); //2,3 } } if(Db::name($tablename)->update($data['info'])) { return true; }else { return false; } } ~~~ ## 七、上傳路徑規劃 思路:四級目錄,上傳資源統一保存到public目錄下的uploads下面,旗下設立圖片(image)、文件(file)、視頻(video)、音樂(mp3)等子目錄 格式:./public/image/20180731/43b7b515e635ae88e70f339411960e9c.jpg ### (一)控制器上傳操作 ~~~ //單文件(包括圖片)異步上傳 public function upload_image(){ //圖片上傳 $file = request()->file(input('name')); $info = $file->move(ROOT_PATH . 'public/uploads/image'); if($info) { return json_encode($info->getSaveName()); } } //多圖片上傳 public function upload_images(){ $file = request()->file('file'); $info = $file->move(ROOT_PATH . 'public/uploads/image'); if($info) { return json_encode($info->getSaveName()); } } //多文件上傳 public function upload_downfiles(){ $files = request()->file('file'); foreach ($files as $file) { $info = $file->move(ROOT_PATH . 'public/uploads/file'); if($info) { return $info->getSaveName(); } } } //編輯時刪除多文件 public function delete_file(){ $delete_url = input('img'); try { unlink('./uploads/file/' . $delete_url); //刪除成功返回1 } catch (Exception $e) { } } //編輯刪除多圖片 public function delete_image(){ $delete_url = input('img'); try { unlink('./uploads/image/' . $delete_url); //刪除成功返回1 } catch (Exception $e) { } } ~~~ > 以上原來的操作如下(僅供參考): ~~~ //單文件異步上傳 public function upload_image(){ //圖片上傳 $file = request()->file(input('name')); $info = $file->move(ROOT_PATH . 'public/uploads'); if($info) { return json_encode($info->getSaveName()); } } //多圖片上傳 public function upload_images(){ $file = request()->file('file'); $info = $file->move(ROOT_PATH . 'public/uploads'); if($info) { return json_encode($info->getSaveName()); } } //多文件上傳 public function upload_downfiles(){ $files = request()->file('file'); foreach ($files as $file) { $info = $file->move(ROOT_PATH . 'public/uploads'); if($info) { return $info->getSaveName(); } } } //刪除文件或圖片 public function delete_file(){ $delete_url = input('img'); try { unlink(ROOT_PATH . 'public/uploads/' . $delete_url); //刪除成功返回1 } catch (Exception $e) { } } ~~~ ### (二)百度webuploader插件編輯刪除多圖片 ~~~ function images($fieldinfo){ //字段名 $field = $fieldinfo['field']; $url = url('upload_images'); $delete_url = url('delete_image'); //反序列化設置項 $setting = unserialize($fieldinfo['setting']); $allowext = $setting['allowext']; $maxnumber = $setting['maxnumber']; $admin = config("view_replace_str.__ADMIN__"); $public = config("view_replace_str.__PUBLIC__"); // 默認值 $value = is_null($fieldinfo['realvalue']) ? '' : $fieldinfo['realvalue']; // 判斷是編輯還是新增 if($value!='') { $values = explode(',',$value); $str = ''; foreach ($values as $key => $v) { $num = rand(1000,9999); $v = str_replace("\/","\\",$v); $str .= <<<EOF <li id="WU_FILE_$num" class="state-complete" studyfox_img="$v"> <p class="imgWrap"><img src="$public/uploads/image/$v" width="110" height="110"></p> <div class="file-panel" style="height: 0px;"><span class="cancel">刪除</span></div> <span class="success"></span> </li> EOF; } $values = <<<EOF <div id="uploader-list-container" class="uploader-list-container"> <div class="queueListSuccess" style="margin:20px"> <ul class="filelist"> $str </ul> </div> </div> EOF; }else{ $values = ''; } $str = <<<EOF <input type="hidden" id="info_$field" name="info[$field]" class="input-large form-control" value="$value" > $values // 妙哉!妙哉!妙哉! <div class="uploader-list-container"> <div class="queueList"> <div id="dndArea" class="placeholder"> <div id="filePicker-2"></div> <p>或將圖片拖到這里,單次最多可選 $maxnumber 張</p> </div> </div> <div class="statusBar" style="display:none;"> <div class="progress"> <span class="text">0%</span> <span class="percentage"></span> </div> <div class="info"></div> <div class="btns"> <div id="filePicker2"></div> <div class="uploadBtn">開始上傳</div> </div> </div> </div> <script src="$admin/plugins/webuploader-0.1.5/webuploader.min.js"></script> <script type="text/javascript" > // 這里只是部分代碼 // 負責view的銷毀 function removeFile( file ) { var li = $('#'+file.id); var img_src = li.attr('studyfox_img'); delete percentages[ file.id ]; updateTotalProgress(); li.off().find('.file-panel').off().end().remove(); //后臺刪除圖片 $.ajax({ url: '$delete_url', type: 'POST', data: {'img': img_src}, success: function(result, textStatus){ //圖片刪除成功后移除文本框圖片信息,三種情況 ,號位置在前 后 或沒有,號 var images_value = $('#info_$field').val();//隱藏文本框的值 images_value = images_value.replace(img_src+',', ''); //替換,號在右邊 images_value = images_value.replace(','+img_src, ''); //替換,號在左邊 images_value = images_value.replace(img_src, ''); //直接替換 //重新賦值 $('#info_$field').val(images_value); }, error: function(XMLHttpRequest, textStatus){ layer.alert('刪除失敗!', {icon:2}); } }); } // 編輯時刪除原圖片 $(".cancel").click(function(){ var img_src = $(this).parent().parent().attr('studyfox_img'); var id = $(this).parent().parent().attr('id'); //后臺刪除圖片 $.ajax({ url: '$delete_url', type: 'POST', data: {'img': img_src}, success: function(result, textStatus){ //圖片刪除成功后移除文本框圖片信息,三種情況 ,號位置在前 后 或沒有,號 var images_value = $('#info_$field').val();//隱藏文本框的值 images_value = images_value.replace(img_src+',', '').replace(','+img_src, '').replace(img_src, ''); //替換,號在右邊;左邊;直接替換 //重新賦值 $('#info_$field').val(images_value); //view的銷毀 var li = $('#'+id); delete percentages[ id ]; updateTotalProgress(); li.off().find('.file-panel').off().end().remove(); //刪除所有圖片之后銷毀外框 if(images_value==''){ $("#uploader-list-container").remove(); } }, error: function(XMLHttpRequest, textStatus){ layer.alert('刪除失敗!', {icon:2}); } }); }); //淡入淡出 var topli = $(".cancel").parent().parent(); topli.on( 'mouseenter', function() { $(this).children('.file-panel').stop().animate({height: 30}); }); topli.on( 'mouseleave', function() { $(this).children('.file-panel').stop().animate({height: 0}); }); </script> EOF; return $str; } ~~~ ### (三)插件bootstrap-fileinput編輯刪除多文件 ~~~ function downfiles($fieldinfo){ $admin = config("view_replace_str.__ADMIN__"); //字段名 $field = $fieldinfo['field']; $url = url('upload_downfiles'); $delete_url = url('delete_file'); //反序列化設置項 $setting = unserialize($fieldinfo['setting']); $allowext = $setting['allowext']; //字符串格式調整 $allowext = str_replace("|","','",$allowext); $allowext = "'" . $allowext . "'"; $maxnumber = $setting['maxnumber']; // 默認值 $value = is_null($fieldinfo['realvalue']) ? '' : $fieldinfo['realvalue']; if($value!='') { $values = explode(',',$value); $str = ''; foreach ($values as $key => $v) { $num = rand(1000,9999); $v = str_replace("\/","\\",$v); $str .= <<<EOF <div class="file-preview-frame krajee-default kv-preview-thumb file-preview-success" id="uploaded-$num" data-fileindex="-1" data-template="rar" title="" studyfox_img="$v"> <div class="kv-file-content" style="height:130px"> <div class="kv-preview-data file-preview-other-frame"> <div class="file-preview-other"> <span class="file-other-icon"><i class="glyphicon glyphicon-file"></i></span> </div> </div> </div> <div class="file-thumbnail-footer" style="height:0"> <div class="file-upload-indicator" title="上傳" style="margin-left: 0px; bottom:-26px;"><i class="glyphicon glyphicon-ok-sign text-success"></i></div> <div class="file-actions"> <div class="file-footer-buttons"> <button type="button" class="kv-file-upload btn btn-xs btn-default" title="上傳文件" style="display: none;"><i class="glyphicon glyphicon-upload text-info"></i></button> <button type="button" class="kv-file-remove btn btn-xs btn-default" title="刪除文件"><i class="glyphicon glyphicon-trash text-danger"></i></button> </div> <div class="clearfix"></div> </div> </div> </div> EOF; } $values = <<<EOF <div id="file-input" class="file-input"> <div class="file-preview"> <div class=" file-drop-zone"> <div class="file-preview-thumbnails"> $str </div> <div class="clearfix"></div> <div class="file-preview-status text-center text-success"></div> <div class="kv-fileinput-error file-error-message" style="display: none;"></div> </div> </div> </div> EOF; }else{ $values = ''; } $str = <<<EOF <input type="hidden" id="info_$field" name="info[$field]" class="input-large form-control" value="$value" > $values <input id="file-zh" name="file[]" type="file" multiple> <link href="$admin/plugins/bootstrap-fileinput/css/fileinput.css" media="all" rel="stylesheet" type="text/css" /> <script src="$admin/plugins/bootstrap-fileinput/js/fileinput.js" type="text/javascript"></script> <script src="$admin/plugins/bootstrap-fileinput/js/locales/zh.js" type="text/javascript"></script> <script type="text/javascript" > // 編輯刪除文件 $('button.kv-file-remove').click(function(){ var par = $(this).parent().parent().parent().parent(); var img_src = par.attr('studyfox_img'); var id = par.attr('id'); //后臺刪除文件 $.ajax({ url: '$delete_url', type: 'POST', data: {'img': img_src}, success: function(result, textStatus){ //圖片刪除成功后移除文本框圖片信息,三種情況 ,號位置在前 后 或沒有,號 //獲取隱藏文本框的值 var images_value = $('#info_$field').val(); //替換,號在右邊;左邊;直接替換 images_value = images_value.replace(img_src+',', '').replace(','+img_src, '').replace(img_src, ''); //重新賦值 $('#info_$field').val(images_value); //view的銷毀 par.remove(); //刪除所有文件之后銷毀外框 if(images_value==''){ $("#file-input").remove(); } }, error: function(XMLHttpRequest, textStatus){ layer.alert('刪除失敗!', {icon:2}); } }); }); </script> EOF; return $str; } ~~~ ### (四)百度編輯器ueditor1上傳圖片路徑 #### 1、修改js文件 位置:\ueditor1_4_3_3\php\config.json 代碼: ~~~ /* 上傳圖片配置項 */ "imagePathFormat": "/uploads/image/{yyyy}{mm}{dd}/{time}{rand:6}", /* 涂鴉圖片上傳配置項 */ "scrawlPathFormat": "/uploads/image/{yyyy}{mm}{dd}/{time}{rand:6}", /* 截圖工具上傳 */ "snapscreenPathFormat": "/uploads/image/{yyyy}{mm}{dd}/{time}{rand:6}", /* 抓取遠程圖片配置 */ "catcherPathFormat": "/uploads/image/{yyyy}{mm}{dd}/{time}{rand:6}", /* 上傳視頻配置 */ "videoPathFormat": "/uploads/video/{yyyy}{mm}{dd}/{time}{rand:6}", /* 上傳文件配置 */ "filePathFormat": "/uploads/file/{yyyy}{mm}{dd}/{time}{rand:6}", /* 列出指定目錄下的圖片 */ "imageManagerListPath": "/uploads/image/", /* 列出指定目錄下的文件 */ "fileManagerListPath": "/uploads/file/", ~~~ #### 2、字段函數 ~~~ function editor($fieldinfo){ //字段名 $field = $fieldinfo['field']; //反序列化設置項 $setting = unserialize($fieldinfo['setting']); //默認值 $value = is_null($fieldinfo['realvalue']) ? $setting['defaultvalue'] : $fieldinfo['realvalue']; //高度 $height = $setting['height']; $admin = config("view_replace_str.__ADMIN__"); $str = <<<EOF <script id="container" name="info[$field]" type="text/plain">$value</script> <script src="$admin/plugins/ueditor1_4_3_3/ueditor.config.js"></script> <script src="$admin/plugins/ueditor1_4_3_3/ueditor.all.js"></script> <script> var um = UE.getEditor('container',{ initialFrameHeight:$height, autoHeightEnabled:false, catchRemoteImageEnable:true }); </script> EOF; return $str; } ~~~ #### 3、拓展閱讀 [內部鏈接](http://www.hmoore.net/wayanbao/thinkphp/708574)
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看