테스트 사이트 - 개발 중인 베타 버전입니다

그누보드4의 cheditor5 플래시를 ajax로

· 4년 전 · 12304 · 77

여러 버전이 있고, 또 뭔가 좀 안맞는 구석도 있고 해서 다시 정리해서 올립니다.
복붙하지 마시고 본인의 에디터를 살펴보고 적당히 수정해서 넣으세요.

 

1) 플래시 버튼을 막는다.

 

이 에디터는 플래시 버튼을 자동으로 생성합니다.(html에 박혀있는게 아님)
그래서 자바스크립트를 수정해서 플래시 버튼 생성과 제거 부분을 모두 차단해야합니다.

 

이것부터 해결하자면
/cheditor5/popup/image.html 위쪽에 플래시용 자바스크립트 주석처리

[code]

<!--
둘중 하나가 있을테니 주석처리해주세요.
<script src="js/swfobject.js" type="text/javascript"></script>
<script src="js/image_upload_flash.js" type="text/javascript"></script>
-->

[/code]

 

/cheditor5/popup/js/image.js에서 플래시 버튼 생성부분 주석처리
function initEvent <--를 검색하시면 나오는데 거기 안의 내용을 모두 주석처리

(function initEvent() { }는 남겨야함. 함수까지 이름까지 주석처리 하지 마세요.)
swfobject.removeSWF(AppID); <-- 검색해서 나오면 모두(두어개 있습니다.) 주석처리

없으면 그냥 패스

 

그리고 jquery를 쓸 것이므로 jquery로 하나 넣어주겠습니다.

뭐 이런식(버전마다 다름)

[code]

<script src="//code.jquery.com/jquery-1.12.4.min.js" type="text/javascript"></script>
<script src="js/dialog.js" type="text/javascript"></script>
<script src="js/image.js" type="text/javascript"></script>
<!--
<script src="js/swfobject.js" type="text/javascript"></script>
<script src="js/image_upload_flash.js" type="text/javascript"></script>
-->

[/code]


2) 이제 플래시 버튼 대용으로 이미지 버튼을 활용한다.

/cheditor5/popup/image.html 에서
<div id="oFlashButton"></div> 나 <td id="oFlash"></td> 를 찾는다.(위에 있음)

[code]

<td id="oFlash">
    <input type="file" id="nfile" name="nfile" multiple="multiple" accept=".gif,.jpg,.jpeg,.png" style="display:none" onchange="noFlashUpload()"/>
    <img src="../icons/imageUpload/add_image_button.gif" style="margin-left:3px;vertical-align:middle;cursor:pointer" onclick="noFlashUploadOpen()" alt="" />
</td>

<!--
혹은
div로 시작할때는 style="display:inline-block" 이걸 추가해줘야함

버전마다 사진추가 이미지가 다르므로 맞춰서 적용 add_image_button.gif 혹은 add.gif
-->
<div id="oFlashButton" style="display:inline-block">
    <input type="file" id="nfile" name="nfile" multiple="multiple" accept=".gif,.jpg,.jpeg,.png" style="display:none" onchange="noFlashUpload()"/>
    <img src="../icons/imageUpload/add.gif" style="margin-left:3px;vertical-align:middle;cursor:pointer" onclick="noFlashUploadOpen()" alt="" />
</div>

[/code]

 

3) 이제 새 업로드 버튼이 동작할 자바스크립트를 추가해줌


/cheditor5/popup/js/image.js 맨 밑에다 붙여줌

 

주의사항! image.js에서 function uploadComplete 검색해서 찾아보면
function uploadComplete(image) 이면 결과값이 json이라는 의미(오브젝트)
function uploadComplete(fileData) 이면 결과값이 문자열이라는 의미(텍스트)

따라서 아래 코드에서 $.ajax 부분에 dataType: "text", 을 
dataType: "json",
dataType: "text",
본인의 상황에 맞게 수정해줌.

 

[code]

function noFlashUploadOpen() {
    $("#nfile").click(); // 숨김 input file를 클릭하는 효과
}
function noFlashUpload() {
    var uplist = $("#nfile").get(0).files; // 숨김 input file에서 파일 배열을 가져옴
    if(uplist.length < 1) return; // 첨부없으면 끝 
    for(var i = 0; i < uplist.length; i++) {
        // 각 파일의 형식 제한
        if(uplist[i].type != "image/png" && uplist[i].type != "image/gif" && uplist[i].type != "image/jpg" && uplist[i].type != "image/jpeg") {
            fileFilterError(uplist[i].name);
            return;
        }
    }
    // 업로드 시작 알림(로더)
    startUpload(uplist.length); // image.js
    // 업로드 작업
    // cheditor5/imageUpload/upload.php 에서 1개씩만 업로드를 처리하므로 개별처리
    // 순차 처리를 위해서 ajax의 비동기를 끔 async: false
    // 업로드 진행율이 필요없으므로 xhr 은 제외
    for(var i = 0; i < uplist.length; i++) {
        var formData = new FormData();
        formData.append("file", uplist[i]);
        $.ajax( {
            url: UploadScript,
            type: "POST",
            contentType: false,
            processData: false,
            crossDomain: true,
            cache: false,
            async: false,
            dataType: "text", // 여기 본인 상황에 맞게
            data: formData,
            success: function(response, textStatus, xhr) {
                uploadComplete(response);
            },
            error: function(xhr, textStatus, error) {
                console.log(xhr.responseText);
            }
        });
    }
}

