流程比較簡單,主要有以下步驟:
注冊插件
首先,全局配置kindeditor參數:
KindEditor.lang({ audio : 'MP3'}); KindEditor.options.htmlTags['audio'] = ['src','controls','autoplay','type']; KindEditor.options.htmlTags['source'] = ['src','controls','autoplay','type'];在初始化編輯器的地方,配置按鈕列表items參數,把
'audio'
放在合適的位置:
KindEditor.ready(function(K) {editor = K.create('#info,#spread_info', {  //其他配置省略...  items : [    'source', '|', 'undo', 'redo', '|', 'preview', 'print', 'template', 'code', 'cut', 'copy', 'paste',    'plainpaste', 'wordpaste', '|', 'justifyleft', 'justifycenter', 'justifyright',    'justifyfull', 'insertorderedlist', 'insertunorderedlist', 'indent', 'outdent', 'subscript',    'superscript', 'clearhtml', 'quickformat', 'selectall', '|', 'fullscreen', '/',    'formatblock', 'fontname', 'fontsize', '|', 'forecolor', 'hilitecolor', 'bold',    'italic', 'underline', 'strikethrough', 'lineheight', 'removeformat', '|', 'image', 'multiimage',     '|' ,'table', 'hr', 'emoticons', 'baidumap', 'pagebreak',    'anchor', 'link', 'unlink', '|', 'about','audio'  ]});為了便于閱讀,我把audio按鈕放在最后,在 "幫助" 標簽的后面。
為了讓按鈕能夠顯示,我們還需要指定一下css樣式:
<style>  .ke-icon-audio {    background-position: 0px -528px;    width: 16px;    height: 16px;  }</style>這里我圖方便,直接用了自帶的音視頻按鈕的圖標,自定義圖標請手動指定 background 樣式屬性。
最后,創建腳本
kindeditor/plugins/audio/audio.js
audio目錄手動建立。
我們把
plugins/media/media.js
中的代碼復制到audio.js里,然后著手修改。
修改media插件
主要是去掉一些無用的屬性,如 寬、高、自動播放等,并修改插入代碼的部分,手動構建 "audio" 標簽的html代碼。
/** * Created by admin on 15-5-6. */KindEditor.plugin('audio', function(K) {  var self = this, name = 'audio', lang = self.lang(name + '.'),    allowMediaUpload = K.undef(self.allowMediaUpload, true),    allowFileManager = K.undef(self.allowFileManager, false),    formatUploadUrl = K.undef(self.formatUploadUrl, true),    uploadJson = K.undef(self.uploadJson, self.basePath + 'php/upload_json.php');  self.plugin.media = {    edit : function() {      var html = [        '<div style="padding:20px;">',        //url        '<div class="ke-dialog-row">',        '<label for="keUrl" style="width:60px;">MP3 URL</label>',        '<input class="ke-input-text" type="text" id="keUrl" name="url" value="" style="width:160px;" />  ',        '<input type="button" class="ke-upload-button" value="上傳" />  ',        '</div>',        '</div>'      ].join('');      var dialog = self.createDialog({          name : name,          width : 450,          height : 230,          title : self.lang(name),          body : html,          yesBtn : {            name : self.lang('yes'),            click : function(e) {              var url = K.trim(urlBox.val()),                width = widthBox.val(),                height = heightBox.val();              if (url == 'http://' || K.invalidUrl(url)) {                alert(self.lang('invalidUrl'));                urlBox[0].focus();                return;              }              if (!/^/d*$/.test(width)) {                alert(self.lang('invalidWidth'));                widthBox[0].focus();                return;              }              if (!/^/d*$/.test(height)) {                alert(self.lang('invalidHeight'));                heightBox[0].focus();                return;              }              var html = '<p><audio src="'+url+'" controls="controls"></audio><br/></p>';              self.insertHtml(html).hideDialog().focus();            }          }        }),        div = dialog.div,        urlBox = K('[name="url"]', div),        viewServerBtn = K('[name="viewServer"]', div),        widthBox = K('[name="width"]', div),        heightBox = K('[name="height"]', div),        autostartBox = K('[name="autostart"]', div);      urlBox.val('http://');      if (allowMediaUpload) {        var uploadbutton = K.uploadbutton({          button : K('.ke-upload-button', div)[0],          fieldName : 'imgFile',          url : K.addParam(uploadJson, 'dir=audio'),          afterUpload : function(data) {            dialog.hideLoading();            if (data.error === 0) {              var url = data.url;              if (formatUploadUrl) {                url = K.formatUrl(url, 'absolute');              }              urlBox.val(url);              if (self.afterUpload) {                self.afterUpload.call(self, url);              }              alert(self.lang('uploadSuccess'));            } else {              alert(data.message);            }          },          afterError : function(html) {            dialog.hideLoading();            self.errorDialog(html);          }        });        uploadbutton.fileBox.change(function(e) {          dialog.showLoading(self.lang('uploadLoading'));          uploadbutton.submit();        });      } else {        K('.ke-upload-button', div).hide();      }      if (allowFileManager) {        viewServerBtn.click(function(e) {          self.loadPlugin('filemanager', function() {            self.plugin.filemanagerDialog({              viewType : 'LIST',              dirName : 'media',              clickFn : function(url, title) {                if (self.dialogs.length > 1) {                  K('[name="url"]', div).val(url);                  self.hideDialog();                }              }            });          });        });      } else {        viewServerBtn.hide();      }      var img = self.plugin.getSelectedMedia();      if (img) {        var attrs = K.mediaAttrs(img.attr('data-ke-tag'));        urlBox.val(attrs.src);        widthBox.val(K.removeUnit(img.css('width')) || attrs.width || 0);        heightBox.val(K.removeUnit(img.css('height')) || attrs.height || 0);        autostartBox[0].checked = (attrs.autostart === 'true');      }      urlBox[0].focus();      urlBox[0].select();    },    'delete' : function() {      self.plugin.getSelectedMedia().remove();    }  };  self.clickToolbar(name, self.plugin.media.edit);});至此,整個插件基本結束。
需要注意的是,上傳文件用的是通用的配置uploadJson參數,但會在上傳的時候自動添加一個get參數 "dir=audio" ,以便后臺識別:
url : K.addParam(uploadJson, 'dir=audio'),
新聞熱點
疑難解答