1.  자료실
  2.  팁
  3.  나의 XE
  4.  Html
  5.  배경이미지

XE 인기게시물

MH 슬라이딩 배너 0....
MH 위젯스타일
prettyphoto - 본문내...
SCM 플레이어 사용법
XE 1.4.4.2버전 이후에...
네비게이션 위젯
IE 버젼별로 css 따로...
문서보기 유저 지정
문하우스 게시판스킨 V...
내용글 출력시 주소창에...
XE Data
xpressengine.com에서 제가 필요해 가져온 XE자료들입니다.
글 수 147
2009.09
24
제작자 개돌
출처
적용여부 적용
적용페이지

tinmce.jpg  

Moxiecode Systems(http://tinyMCE.moxiecode.com) 의 위지윅 에디터인 tinyMCE 를 XE스킨으로 제작하였습니다.

/* 운좋게도 제가 어제(9월 23일) 작업하려고 다운받았는데 하루 전날인 9월 22일에 3.2.7버젼이 새로 나왔네요.. 당분간은 에디터 업데이트도 필요 없을 것 같네요 */


우선 회사 업무 상

1. 테이블을 자유롭게 수정 가능할 것

2. 엑셀에서 붙여넣기 한 데이터가 정상적으로 출력될 것

3. 가능한한 자유롭게 편집 가능한 기능을 보유하고 있을 것


이라는 점을 염두에 두고 에디터들을 찾아 보았습니다.


우선 1번을 만족 시키는 에디터는  XE에디터와 SPAW에디터, tineMCE 세가지가 있었으며

XE에디터는 현재 테이블 수정 시 테이블 겹침 문제가 심각하여 사내에서 조금 쪼이고 있는 실정입니다.(이게 다른 에디터를 찾은 주 원인)

또 대부분의 에디터들은 한번 작성한 테이블을 수정할 경우 기존의 내용이 삭제 되던가 테이블 수정이 안되는게 대부분 입니다.


2번 항목의 경우 1번을 만족하는 에디터 중 XE 에디터는 이 부분에서도 종종 스타일이 사라질 경우가 발생하고 있습니다.

SPAW에디터는 php전용이라  html 파일로 출력하는 XE에 연동하려다가 포기했습니다 -_-;;


3번의 경우 많은 에디터들이 있지만 위 두가지 이유로 결국 tinyMCE를 택했습니다.

더군다나  FCK에서 지원하는 대부분의 기능이 그대로 적용되어 더욱 만족합니다.


여기까지는 제가 tinyMCE를 택한 이유입니다.

========================================================================================================================

 * 여기부터는 tinyMCE 스킨을 설치하는 방법입니다. 아래 내용을 꼭 읽고 설치 해주세요 (특히 빨간 글씨는 필독)

1. 우선 tinyMCE는 LGPL 라이센스 입니다.  그래서 자유롭게 수정해서 XE에 적용하였으며 이렇게 배포합니다.

2. tinyMCE설정이 상당히 많으므로 가능하면 홈페이지의 examples 항목을 읽고 설정을 수정하셔서 사용을 권합니다.

 - http://tinymce.moxiecode.com/examples/full.php


3. 첨부된 tinyMCE.zip 파일을 압축을 푼후 /modules/editor/skins/에 복사합니다.

  - c:/apache2/htdocs/modules/editor/skins/tinyMCE/ 폴더가 됩니다.


4. 첨부된 js.zip 파일을 압축을 푼 후 /modules/editor/tpl/js/ 에 복사합니다.

  - uploader.js와 editor_common.js를 백업(혹은 이름 바꾸기) 후에 덮어쓰기하세요


아래는  uploader.js와  editor_common.js의 수정 내용입니다. (첨부 파일은 수정된 사항으로 적용되어있습니다.);


/modules/editor/tpl/js/uploader.js  마지막 줄 수정

  - if(text.length>0) editorReplaceHTML(iframe_obj, text.join(''));   을

  - if(text.length>0) editorReplaceHTML(iframe_obj, text.join(''), editorSequence);  로 수정


/modules/editor/tpl/js/editor_common.js 수정

  - line 25   기존의 iframe의 컨텐츠에 포커스를 주는 소스에 tinyMCE에 포커스를 주는 if문 추가

    // 에디터에 포커스를 줌
function editorFocus(editor_sequence) {

   //# tinyMCE는 iframe이 아님 ..  tiny에서 지원하는 포커스 기능을 사용   

   if(editorRelKeys[editor_sequence]["editor_skin"] != undefined){

        var editor = editorRelKeys[editor_sequence]["editor"];

        editor.execInstanceCommand("mceFocus", true, "tinyMCE_"+editor_sequence);

   } else {

        var iframe_obj = editorGetIFrame(editor_sequence);
        iframe_obj.contentWindow.focus();

   }
}


  - line 105  iframe을 가져오는 부분을  tiny일 경우 그냥 object를 반환하도록 수정

// editor_sequence값에 해당하는 iframe의 object를 return
function editorGetIFrame(editor_sequence) {
    if(editorRelKeys != undefined && editorRelKeys[editor_sequence] != undefined && editorRelKeys[editor_sequence]['editor'] != undefined) {   // if문에  { } 태그를 추가하였음

         // # tinyMCE일 경우  iframe이 아닌 object를 반환

         if(editorRelKeys[editor_sequence]['editor_skin'] != undefined ) {

              return xGetElementById( ' tinyMCE_'+editor_sequence);

         } else {

              return editorRelKeys[editor_sequence]['editor'].getFrame();
              return xGetElementById( 'editor_iframe_'+ editor_sequence );

         }

     }
}


  - line 350  첨부 파일을 "본문 삽입"을 눌렀을 때 포커스 위치에 첨부 파일 삽입

// 에디터 내의 선택된 부분의 html코드를 변경
function editorReplaceHTML(iframe_obj, html, editorSequence  ) {    // upload.js 에서 추가한 것과 동일
    // 이미지 경로 재지정 (rewrite mod)
    var srcPathRegx = /src="("|\'){1}(\.\/)?(files\/attach|files\/cache|files\/faceOff|files\/member_extra_info|modules|common|widgets|widgetstyle|layouts|addons)\/([^"\']+)\.(jpg|jpeg|png|gif)("|\'){1}/g;
    html = html.replace(srcPathRegx, 'src="http://moonhouse.co.kr/zbxe/+request_uri+"$3/$4.$5"');

    // href 경로 재지정 (rewrite mod)
    var hrefPathRegx = /href="("|\'){1}(\.\/)?\?([^"\']+)("|\'){1}/g;
    html = html.replace(hrefPathRegx, 'href="http://moonhouse.co.kr/zbxe/+request_uri+"?$3"');
  

    //# tinyMCE 일 경우 포커스

    if(editorRelKeys[editorSequence]["editor_skin"] != undefined) {

        var editor = editorRelKeys[editorSequence]["editor"];

        editor.execInstanceCommand("mceFocus", true, "tinyMCE_"+editorSequence);

    } else {

        // 에디터가 활성화 되어 있는지 확인 후 비활성화시 활성화
        var editor_sequence = iframe_obj.contentWindow.document.body.getAttribute("editor_sequence");
        // iframe 에디터에 포커스를 둠
        iframe_obj.contentWindow.focus();

    }

    if(xIE4Up) {

      //# tinyMCE일 경우 ReplaceContent 사용

    if(editorRelKeys[editorSequence]["editor_skin"] != undefined) {

        var editor = editorRelKeys[editorSequence]["editor"];

        editor.execCommand("mceReplaceContent", false,  html);

    } else {

          var range = iframe_obj.contentWindow.document.selection.createRange();
          if(range.pasteHTML) {
              range.pasteHTML(html);
          } else if(editorPrevNode) {
              editorPrevNode.outerHTML = html;
          }

      }

    } else { 

      //# tinyMCE일 경우 ReplaceContent 사용

    if(editorRelKeys[editorSequence]["editor_skin"] != undefined) {

        var editor = editorRelKeys[editorSequence]["editor"];

        editor.execCommand("mceReplaceContent", false,  html);

    } else {
        try {
            if(iframe_obj.contentWindow.getSelection().focusNode.tagName == "HTML") {
                var range = iframe_obj.contentDocument.createRange();
                range.setStart(iframe_obj.contentDocument.body,0);
                range.setEnd(iframe_obj.contentDocument.body,0);
                range.insertNode(range.createContextualFragment(html));
            } else {
                var range = iframe_obj.contentWindow.getSelection().getRangeAt(0);
                range.deleteContents();
                range.insertNode(range.createContextualFragment(html));
            }
        } catch(e) {
            xInnerHtml(iframe_obj.contentWindow.document.body, html+xInnerHtml(iframe_obj.contentWindow.document.body));
        }

      }
    }
}

 

여기까지 설치시 필요한 설정 입니다.

editorRelKeys['editorSequence]['editor_skin'] 을 undefined 로 체크한 이유는

꼭 tinyMCE가 아니더라도 추후 다른 에디터에서  editor_skin 을 사용해서 체크가 가능하도록 입니다.

=======================================================================================================================

여기는 tinyMCE스킨 폴더의 파일 설정 내용 설명입니다.


1. /tinyMCE/editor.html

  - 자동 저장 관련 소스를 모두 삭제 하였습니다. 자도 저장 기능을 사용하지 않습니다.

  -<textarea id="tinyMCE_{$editor_sequence}" style="width:100%; height:{$editor_height}px;"></textarea>

     - textarea의 id 를  tinyMCE_시퀀스 로 했습니다.


2. /tinyMCE/js/tinyMCE.js 테스트중 만든 파일인데 실수로 같이 압축되서 배포 됐어요 .. 삭제 하셔도 됩니다 -_-;;

3. /tinyMCE/js/xe_interface.js

  - fckEditor를 참고 하였습니다.

  - line 26  tinyMCE.init  부분이 에디터 설정 부분입니다. 이곳에 소스를 변경하시면 여러가지 스타일 및 설정이 가능합니다.

4. line 67 에  editorRelKeys[editor_sequence]['editor_skin'] = 'tinyMCE';  // # tinyMCE 검색을 위해 추가  라는 소스가 추가 되어있습니다.

  위 소스 중에  editor_skin  != undefined 로 검색할 때 사용했습니다.



======================================================================================================================


처음에 말씀 드린 것처럼 init 소스를 수정하시면 플러그인 / 스킨 /템플릿 등을 설정이 가능합니다.

홈페이지 참고하셔서 적용 해보세요


=====================================================================================================================

/*  # 추가팁 : 제가 작업하다 알아낸 추가팁을 여기다가 계속 적을게요 */

/*

1. 하단의 path bar가 너무 긴 경우 에디터가 윈도우 사이즈보다 길어집니다.

예를 들어

<p><p><p><p><p><P><P><p><div><p> 여기에 내용 </p></div></p>......

인 경우  하단의 path bar에

p > p > p > p > p > P > P > p > div > p >  이렇게 나타나는데 엑셀데이터 같은거 복사한 경우 너무 길어서 화면크기를 벗어납니다.

xe_inteface.js 파일의  tinyMCE.init() 함수에 

theme_advanced_path : false,  를 추가해주시면 하단 path bar에 내용이 출력되지 않습니다.


2. 위 소스에서 오타가 아무리 봐도 안보여서 (죄송합니다 ;ㅁ;) 결국 js파일을 복사신공을 발휘해서 가져왔습니다. js 파일 압축 풀어서 사용해 보세요~


3. 제목을 한글로 작성하고 내용에 바로 한글을 입력 시 글씨가 지워지는 문제가 있습니다. 이를 해결하시려면

 xe_interface.js 파일의 tinyMCE.init({  소스 바로 위에

 - if(element.value == '') element.value = '<p></p>';  혹은 <div></div> 같은걸 넣어주세요..


*/

문하우스에서 위의 코드를 일일이 편집하는 수고를 덜어 드리겠습니다.
tinyMCE.zip 압축을 플어서 editor폴더를 modules폴더안에 업로드 하시면 됩니다.
tinyMCE 에디터로 작성한 게시판 샘플보기 http://moonhouse.co.kr/zbxe/257603
엑셀, 워드, 파워포인트 같은 오피스문서를 복사해서 붙여넣기를 하면 잘 작동합니다.
보통의 게시판에서는 xe기본에디터를 권장하며, 특수한 게시판의 경우 tinyMCE에디터를 권합니다.

첨부
번호
제목
제작자
적용여부
147 프로그램 레이아웃 컨트롤 박스 wiley NO 2011-11-09 103
146 위젯 네비게이션 위젯 배워서남준다 NO 2011-05-03 946
145 프로그램 문서보기 유저 지정 파이델 NO 2011-05-03 767
144 프로그램 prettyphoto - 본문내 이미지뷰어 hika1 적용 2011-02-20 1266
143 위젯 Content 이미지 슬라이더 배워서남준다 NO 2010-12-13 1630
142 스킨 New FAQ Skin Loptz NO 2010-10-04 1671
141 프로그램 JPG 이미지 자동 축소 애드온 카르마 적용 2010-02-09 4189
140 스킨 FAQ게시판 Habile 적용 2010-01-23 4471
139 프로그램 게시판EX 파이델 적용 2010-01-23 4279
138 프로그램 회원가입 확장 모듈 난다날아 NO 2010-01-23 3806
137 스킨 스케줄게시판 모듈스킨 wooam 적용 2010-01-15 3976
136 위젯 디카사진 플래시 갤러리 7 하하호호33 변형 2009-10-17 7060
프로그램 tinyMCE 에디터 개돌 적용 2009-09-24 10167
134 스킨 XE Official Layout Ver 2 zero NO 2009-09-18 7599
133 위젯 Ext JS popup 팝업창 Diver NO 2009-09-17 7720
132 위젯 [3차 수정] 슬라이드되는 최근 이미지 배워서남준다 NO 2009-09-17 6511
131 위젯 xeBanner 1 zero NO 2009-09-17 7189
130 프로그램 광고글(스팸)로 고생하시는 분들 captcha 애드온 ... zero 적용 2009-02-21 10355
129 프로그램 [수정] 휴지통 애드온 1.0 지연아빠 적용 2009-02-19 7625
128 프로그램 [긴급수정-2009년 2월18일 오후2시] 추천/비추천 ... 지연아빠 적용 2009-02-19 7102
127 위젯 디카사진 플래시 갤러리 4 (업데이트) 하하호호33 적용 2009-02-19 7555
126 스킨 플래시 이미지 출력 슬라이드 1 ztyle 적용 2009-02-06 8959
125 스킨 플래시 갤러리 ztyle 적용 2009-01-24 7995
124 프로그램 oliris PicLens 애드온 v1.0.4 [수정] 입니다. 라르게덴 적용 2009-01-16 6515
123 프로그램 웹 폰트 적용 애드온입니다. ※ 업로드 불가 쿠로이네코 적용 2009-01-13 7402
122 위젯 로마네스크 최근 문서 출력 위젯 라르게덴 적용 2009-01-10 7382
121 위젯 bgw_menu 위젯용 배너 스킨 BlueGate NO 2009-01-08 7771
120 프로그램 게시글 상/하단 내용 입력 애드온 ver 0.2 misol NO 2009-01-02 7536
119 프로그램 Snow 애드온 Airif 적용 2008-12-24 7429
118 위젯 배너 스킨 - 7초마다 배너가 바뀌는 스킨 3 findwind NO 2008-12-09 10432
  • 문하우스는 IE7, 1280*1024 이상의 모니터 해상도에서 최적화 되어 있습니다.무단 E-mail 추출이나, 성인광고를 허용치 않습니다
  • 단축키 : l-목록, w-글쓰기, z-이전글, x-다음글, s-최근글, a-이전목록, d-다음목록, 1-home, 2-data, 3-zbxe, 4-blog, 5-total, 6-QnA