2013-01-22 40 views
10

Vì vậy, tôi đã tạo chủ đề tùy chỉnh cho TinyMCE bằng cách sử dụng phương pháp nút trên trang web của họ. Hầu hết các nút có vẻ đang hoạt động, nhưng các nút bấm, số, liên kết và bỏ liên kết không làm gì cả. Ngay cả khi chuyển sang chế độ xem HTML, html thậm chí không được thêm (ví dụ: <ul><li></li></ul>). Tôi đã thử thêm plugin cho danh sách, advlink, vv nhưng không thay đổi. Có vẻ như không tìm thấy câu trả lời trực tuyến nào cho câu trả lời này.Chủ đề tùy chỉnh TinyMCE - liên kết không xác định số liên kết không hoạt động

Đây là mã TinyMCE của tôi:

$('textarea.htmlify').tinymce({ 
    mode: 'textareas', 
    script_url : host + '/js/admin/tinymce/tiny_mce.js', 
    content_css: host + '/css/admin/tiny_mce.css', 
    language: false, 

    setup: function(editor) { 
     $('.showPreview', '#' + editor.id + '_preview').click(function(event) { 
      event.preventDefault(); 
      tinyMCE.execCommand('mceAddControl', false, editor.id); 
      $('#'+editor.id + '_preview').css('display', 'none'); 
     }); 

     editor.addCommand('showHTML', function(ui, v){ 
      tinyMCE.execCommand('mceRemoveControl', false, editor.id); 
      $('#'+editor.id + '_preview').css('display', 'block'); 
     }); 
    }, 

    theme: function(editor, target) { 
     var editorContainer = $(target).after(
      '<div>' + 
       '<div class="mce-toolbar clearfix">' + 
        '<button class="btn-mce-bold" data-mce-command="bold">Bold</button>' + 
        '<button class="btn-mce-italic" data-mce-command="italic">Italic</button>' + 
        '<button class="btn-mce-underline" data-mce-command="underline">Underline</button>' + 
        '<button class="btn-mce-strikethrough" data-mce-command="strikethrough">Strike Through</button>' + 
        '<button class="btn-mce-justifyleft" data-mce-command="justifyleft">Justify Left</button>' + 
        '<button class="btn-mce-justifycenter" data-mce-command="justifycenter">Justify Center</button>' + 
        '<button class="btn-mce-justifyright" data-mce-command="justifyright">Justify Right</button>' + 
        '<button class="btn-mce-justifyfull" data-mce-command="justifyfull">Justify Full</button>' + 
        '<button class="btn-mce-bullist" data-mce-command="bullist">Bullet List</button>' + 
        '<button class="btn-mce-numlist" data-mce-command="numlist">Number List</button>' + 
        '<button class="btn-mce-undo" data-mce-command="undo">Undo</button>' + 
        '<button class="btn-mce-redo" data-mce-command="redo">Redo</button>' + 
        '<button class="btn-mce-link" data-mce-command="link">Link</button>' + 
        '<button class="btn-mce-unlink" data-mce-command="unlink">Unlink</button>' + 
        '<button class="btn-mce-code" data-mce-command="showHTML">HTML</button>' + 
       '</div>' + 
       '<div class="htmlify"></div>' + 
      '</div>' 
     ).next(); 

     $('.mce-toolbar').css('width', $(target).css('offsetWidth')); 

     // Bind events for each button 
     $('button', editorContainer).click(function(event) { 
      event.preventDefault(); 
      editor.execCommand(
       $(this).attr('data-mce-command'), 
       false, 
       $(this).attr('data-mce-value') 
      ); 
     }); 

     // setup tabbing 
     $tabindex = parseInt($('#' + editor.id).attr('tabindex')); 
     if ($tabindex > 1) { 
      $('[tabindex=' + ($tabindex-1) + ']').keydown(function(event) { 
       var $keyCode = event.keyCode || event.which; 
       if ($keyCode == 9) { 
        event.preventDefault(); 
        editor.execCommand('mceFocus', false, editor.id); 
       } 
      }); 
     } else { 
      editor.execCommand('mceFocus', false, editor.id); 
     } 

     editor.onKeyDown.add(function(ed, event) { 
      var $tabindex = parseInt($('#' + ed.id).attr('tabindex')); 
      var $keyCode = event.keyCode || event.which; 
      if ($keyCode == 9) { 
       $tabindex++; 
       while(($("[tabindex='" + $tabindex + "']").length == 0 || $("[tabindex='" + $tabindex + "']:not([readonly])").length == 0) && $tabindex != 150){ 
        $tabindex++; 
       } 
       if ($tabindex != 150) 
        $('[tabindex='+$tabindex+']').focus(); 
      } 
     }); 

     // Register state change listeners 
     editor.onInit.add(function(ed, event) { 
      $('button', editorContainer).each(function(i, button) { 
       editor.formatter.formatChanged($(button).data('mce-command'), function(state) { 
        $(button).toggleClass('btn-mce-on', state); 
       }); 
      }); 

      $('#'+ed.id+'_ifr').css('height', '100%'); 
     }); 

     // Return editor and iframe containers 
     return { 
      editorContainer: editorContainer[0], 
      iframeContainer: editorContainer.children().eq(-1), 

      // Calculate iframe height: target height - toolbar height 
      iframeHeight: $(target).height() - editorContainer.first().outerHeight() 
     }; 
    }  
}); 
+0