[/code]

 

4) 이제 /cheditor5/imageUpload/upload.php 에서 오는 반환 값을 정리해줌

[code]

// 이렇게 되어있으면 옛날 버전이니까 그대로 넘어가구요.

$rdata = sprintf( "{ fileUrl: '%s/%s', filePath: '%s/%s', origName: '%s', fileName: '%s', fileSize: '%d' }",
    SAVE_URL,
    $random_name,
    SAVE_DIR,
    $random_name,
    $filename,
    $random_name,
    $filesize );

// 이렇게 되어있으면 좀 고쳐야합니다.
$rdata = sprintf('{"fileUrl": "%s/%s", "filePath": "%s", "fileName": "%s", "fileSize": "%d" }',
    SAVE_URL,
    $filename,
    $savefile,
    $filename,
    $filesize );

// -----> 이렇게
$rdata = sprintf('{"fileUrl": "%s/%s", "filePath": "%s", "fileName": "%s", "fileSize": "%d", "origName": "%s", "width": "%d", "height": "%d" }',
    SAVE_URL,
    $filename,
    $savefile,
    $filename,
    $filesize,
    $filename, // 이부분에 $_FILES['file']['name'] 같은 걸 쓰거나, 뭔가 잘 다듬어서 넣어도 되지만 전 그냥 저장되는 이름을 써줬습니다. 대세에 큰 지장없어서리
    $imgsize[0],
    $imgsize[1]);

[/code]

 

 

5) 이미지 삭제하기

/cheditor5/popup/js/image.js 에서

function imageDelete --> 이걸 검색해서

이런 내용이 나오거든 아래와 같이 고쳐줍니다.
var chximage = document.getElementById(AppID);
chximage.ImageDelete(encodeURI(filePath));

 

[code]

function imageDelete(filePath) {
    //var chximage = document.getElementById(AppID); 주석처리하고
    //chximage.ImageDelete(encodeURI(filePath)); 주석처리하고
    $.ajax( {
        url: DeleteScript,
        type: "POST",
        contentType: false,
        processData: false,
        crossDomain: true,
        cache: false,
        async: false,
        dataType: "text",
        data: "filepath=" + encodeURI(filePath),
        success: function(response, textStatus, xhr) {
        },
        error: function(xhr, textStatus, error) {
            console.log(xhr.responseText);
        }
    });
}

[/code]

 

일단 여기까지. 

 

6) 마지막으로 iframe 내에 불러오는 것이라 캐시 갱신을 좀 해주셔야합니다.

 

/cheditor5/popup/image.html 을 열어서 
dialog.js 를 dialog.js?v=아무글자
image.js 를 image.js?v=아무글자

 

/cheditor5/cheditor.js 를 열어서
popupWinLoad : function 을 검색해서

이런식으로 수정 popupAttr 인지 popupInfo 인지 구분해서

[code]
// iframe.setAttribute('src', self.config.popupPath + popupAttr['tmpl']);
iframe.setAttribute('src', self.config.popupPath + popupAttr['tmpl'] + "?v=아무글자");

또는

iframe.setAttribute('src', self.config.popupPath + popupInfo['tmpl'] + "?v=아무글자");

[/code]

 

7) 다 잘되는데 DB에 인서트시 이미지 태그가 사라져 버리는 경우. 아래 부분을 수정해보세요.

에디터가 들어가는 스킨, 예를 들어 /skin/board/basic/... 이런 식이라면
write.skin.php 의 아래 부분에 fwrite_submit() 함수가 있을거에요.

아래 처럼 echo cheditor3('wr_content'); 가 내용 체크 보다 먼저 나오면

[code]
function fwrite_submit(f) 
{
    // 생략...
    <?
    if ($is_dhtml_editor) echo cheditor3('wr_content');
    ?>

    if (document.getElementById('tx_wr_content')) {
        if (!ed_wr_content.outputBodyText()) { 
            alert('내용을 입력하십시오.'); 
            ed_wr_content.returnFalse();
            return false;
        }
    }
    // 생략...
}
[/code]

아래 처럼 순서를 한번 바꿔보세요.

[code]
function fwrite_submit(f) 
{
    // 생략...
    if (document.getElementById('tx_wr_content')) {
        if (!ed_wr_content.outputBodyText()) { 
            alert('내용을 입력하십시오.'); 
            ed_wr_content.returnFalse();
            return false;
        }
    }

    <?
    if ($is_dhtml_editor) echo cheditor3('wr_content');
    ?>
    // 생략...
}
[/code]

 

 

 

 

댓글 작성

댓글을 작성하시려면 로그인이 필요합니다.

로그인하기

댓글 77개

