게시판 텍스트 편집기 (TinyMCE)

Bulletin board content editor (TinyMCE)

게시글에서 저희가 글을 쓸 때 밋밋하게 글자만 작성하지 않고, 막 '가운데 정렬, 하이퍼링크, 글자색 지정, 글꼴 지정, 글자 크기 지정, 테이블(표) 생성, ...' 등등 다양한 기능을 사용해가며 글을 쓰는경우 많고, 그런 경험 매번 해보셨을겁니다.

▲ 네이버 게시글에 있는 텍스트 편집기 (네이버에서는 저걸 '스마트 에디터' 라고 부릅니다.)

이 기능도 게시판 기능에 있어 중요할 거라는 것을 제가전 글에언급하기도 했는데요, 이번 시간에는 Ruby에서 게시글 에디터 편집기를 도입하는법을 알아보겠습니다.▲ 어느 흔한 초보개발자의 내용 입력란에텍스트 편집기가 없는 상태.

글을 작성하기 전에 앞서, 저는 여러분들의 게시판 글 작성 상태가 위처럼 내용 입력란에 편집기가 없는 상태라는걸 가정하고 쓰겠습니다.


게시판 텍스트 편집기

  • Gemfile파일로 가셔서 맨 아랫줄에 다음을 입력합니다.

gem 'tinymce-rails'

그리고 터미널에 아래 명령어를 입력합니다.

bundle install

그리고 터미널에 아래 명령어를 입력합니다.

bundle install

  • 서버를 껏다 킵니다.

  • /config 디렉토리(폴더) 내에 tinymce.yml 파일을 만듭니다.

▲ config 폴더에 우측마우스 클릭 후, 'New File'을 클릭해서 'tinymce.yml'을 생성시킴.

그리고 tinymce.yml에 아래 내용을 작성합니다.

toolbar: undo redo | forecolor | bold italic | alignleft aligncenter alignright | fontselect | code | link | uploadimage | table |
plugins:
  - link
  - uploadimage
  - textcolor
  - code
  - table

참고

tinymce.yml 에 작성되는 내용은 에디터 편집기에 들어갈 기능을 설정하는겁니다.

참고 2

그 외 기능들 (아래 목록 외에도 더 있으며, 더 많은 기능은 여기를 참고해주세요.)

  • /app/asset/javascripts 디렉토리(폴더) 내에 있는 applications.js 파일을 열람하셔서 다음을 작성합니다.
//= require tinymce
//= require tinymce-jquery
  • 여기서부터 제 CRUD 설정 기준으로 작성하겠습니다.

제 기준으로 작성된 CRUD 중, 게시판글 작성을 담당하는new.html.erb로 가서내용 작성란을 다음과 같이 수정합니다.

(변경 전)

<div class="form-group">
    <label for="exampleTextarea">내용</label>
    <textarea name="my_content" class="form-control" rows="3"></textarea>
</div>

(변경 후)

<div class="form-group">
    <%= tinymce %>
    <label for="exampleTextarea">내용</label>
    <textarea name="my_content" class="form-control tinymce" rows="3"></textarea>
</div>

마찬가지로, 글 수정을 담당하는 edit.html.erb로 가서 위와같이 동일하게 바꿔주면 되나, <textarea></textarea> 사이에 이 전에 작성된 내용을 불러오는 것을 담당하는 변수 작성하는것을 잊지 마세요!

  • 이 전 과정까지 다 작성하고, 에디터 편집기를 통해 글꼴설정, 글자크기 설정 등을 막 하고, 글을 작성하면.....▲ 텍스트 편집기에서 글자크기, 가운데정렬을 해줬음에도 작성된 게시글을 보면 적용이 정상적으로 안되어있음.

HTML 태그가 적용이 되어있지 않습니다 -.-...

  • 작성된 내용을 보여줄 때,HTML 태그 적용을 위해게시글을 보여주는 것을 담당하는show.html.erb로 가서 다음과 같이 수정합니다.

(변경 전)

#show.html.erb에서 '게시물 내용'을 보여주는 변수
<%= @findpost.content %>

(변경 후)

#show.html.erb에서 '게시물 내용'을 보여주는 변수 뒤에 .html_safe를 작성.
<%= @findpost.content.html_safe %>

위 작업을 마치면 이제 정상적으로 HTML태그가 적용된 채로, 게시글이 보여질 겁니다!▲ 이제 태그가 정상적으로 적용되어서 보이는 게시물

이슈 : C9에서는 Tinymce가 잘 되는데, 헤로쿠에서 안보인다면?

  • 명령어 입력창(터미널)에 다음 명령어를 입력합니다.

rake assets:precompile

그러면 /public 폴더에 assets 디렉토리(폴더)가 새로 생긴게 보일겁니다.

  • /app/views/layouts/application.html.erb에서 <%= yield %>바로 윗 줄에 다음 코드를 입력해보세요.

<%= tinymce_assets %>

됐습니다!

참고로 이 방법을 적용하면 C9 환경에서 '글쓰기(new)' 에서 글 작성 하실 때 바로 TinyMCE가 안나타날 수 있습니다. TinyMCE가 안나타날 경우 'F5 새로고침'을 한번 하시면 나올겁니다.

참고

1) Yotube

2) Github : https://github.com/spohlenz/tinymce-rails

3) TinyMCE : https://www.tinymce.com/

4) Tinymce Heroku에서 안되는 문제 : https://github.com/spohlenz/tinymce-rails/issues/65

부록 : TinyMCE + AWS S3를 이용한 이미지 업로드 [클릭]

Git자료실 업로드

해당 내용에 대해 이해가 안간다는 글이 종종 보이더라고요.. 'TinyMCE+이미지 업로드'를 활용해서 제작했던 사이트를

이해도를 돕고자 아예 Git자료실에 올렸습니다. 참고 바랍니다.

Git 자료실 : https://github.com/kbs4674/example_final

예제사이트 : https://kcm-lion.herokuapp.com

Git 저장실 혹은 해당 자료 안에 있는 Readme를 꼭 참고해주세요.

results matching ""

    No results matching ""