bạn có thể tạo một jsfiddle? –

+2

Tôi chưa tìm thấy gì mới hơn…: http://jennyfong.co.uk/2010/07/07/remotely-call-tinymce-toolbar-commands-list-of-executable-instance-commands/ liên kết, hủy liên kết v.v. không có trong danh sách. Sử dụng ckeditor để thay thế - từ trải nghiệm cá nhân. – thgie

+0

Bạn đang sử dụng phiên bản tinymce nào? 3.x hoặc 4.x? –

Trả lời

1

Sau khi xem xét các mã TinyMCE, tôi đã xác định được một giải pháp khả thi. Đối với danh sách thay vì sử dụng data-mce-command="bullist"data-mce-command="numlist", chúng tôi có thể sử dụng data-mce-command="InsertUnorderedList"data-mce-command="InsertOrderedList".

Đối với các liên kết, tôi đã sử dụng data-mce-command="mceInsertLink" và chúng tôi cần một cách để cung cấp URL/HREF cho execCommand. Vì vậy, với tư cách là bằng chứng về khái niệm, tôi đã sửa đổi chút mã chỉ định tất cả các sự kiện

$('button', editorContainer).click(function(event) { 
     event.preventDefault(); 
     var value=$(this).attr('data-mce-value') 
     if($(this).attr('data-mce-command')=="mceInsertLink"){ 
      value=prompt("href") //really hacky way of getting data from user 
      //maybe do a modal popup with the callback that calls the execCommand below 
     } 
     editor.execCommand(
      $(this).attr('data-mce-command'), 
      false, 
      value 
     ); 
    }); 

Điều này sẽ hoạt động nếu có văn bản đã được chọn. Tôi đã không kiểm tra này, nhưng có lẽ, có thể có một tấm séc nếu có bất cứ điều gì được lựa chọn và yêu cầu cho cả các URL và các văn bản liên kết, và làm một .execCommand("mceInsertRawHTML")

Example Fiddle

+0

Điều này có vẻ khá tốt. Câu hỏi này là siêu cũ và tôi đã kết thúc không làm phiền với các tính năng nhưng tôi sẽ đánh dấu này là câu trả lời. Cảm ơn! – codephobia

+0

Haha. đã không nhận thấy trong năm. Chỉ cần nhìn vào các tab chưa được trả lời cho những điều cần trả lời. Xin lỗi, chào mừng và cảm ơn. – mfirdaus

+0

cần thiết để sửa đổi các nút mặc định, tìm thấy chuỗi execCommand, tại đây. cám ơn. – Bosworth99

2

Hãy thử thêm các plugin:

   plugins: [ 
         "link lists", 
       ], 
Các vấn đề liên quan