위지윅에디터 ckeditor 사용하기(CodeIgniter에 적용하기)

http://codeigniter-kr.org codeigniter 한국사용자포럼에 정리해서 올렸던 내용을 제 블로그로 꺼꾸로 가져옵니다.
ckeditor 3.X버전을 codeigniter에서 사용할 수 있도록 수정한 내용입니다.

원본 http://codeigniter-kr.org/source/view/322/page/1








fckeditor가 2.X대 버전으로 끝나고 3.X버전으로 오면서 ckeditor로 바뀌면서
상당히 많은 변화가 있었네요.
기능들을 코어와 플러그인으로 분리, 엄청난(?) 로딩속도 향상(http://hbuilder.kiissoft.com/admin/test), ajax 적용용이 등등..

파일, 이미지 업로드를 사용하기 위해서는(업로더가 2.X버전에서는 fckeditor안에 포함되어 있었음)
ckfinder도 같이 설치를 해야합니다.

ci forum에서 검색해보니 ckeditor용 헬퍼를 만들어놓은게 있어서 적용하여 사용중에 툴바선택할 수 있는
부분을 추가했습니다. (fckeditor는 라이브러리로 만들어 사용)

사용하기 위해서 ckeditor(http://ckeditor.com/download)와 ckfinder(http://ckfinder.com/download)(이미지 업로더를 따로 만든다면 필요가 없습니다)를 다운로드합니다.

1. 압축을 풀고 (저는 include 디렉토리 아래에 풀었습니다.)
   include – ckeditor
                 – ckfinder

2. 설정을 합니다.
 – ckeditor는 config.js 파일이 설정파일인데 헬퍼에서 설정을 해서 따로 설정할 것이 없습니다.
 – ckfinder는 config.php 파일을 수정해야 합니다.




 


01.function CheckAuthentication()

02.{

03.    return true;

04.}

05.//true로 수정

06.//권한체크용으로 만들어진 함수인데 수정하지 않으면 파일업로드가 안됩니다.

07.  

08.$baseUrl = ‘/data/upload’

09.//업로드된 파일이 저장될 디렉토리

10.//upload 디렉토리 하위에 파일형식에 따라서 이미지(images), 파일(files), 플래시(flash) 디렉토리가 자동생성됩니다.

11.//쓰기권한 필수

12.  

13.$config[‘ResourceType’][] = Array(

14.        ‘name’ => ‘Images’,

15.        ‘url’ => $baseUrl . ‘ck_images’,

16.        ‘directory’ => $baseDir . ‘ck_images’,

17.        ‘maxSize’ => ‘2M’,

18.        ‘allowedExtensions’ => ‘bmp,gif,jpeg,jpg,png’,

19.        ‘deniedExtensions’ => );

20.// maxSize가 처음에는 0으로 되어있는데 제한사이즈로 수정

21.// $config[‘ResourceType’][] 3군데 모두 수정

22.  

23.// 그외에는 각자 입맛(?)에 맞게 수정하시면 됩니다.
3. ckeditor_helper.php 파일을 생성합니다.(헬퍼 디렉토리)



 


01.<?php

02.if(!defined(‘BASEPATH’)) exit(‘No direct script access allowed’);

03.  

04.function form_ckeditor($data)

05.{

06.    //툴바 선택사용

07.    switch($data[‘toolbar’]){

08.        case (‘reply’):

09.        $tool_bar = ‘

10.            [

11.                [“Font”,“FontSize”], [“TextColor”,“BGColor”],

12.                [“Bold”,“Italic”,“Underline”],

13.                [“JustifyLeft”,“JustifyCenter”,“JustifyRight”,“JustifyBlock”],

14.                [“Link”,“Unlink”],

15.                [“Image”,“Flash”,“Table”,“HorizontalRule”,“Smiley”,“SpecialChar”],

16.                [“Preview”,“Source”,“Maximize”]

17.            ]

18.        ‘;

19.        break;

20.        case (‘basic’):

21.        $tool_bar = ‘

22.            [

23.                [“Source”,“-“,“Preview”],

24.                [“Bold”,“Italic”,“Underline”],

25.                [“Link”,“Unlink”]

26.            ]

27.        ‘;

28.        break;

29.        //디폴트는 FUll입니다.

30.        default:

31.        $tool_bar = ‘

32.            [

33.                [“Source”,“-“,“Save”,“NewPage”,“Preview”,“-“,“Templates”],

34.                [“Cut”,“Copy”,“Paste”,“PasteText”,“PasteFromWord”,“-“,“Print”, “SpellChecker”, “Scayt”],

35.                [“Undo”,“Redo”,“-“,“Find”,“Replace”,“-“,“SelectAll”,“RemoveFormat”],

36.                [“Form”, “Checkbox”, “Radio”, “TextField”, “Textarea”, “Select”, “Button”, “ImageButton”, “HiddenField”],

37.                “/”,

38.                [“Bold”,“Italic”,“Underline”,“Strike”,“-“,“Subscript”,“Superscript”],

39.                [“NumberedList”,“BulletedList”,“-“,“Outdent”,“Indent”,“Blockquote”],

40.                [“JustifyLeft”,“JustifyCenter”,“JustifyRight”,“JustifyBlock”],

41.                [“Link”,“Unlink”,“Anchor”],

42.                [“Image”,“Flash”,“Table”,“HorizontalRule”,“Smiley”,“SpecialChar”,“PageBreak”],

43.                “/”,

44.                [“Styles”,“Format”,“Font”,“FontSize”],

45.                [“TextColor”,“BGColor”],

46.                [“Maximize”, “ShowBlocks”,“-“,“About”]

47.            ]

48.        ‘;

49.        break;

50.    }

51.  

52.  

53.    $data[‘language’] = isset($data[‘language’]) ? $data[‘language’] : ‘ko’;

54.  

55.    $size    = isset($data[‘width’]) ? ‘width: “‘.$data[‘width’].‘”, ‘ : ;

56.    $size  .= isset($data[‘height’]) ? ‘height: “‘.$data[‘height’].‘”, ‘ : ;

57.  

58.    $options = ‘{‘.

59.            $size.

60.            ‘language: “‘.$data[‘language’].'”,

61.            //각종 설정값 (자세한내용은 ckeditor 레퍼런스참고)

62.            startupOutlineBlocks: false,

63.            entities: false,

64.            entities_latin: false,

65.            entities_greek: false,

66.            forcePasteAsPlainText: false,

67.  

68.//파일업로드 프로그램의 주소입니다.

69.//ckfinder의 주소를 적으면 됩니다. 

70.//사용자 업로더를 사용한다면 그 주소를 써주면 됩니다.            filebrowserUploadUrl : “/include/ckfinder/core/connector/php/connector.php?command=QuickUpload&type=Files”,

71.            filebrowserImageUploadUrl : “/include/ckfinder/core/connector/php/connector.php?command=QuickUpload&type=Images”,

72.            filebrowserFlashUploadUrl : “/include/ckfinder/core/connector/php/connector.php?command=QuickUpload&type=Flash”,

73.  

74.            toolbar : ‘.$tool_bar.’

75.  

76.        }’;

77.    //ckeditor 선언부

78.    return

79.    // fix: move to <HEAD…

80.    ‘<script type=”text/javascript” src=”‘.INCLUDE_DIR.‘/ckeditor/ckeditor.js”></script>’ .

81.  

82.    // put the CKEditor

83.     ‘<script type=”text/javascript”>CKEDITOR.replace(“‘.$data[‘id’].‘”, ‘ . $options . ‘);</script>’;

84.}

85.?>

4. 사용
– 컨트롤러



 


01.<?php

02.  

03.class Test extends Controller {

04.  

05.    function Test()

06.    {

07.        parent::Controller();

08.    }

09.  

10.    function index() {

11.        //헬퍼 선언

12.        $this->load->helper(‘ckeditor’);

13.        if (@$_POST[‘mode’] == ‘edit’) {

14.            $data[‘textarea_value’] = stripcslashes($_POST[‘textarea_id’]);

15.        } else {

16.            $data[‘textarea_value’] = ;

17.        }

18.        $this->load->view(‘admin/test’, $data);

19.    }

20.}

21.?>

– 뷰



 


01.<input onclick=“ExecuteCommand(‘image’);” type=“button” value=“파일업로드”/>

02.<form action=“” method=“post”>

03.<input type=“hidden” name=“mode” value=“edit” />

04.<!–

05.textarea name과 하단 form_ckeditor의 id변수 동일해야

06.textarea를 ckeditor로 대체해줍니다.

07.기존값이 있다면 <textarea></textarea>사이에 선언

08.–>

09.<textarea name=“textarea_id”><?=(@$textarea_value)?@$textarea_value:?></textarea>

10.<input type=“submit” value=“등록” />

11.</form>

12.<?

13.//툴바, textarea name, 에디터 폭, 에디터 높이

14.//툴바를 빈칸으로 하면 FULL 툴바가 나옵니다.

15.//현재 선언해놓은 것은 reply와 basic인데 입맛에 맞게 선언하여 사용하면 됩니다.

16.echo form_ckeditor(array(

17.    ‘toolbar’        => ‘reply’,

18.    ‘id’              => ‘textarea_id’,

19.    ‘width’           => ‘500’,

20.    ‘height’          => ‘300’

21.));

22.?>

23.<!–

24.툴바의 버튼을 외부로 뺄수도 있습니다. 

25.맨 윗라인의 이미지 업로더를 버튼을 에디터 외부에 위치시키는 팁입니다.

26.–>

27.<script>

28.function ExecuteCommand( commandName )

29.{

30.    // Get the editor instance that we want to interact with.

31.    var oEditor = CKEDITOR.instances.textarea_id ;

32.  

33.    // Check the active editing mode.

34.    if (oEditor.mode == ‘wysiwyg’ )

35.    {

36.        // Execute the command.

37.        oEditor.execCommand( commandName ) ;

38.    }

39.    else

40.        alert( ‘You must be on WYSIWYG mode!’ ) ;

41.}

42.</script>

5. 끝
위 내용 데모는 http://hbuilder.kiissoft.com/admin/test 에서 보실 수 있습니다.

대중과 함께 생각하고 만들어내는 크라우드 소싱












기영이는 엄마와 백화점에 티셔츠를 사러 갔습니다. 백화점 안 여기 저기를 둘러보며 티셔츠를 고르던 기영이는 이렇게 많은 옷 중에 자기가 좋아하는 그림이 그려진 티셔츠가 하나도 보이지 않아 답답했습니다. 기영이는 ‘내가 원하는 그림이 그려진 옷을 팔면 얼마나 좋을까?’라고 생각했습니다.
기영이처럼 개개인이 원하는 그림이 그려진 옷을 팔면 얼마나 좋을까요. 그러나 쉽지 않은 일입니다. 단 한 사람을 위해 옷이 만들어져야 하면 값은 당연히 비싸지기 때문입니다. 만약 기영이가 원하는 그림이 그려진 티셔츠를 원하는 사람이 많아진다면 싼 가격으로 티셔츠를 만들어 팔 수 있을 것입니다. 이런 생각을 실천한 사람이 있었습니다. 약 120만원 정도의 지본금으로 만들어진 스레드리스(threadless)가 바로 그 회사입니다.
이 회사 사이트에 사람들이 티셔츠 그림을 올리면 이 그림에 대해 여러 사람이 평가하고 투표를 합니다. 그렇게 해서 인기가 많은 티셔츠는 제작해서 판매를 합니다. 채택된 그림을 올린 사람에게는 디자인료를 주고, 처음 만들어진 수량을 다 팔고 새로 만들게 되면 추가로 또 돈을 주지요.

실제로 크라우드소싱을 활용하고 있는 회사를 보면 좀더 이해가 쉬울 거예요. 차에 달려있는 내비게이션은 목적지까지 가는 방법을 알려줍니다. 그런데 새로운 길은 지금도 만들어지고 있고, 있던 길이 없어지기도 합니다. 한 회사에서 이런 모든 정보를 알 수는 없습니다. 내비게이션 이용자들이 수시로 새로운 정보를 회사에 알려주고, 회사는 이를 내비게이션에 반영해서 더 품질좋은 내비게이션이 만들어지는 것이지요.
이노센티브라는 회사는 더 놀랍습니다. 이 회사에 정부나 기업 등이 과학과 관련된 어떤 문제를 해결해 달라고 요청이 들어오면 사이트에 문제를 올리고, 아이디어를 모읍니다. 채택된 아이디어에 대해서는 일정한 금액의 보상금을 줍니다. 이노센티브를 통해서 많은 문제가 해결되었지만 기름 유출사고를 해결해낸 사례는 영화보다 극적입니다. 1989년 미국 알래스카에서는 엄청난 기름 유출 사고가 났습니다. 그 후 20년 동안이나 기름을 건져냈지만 아직도 해결을 다 못했습니다. 날씨가 너무 추워 기름과 물이 얼어붙었기 때문이었습니다. 이 문제를 이노센티브에 의뢰를 했고, 이노센티브가 사이트에 이 문제를 올리자 수많은 아이디어가 나왔습니다. 그 중에서 채택된 것은 시벤트회사 근로자의 아이디어였습니다. 시멘트가 굳지 말라고 계속 기계로 저어주듯이 기름도 계속 진동을 주면 얼지 않는다는 아이디어였습니다. 결국 이 아이디어로 기름을 걷어내는 문제는 해결이 되었습니다.

이처럼 크라우드소싱은 엄청난 잠재력을 가졌습니다. 새로운 물건과 서비스가 만들어지고, 과학기술로 문제를 해결하기도 합니다. 물론 크라우드소싱으로 모든 문제가 해결되고, 크라우드소싱으로 만들어진 모든 물건과 서비스가 성공하기만 한 것은 아닙니다. 그렇지만 기업은 소비자들이 물건과 서비스를 사줘야만 살아남기 때문에 고객과 소통하는 크라우드소싱은 어쩌면 꼭 필요한 것이라고 할 수 있습니다.

커스텀 롬업

빠따뜨2-3a의 키친을 가지고 비토녹음기 삭제(영상통화시 내 음성이 상대에게 전달되지 않음) 로디움카메라 삭제 및 몇몇 프로그램 추가(페이스북, aebutton 등)하고 커스텀 롬을 생성하여 롬업완료.
초기부팅후 점유율 45%, 저장소 40M 사용

처음에 cab파일 몇개 자동으로 넣어놨다가 에러가 나서 다시 롬 만들고 롬업.
에러나던 중에 전화가 왔는데 버튼이 아무 것도 눌리지않아서 못 받음. ㅋ

롬의 이름은 가칭 변롬. 켁

앞으로 또 커스텀롬을 만들 날이 있을까 생각되긴 하지만 또 만든다면
필요한 프로그램을 전부 패키지화 해서 넣어야 겠다는 생각이 들었다.
cab방식은 아무래도 위험해서…

연락처만 싱크하고 1차 백업 완료.

빠따뜨님 키친 공개 감사드립니다.

파이어폭스 부가기능 오류코드 : ssl_error_rx_record_too_long

파이어폭스 메뉴중 도구-부가기능을 클릭했을때 아래의 에러가 나는 경우가 있습니다.

service.addons.mozilla,org:443에 접속하는 중에 오류가 발생하였습니다.
SSL이 최대 허용가능한 길이를 넘은 레코드를 받았습니다.
(오류코드 : ssl_error_rx_record_too_long)


이런 경우에는

주소창에 about:config 입력하고 들어가신다음에 필터에 addon을 입력하시면 9개정도 뜹니다.

그중에서 https://services.addons.mozilla.org/로 시작하는 값이 2개 있습니다.
그 두개에서 각각 ‘services.’부분을 지워주시면 부가기능 설치시에도 에러코드가 뜨지 않습니다.

원본 http://forums.mozilla.or.kr/viewtopic.php?p=40913