4년 전
안녕하세요~!왕초보입니다.
알려주신 방법으로 익스프로러는 잘됩니다.
근데 저도 크롬이 조금 문제가있습니다.ㅠ
크롬에서 에디터까지 이미지 첨부는 잘되요.(서버에도 이미지 업로드까진 잘됐습니다.)
근데 최종 저장 누르고 실제 내용에 들어가보면 조회가 되지않습니다.
에디터에 올라간 editor내용이 db처리하는 인서트 페이지까지 전달 되지가 않습니다.
어떤쪽을 봐야할까요?ㅠㅠ
감사합니다.
4년 전
@그리메떡 이미 수정하셨을지도 모르지만 본글 아래 부분에 조금 달아뒀어요. 이게 아니면 저도 방법이 없어서요. QnA에 도움을 요청하셔야 될 것 같아요.
확인눌렀다가 취소눌러야 사진이 들어가서 이상하다 싶어 댓글보며 천천히 수정한데를 살피다가 저도 swfobject.removeSWF(AppID); 이 부분 하나를 놓쳤더라고요! 지금 너어어어무 잘되요 고맙습니다!!!!!!!! 저같이 완전 무식자도 그냥 따라하니 딱되니 실력자 된기분이에요!!!!
수정 전 파일, 수정 후 파일 함께 압축해서 올려주시면 초보자가 파일 비교 프로그램 같은 거 이용해 따라 수정하기 편할 것 같습니다.
4년 전
@sinbi 이게 버전이 여러개고, 또 제가 저리 수정한 내용을 완벽하게 작동할지 보장하기가 어려워서, 파일 첨부는 어려울 것 같습니다.

이게 일종의 임시조치로 사용하시라고 올린거라서요.(지금은 그 내용이 빠졌네요.)

여건이 되시는 분들은 사이트 개편이나 에디터 변경을 기대하는데 각자의 사정이 있어서 어찌될련지는 모르겠네요.

다음에 올릴 기회가 있으면 참고하도록 하겠습니다. 좋은 의견 감사드립니다.
4년 전
좋은 정보 감사합니다.
혹시 탑빌더 (그누보드4) 사용하시는 분들이 똑같은 문제를 안고 계신듯한데.. 최근
Jquery 이슈도 문제가 되는듯 합니다. 예를 들어 저같은 경우 $ 를 인식을 못해 개발자 도구 에서 에러가 무수히 나오는 현상과 함께 홈페이지 관리자모드에서 일부기능이 안되는 현상이 있어서 3일간 에러를 하나하나 연구해본 결과,, 기존에 잘 사용되었던 기능들이 안되는 현상이 있어서 공유하고자 합니다..
F12 눌러서 에러가 무수히 많다고 하면 우선 확인하셔야 할 것이 제이쿼리 선언에
<script src="http://code.jquery.com/jquery-1.7.2.min.js"></script> 되어야 할 것이
<script src="//code.jquery.com/jquery-1.7.2.min.js"></script> 이렇게 되어 있거나

$(".li-link").on("click", function() 이렇게 $로 잘 되던 것이 갑자기 .on 을 읽을 수 없다던가 하는 오류를 표시하게 됩니다..

이때 일일히 $ 표시를 jquery 로 바꿔 주시면 노가다를 하지 마시고
<script type="text/javascript"> 여기 표시 아래 (function($) { 이거 넣으시고 </script>
위에다 })(jQuery); 이렇게 넣으시면 $ -> jQuery 치환이 되니 문제해결을 했습니다.
아울러 소스분석 결과 js 또는 js2 폴더 네에 common.js 파일을 열어보면 940 라인쯤에
flash_ex_content_set(); 이놈이 있을꺼에요.. 막으시고 거기 아래 보시면
function flash_ex_content_set() 요것이 있을 텐데 해당펑션을 모두 막으시기 바랍니다..
개발자 도구에서 계속 오류나 경고표시를 하게 됩니다.
암튼 초보자가 겪는 어려움에 조금이라도 도움이 되고자.. 제 경험을 올립니다.
수고하세요~
4년 전
감사합니다. 저는 완전 초보인데,
두번을 찬찬히 읽어보고 해보니 바로 작동합니다.

그런데, 혹시 Popup창에서 위에 분처럼... 작은 이미지가 안 보이는데...(다른 버튼은 정상작동, 등록도 되고)
작은 이미지를 보게 할 수 있는 방법이 있을까요?
4년 전
@여수에서 윗분의 작은 이미지가 안보이는 현상과 좀 다르긴 한데, 이미지 첨부 팝업창에서 작은 이미지가 안보이는 이유는 소스를 봐야 합니다. wingsoso@naver.com로 제가 소스를 좀 볼 수 있게 해주시거나, 게시판을 볼 수 있도록 해주시면 도와드릴 수 있을 것 같습니다.
4년 전
@야식금지 친절한 답변 너무 감사합니다. 잘 되고있습니다.

게시글 목록

번호 제목
24318
24317
24315
24309
24294
24293
24277
24262
24260
24253
24251
24236
24233
24228
24226
24221
24214
24203
24201
24199
24196
24195
24194
24192
24191
24187
24185
24183
24172
24168