라라벨 에디터 updated_at: 2024-12-14 01:51

라라벨 에디터 (Wizwig Editor for Laravel)

라라벨에디터는 naver smart editor를 라라벨에 적용한 package입니다.

github

Installation

composer require wangta69/laravel-editor
php artisan pondol:install-editor

Configure

config/pondol-editor 에서 default-template 값을 변경하시면 원하시는 에디터로 적용됩니다.

Templates

  • richtext : RichText Editor (default)
  • tinymce : TinyMce
  • smart-editor : Naver Smart Editor
  • froala: Froala Editor

Tests

세팅이 완료된 후 서비스가능한 Templates 을 입력하시면 세팅을 확인 하실 수 있습니다.

https://yourdomain/editor/[templates]
https://yourdomain/editor/smart-editor // Naver Smart Editor 적용시

Ex

before

<form>
  <textarea name="comment"></textarea>
  <button type="submit">Save</button>
</form>

after

<form>
  @include ('editor::default', ['name'=>'comment', 'id'=>'comment-id', 'value'=>'', 'attr'=>['class'=>'']])
  <button type="submit">Save</button>
</form>
  • name : textarea name과 동일하게 설정 (필수값)
  • id : 아이디 (필수값)
  • value : 기본값이나 수정시 기존 값등을 입력
  • attr : 다양한 attr 입력가능(class, style, 사용자 정의 attr......)

다른 Templates 사용하기

configure에 설정된 template외에 다른 것을 사용하고 싶다면 아래처럼 처리하시면 됩니다.

  • TinyMce 적용예
<form>
  @include ('editor::tinymce.editor', ['name'=>'comment', 'id'=>'comment-id', 'value'=>'', 'attr'=>['class'=>'']])
  <button type="submit">Save</button>
</form>

submit버튼을 클릭할 경우 자동으로 처리되게 되어 있으므로 상기 태그들은 form으로 감싸줘야 합니다.

multi (여러개를 처리)

여러개의 editor를 동시에 처리할 경우 @include 대신에 components를 사용합니다.
name, id, value, attr 는 @include를 사용할 때와 동일하나 type 설정이 중요합니다.

  • template : (optional) 만약 특정 template을 사용하려면 Templates 중 하나(richtext, tinymce..)를 선택하시면 됩니다.

  • start : 여러개중 처음 editor 시

  • end : 여러개중 마지막 editor 시

  • 중간에 있는 것은 아무것도 넣지 않으면 됩니다.

  • single: 하나의 editor 만 적용할 경우 ( @include ('editor::smart-editor.editor') 와 동일)

  • onsubmit: true 시 submit와 동시에 처리, 함수실행후처리할 경우 아래 "전송 방식" 참조

수정전 소스

<form>
  <textarea name="desc1"></textarea>
  <textarea name="desc2"></textarea>
  <button type="button">전송</button>
</form>
<form>
  <x-editor-components 
  name="desc1" 
  id="desc1" 
  :value=$desc1 
  :attr="['class'=>'form-control']"
  type="start" />

   <x-editor-components 
    name="desc2" 
    id="desc2" 
    :value=$desc2 
    :attr="['class'=>'form-control']"
    type="end"/>
  <button type="button">전송</button>
</form>
Naver Smart Editor

네이버 스마트 에디터를 사용하시려면 submit 시 아래 두가지 방법을 제공합니다.

updateContentsField

전송전 editor의 값을 실제 textarea에 넣어 주기만 합니다.

<form name="submitform" onsubmit="return formcheck()">
  ..........
  <button type="submit">전송</button>
</form>

<script>
function formcheck() {
  updateContentsField(); // editor값을 실제 textarea넣음
  return true;
}
</script>
submitContentsField

editor의 값을 실제 textarea에 넣고 submit 기능도 함께 제공합니다.

<form name="submitform">
..........
  <button type="button" onclick="formcheck()">전송</button>
</form>

<script>
function formcheck() {
  submitContentsField($(form[name=submitform])); // editor값을 실제 textarea넣은 후 입력된 폼값을 submit 시킴
}
</script>

Tip

실제 저장경로는 storage/tmp/editor/세션/파일 에 저장이 됩니다.
따라서 현재 파일들을 다른 곳에 저장 하고 싶은 경우 텍스트를 저장할때 아래와 같은 방식으로 처리하시면 이후 파일을 관리하시는 데 도움이 될 것입니다.

private function contents_update($text) {
  $sourceDir = storage_path() .'/app/public/tmp/editor/'. session()->getId(); // 현재 editor 저장 경로 
  $destinationDir = storage_path() .'/app/public/items/editor'; // 원하는 저장 경로 

  // $text의 내용에 포함된 img src 경로를 '원하는 저장 경로' 로 변경
  $new_text = str_replace('/storage/tmp/editor/'.session()->getId(), '/storage/items/editor', $text);

  // 현재 이미지 저장 경로를 원하는 저장경로로 copy
  $success = File::copyDirectory($sourceDir, $destinationDir);
  // 현재 이미지들을 삭제
  Storage::deleteDirectory('public/tmp/editor/'. session()->getId());

  return $new_text;
}

Facades

Pondol\Editor\Facades\Editor

extractBase64Image

입력된 텍스트($str) 에 포함된 base64 이미지를 $destination_dir 로 이동시키고 텍스트 중 bbase64 이미지를 $destination_public_url 경로로 치환하여 리턴한다.

Editor::extractBase64Image($str, $destination_dir, $destination_public_url);