TinyMCE là một nền tảng độc lập dựa trên Javascript HTML WYSIWYG được phát hành bởi LGPL web. Nó cung cấp một trình soạn thảo văn bản HTML, được thiết kế để đơn giản hóa việc tạo ra nội dung web. Nó giúp chúng ta dễ dàng chỉnh sửa định dạng những đoạn văn bản như blog, description... Hơn nữa nó cũng hoàn toàn miễn phí @hoangken trên viblo.asia

Trong bài viết này mình sẽ hướng dẫn các bạn xây dựng một trình soạn thảo tinymce có tích hợp upload image lên server, việc này giúp các admin tiết kiệm rất nhiều thời gian thay vì sử dụng công cụ upload khác phải mở qua lại. Khi hoàn tất các bạn có thể thêm ảnh ngay trên trình soạn thảo TinyMCE luôn. Lết gô ...

Để sử dụng TinyMCE điều đầu tiên các bạn phải vào trang chủ đăng kí một tài khoản để include js của tiny trực tiếp vào web hoặc tải về local thông qua bower

bower install tinymce

Khởi tạo trình soạn thảo với chức năng upload ảnh có sẵn của tinymce

tinymce.init({
  selector: 'textarea',  // change this value according to your html
  images_upload_url: 'imageUpload.php',
  automatic_uploads: true
});

Code này sử dụng chức năng upload có sẵn của Tiny chưa bao gồm các hình thức kiểm tra lỗi khi phát sinh phía xử lý của php. Nếu bạn muốn tự xử lý quá trình upload và kiểm lỗi thì hãy xử dụng code này

tinymce.init({
  selector: 'textarea',  // change this value according to your HTML
  images_upload_handler: function (blobInfo, success, failure) {
    var xhr, formData;

    xhr = new XMLHttpRequest();
    xhr.withCredentials = false;
    xhr.open('POST', 'imageUpload.php');

    xhr.onload = function() {
      var json;

      if (xhr.status != 200) {
        failure('HTTP Error: ' + xhr.status);
        return;
      }

      json = JSON.parse(xhr.responseText);

      if (!json || typeof json.location != 'string') {
        failure('Invalid JSON: ' + xhr.responseText);
        return;
      }

      success(json.location);
    };

    formData = new FormData();
    formData.append('file', blobInfo.blob(), blobInfo.filename());

    xhr.send(formData);
  }
});

Tạo một file imageUpload.php chứa code xử lý và lưu trữ hình ảnh.


Trong file này phần server sẽ xử lý hình ảnh upload lên và trả về kết quả ở dạng JSON với key là location và value là đường dẫn đến file hình vừa upload.

Đây là code cơ bản được mình lấy từ TinyMCE Docs để làm ví dụ, để bảo mật hơn thì các bạn có thể thêm các lệnh ràng buộc hoặc kiểm tra để tránh tình trạng "ai up cũng được" gây nặng server của mình.

Ngoài ra, để tránh trùng lập các hình ảnh sau này, các bạn có thể thêm uniqid() vào trước tên của ảnh hoặc thay đổi luôn tên hình ảnh. Ví dụ như:

$temp['name'] = uniqid().'-'.$temp['name'];

Sau khi hoàn tất bạn đã có một trình soạn thảo với chức năng upload ảnh như của mình trên rồi. Chúc bạn thành công!