CKEditor4 ๋๊ตฌ ๋ชจ์ ๊ตฌ์ฑ, ๋ด ์์ผ๋ก ์ง์ ๊พธ๋ฏธ๊ธฐ
์น ๊ฐ๋ฐ์๋ ์ฝํ ์ธ ๊ด๋ฆฌ์๋ผ๋ฉด ํ ๋ฒ์ฏค ์ฌ์ฉํด ๋ดค์ WYSIWYG ์๋ํฐ, CKEditor4์์ ์ฌ์ฉ์ ์ธํฐํ์ด์ค์ ํต์ฌ์ธ '๋๊ตฌ๋ชจ์(Tollbar)'์ ๋ํด์ ์์๋ณด๊ฒ ์ต๋๋ค. ๊ธฐ๋ณธ ๋๊ตฌ ๋ชจ์๋ ํ๋ฅญํ์ง๋ง, ์ด์ ์ค์ธ ์น ์ฌ์ดํธ๋ ์๋น์ค์ ํน์ฑ์ ๋ง์ถฐ ๊ผญ ํ์ํ ๊ธฐ๋ฅ๋ง ๋ฃ๊ฑฐ๋, ์์ฃผ ์ฐ๋ ๊ธฐ๋ฅ์ ๋์ ๋๊ฒ ๋ฐฐ์นํ๋ฉด ์ฌ์ฉ์ ๊ฒฝํ(UX)์ด ํจ์ฌ ์ข์์ง ๊ฒ์ ๋๋ค.
์ ๋๊ตฌ ๋ชจ์์ ์ฌ์ฉ์ ์ ์ํด์ผ ํ ๊น์?
ํฅ์๋ ์ฌ์ฉ์ ๊ฒฝํ(UX)
๋ถํ์ํ ๋ฒํผ์ ์ ๊ฑฐํ๊ณ , ์์ฃผ ์ฌ์ฉํ๋ ๊ธฐ๋ฅ์ ์ ๋ฉด์ ๋ฐฐ์นํ์ฌ ์ฌ์ฉ์๊ฐ ๋ ๋น ๋ฅด๊ณ ํจ์จ์ ์ผ๋ก ์์ ํ ์ ์์ต๋๋ค. ๊ทธ๋ ๊ฒ ๋๋ค๋ฉด ๋ถํ์ํ ํด๋ฆญ๊ณผ ์ฐพ๊ณ ์ ํ๋ ๋ฒํผ์ ์์น ๋ฒ์๋ฅผ ์ค์ฌ ์ฌ์ฉ์์๊ฒ ํจ์จ์ ์ธ ์ฌ์ฉ์ ๊ฒฝํ์ ์ ๊ณตํ ์ ์์ต๋๋ค.
๊ฐ๊ฒฐํ ์ธํฐํ์ด์ค
๋๋ฌด ๋ง์ ๋ฒํผ์ ์ฌ์ฉ์๋ฅผ ํผ๋์ค๋ฝ๊ฒ ํ ์ ์์ต๋๋ค. ๊ผญ ํ์ํ ๊ธฐ๋ฅ๋ง ๋จ๊ฒจ๋๋ฉด ์๋ํฐ๊ฐ ํจ์ฌ ๊น๋ํ๊ณ ์ง๊ด์ ์ผ๋ก ๋ณด์ ๋๋ค.
ํน์ ์๋น์ค์ ์ต์ ํ
๊ฒ์ํ ์๋ํฐ๋ผ๋ฉด ์ด๋ฏธ์ง ์ ๋ก๋๋ ํ ์ฝ์ ๊ธฐ๋ฅ์ด ์ค์ํ๊ณ , ๋จ์ ๋๊ธ ์๋ํฐ๋ผ๋ฉด ๊ธฐ๋ณธ์ ์ธ ํ ์คํธ ์คํ์ผ๋ง๋ง ํ์ํ ์ ์์ต๋๋ค. ์๋น์ค์ ๋ชฉ์ ์ ๋ง์ถฐ ๋๊ตฌ ๋ชจ์์ ๊ตฌ์ฑํ ์ ์์ต๋๋ค.
์ฑ๋ฅ ํฅ์(์ ํ)
๋ถํ์ํ ํ๋ฌ๊ทธ์ธ์ ์ ๊ฑฐํ๋ฉด CKEditor์ ๋ก๋ฉ ์๋๋ ์ฝ๊ฐ ๊ฐ์ ๋ ์ ์์ต๋๋ค.
CKEditor4๋ ๋ชจ๋ ๊ธฐ๋ฅ์ ๊ฐ์ถ WYSIWYG ํธ์ง๊ธฐ์ด์ง๋ง, ๋ชจ๋ ์ต์ ์ด ํ์ํ ๊ฒ์ ์๋๋๋ค. ๋ฐ๋ผ์ ํด๋ฐ ์ฌ์ฉ์ ์ ์๋ ๊ฐ์ฅ ์ผ๋ฐ์ ์ธ ์๊ตฌ ์ฌํญ ์ค ํ๋์ ๋๋ค.
ํธ์ง๊ธฐ๋ฅผ ํ์์ ๋ง๊ฒ ์กฐ์ ํ๋ ๊ฐ์ฅ ๊ถ์ฅ๋๋ ๋ฐฉ๋ฒ์ ์ฌ์ฉ์ ์ง์ ๋น๋๋ฅผ ๋ง๋ค๊ณ , ํด๋ฐ์ ์ถ๊ฐ๋๊ธฐ ์ ์ ์์น ์๋ ๊ธฐ๋ฅ์ ์ ๊ฑฐํ๋ ๊ฒ์ ๋๋ค. ์ ์ฒด ํจํค์ง๋ฅผ ๋ค์ด๋ก๋ ํ ๊ตฌ์ฑ์์ ํ๋ฌ๊ทธ์ธ์ด๋ ๋ฒํผ์ ์ ๊ฑฐํ๋ ๊ฒ์ ์ข์ง ์์ต๋๋ค. ์ ๋นํ ์ด์ ์์ด ๋ถํ์ํ ๊ธฐ๋ฅ๋ง ๋ก๋ํ๊ฒ ๋ ๊ฒ์ ๋๋ค.
ํด๋ฐ ๊ตฌ์ฑ๊ธฐ๋ฅผ ์ด์ฉํ ๋ฐฉ๋ฒ
[ ํด๋ฐ ๊ตฌ์ฑ๊ธฐ ์ฌ์ฉํ๊ธฐ ]
Toolbar Configurator
web-resources.aalzza.com
ํด๋ฐ ๊ตฌ์ฑ๊ธฐ๋ CKEditor 4.5์์ ๋์ ๋์์ผ๋ฉฐ ๋ชจ๋ ๊ณต์ CKEditor4 ์ค์น ํจํค์ง์์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
CKEditor4 ๋ฐฐํฌ ํจํค์ง์ ํฌํจ๋ ์๋ก์ด ํด๋ฐ ์ ํธ๋ฆฌํฐ๋ฅผ ์ฌ์ฉํ๋ฉด ์ ๊ทผ์ฑ ์๋ ํด๋ฐ๋ฅผ ์ฝ๊ฒ ๊ตฌ์ฑํ ์ ์์ต๋๋ค. ํธ์ง๊ธฐ ํด๋ฐ๋ฅผ ์ค์ ํ๋ '๊ฐ์ฅ ๊ถ์ฅ๋๋ ๋ฐฉ๋ฒ'์ ๋๋ค. ํด๋ฐ ๊ทธ๋ฃน ์์๋ฅผ ๋ณ๊ฒฝํ๊ณ , ๋ฒํผ์ ์ ํ ๋ฐ ์ ํ ํด์ ํ๊ณ , ํด๋ฐ๋ฅผ ํ์ผ๋ก ๋๋๋ ๋ฐ ์ฌ์ฉํ ์ ์์ต๋๋ค. ํ์ฌ ๊ตฌ์ฑ์ ์ฒจ๋ถ๋ ํธ์ง๊ธฐ ์ธ์คํด์ค์์ ์ค์๊ฐ์ผ๋ก ๋ฏธ๋ฆฌ ๋ณผ ์ ์์ผ๋ฏ๋ก ํด๋ฐ์ ๋ชจ์๊ณผ ๋๋์ ๋ํ ์ฆ๊ฐ์ ์ธ ํผ๋๋ฐฑ์ ๋ฐ์ ์ ์์ต๋๋ค. ์ค์ ์ ๋ง์กฑํ๋ฉด ์์ฑ๋ ์์ค ์ฝ๋๋ฅผ ๋ณต์ฌํ์ฌ ํธ์ง๊ธฐ ๊ตฌ์ฑ์ ๋ถ์ฌ ๋ฃ๊ธฐ๋ง ํ๋ฉด ๋ฉ๋๋ค.
ํด๋ฐ ๊ตฌ์ฑ๊ธฐ์๋ ๋ ๊ฐ์ง ์ ํ์ด ์์ต๋๋ค. ์์์ ์ธ ๊ตฌ์ฑ์ผ๋ก ํ์ธ ํ ์ ์๋ '๊ธฐ๋ณธ ๋๊ตฌ ๋ชจ์ ๊ตฌ์ฑ๊ธฐ'์ ํญ๋ชฉ๋ณ ๊ตฌ์ฑ์ ํตํด ์์ ํ ์ฌ์ฉ์ ์ ์๋ ๋๊ตฌ ๋ชจ์์ ๋ง๋ค ์ ์๋ '๊ณ ๊ธ ๋๊ตฌ ๋ชจ์ ๊ตฌ์ฑ๊ธฐ'์
๋๋ค. ํด๋ฐ ๊ตฌ์ฑ๊ธฐ์ ํ์ฌ๋๋ ํธ์ง๊ธฐ์๋ ํน์ CKEditor4 ๋น๋์์ ์ฌ์ฉ ๊ฐ๋ฅํ ๋ชจ๋ ๊ธฐ๋ฅ๊ณผ ๋ฒํผ์ด ํฌํจ๋์ด ์์ต๋๋ค.
๊ธฐ๋ณธ ๋๊ตฌ ๋ชจ์ ๊ตฌ์ฑ๊ธฐ
๊ธฐ๋ณธ ํด๋ฐ ๊ตฌ์ฑ๊ธฐ๋ ํธ์ง๊ธฐ ํด๋ฐ๋ฅผ ์ ๋ ฌํ๋ ๋ฐ ๊ถ์ฅ๋๋ ๋ฐฉ์์ธ 'ํด๋ฐ ๊ทธ๋ฃน' ๋ฐฉ์์ ์ฌ์ฉํฉ๋๋ค. ์์ชฝ ๋ฐ ์๋์ชฝ ํ์ดํ๋ฅผ ํด๋ฆญํ์ฌ ํด๋ฐ ๊ทธ๋ฃน์ ์์๋ฅผ ์์ ํ๊ณ , ํ์ธ๋์ ์ ํํ๊ฑฐ๋ ์ ํ ์ทจ์ํ์ฌ ๋ฒํผ ํ์ ์ฌ๋ถ๋ฅผ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค. 'ํ ๊ตฌ๋ถ ๊ธฐํธ ์ถ๊ฐ' ๋ฒํผ์ ์ฌ์ฉํ์ฌ ์ ํด๋ฐ ํ์ ๋ง๋ญ๋๋ค.
ํด๋ฐ ์ค์ ์ด ๋ง์์ ๋ค๋ฉด 'ํด๋ฐ ์ค์ ๊ฐ์ ธ์ค๊ธฐ' ๋ฒํผ์ ํด๋ฆญํ์ฌ ์์ฑ๋ ํด๋ฐ ์ค์ ์ ํ์ธํ ์ ์์ต๋๋ค. ์ ํด๋ฐ ์ฝ๋๋ฅผ ํธ์ง๊ธฐ ์ค์ ์ ์ถ๊ฐํฉ๋๋ค. ๋ค๋ฅธ ์ค์ ์ต์ ์ ์ด๋ฏธ ๋ณ๊ฒฝํ๋ค๋ฉด ๋ ์ค์ ์ ๋ณํฉํ๋ ๊ฒ์ ์์ง ๋ง๊ณ ์ค์ ์ ๋ณ๊ฒฝํ ํ์๋ ๋ฐ๋์ ๋ธ๋ผ์ฐ์ ์บ์๋ฅผ ์ญ์ ํฉ๋๋ค.
๊ณ ๊ธ ๋๊ตฌ ๋ชจ์ ๊ตฌ์ฑ๊ธฐ
CKEditor4 ์ธ์คํด์ค์ ํ์ฌ ํด๋ฐ ๊ตฌ์ฑ์ ์ฌ์ฉํ๋ ์ฝ๋ ํธ์ง๊ธฐ๋ก ์์ํฉ๋๋ค. ์ฝ๋ ํธ์ง๊ธฐ์์ ํด๋ฐ ์ฝ๋๋ฅผ ์ง์ ํธ์งํ ์ ์์ผ๋ฉฐ, ์ ๋ ฅํ๋ ๋์ ํด๋ฐ ๋ฏธ๋ฆฌ๋ณด๊ธฐ๊ฐ ์ค์๊ฐ์ผ๋ก ์ ๋ฐ์ดํธ๋ฉ๋๋ค. ํธ์ง๊ธฐ ๊ตฌ์ฑ์์ ์ฌ์ฉํ์ง ์๋ ํด๋ฐ ํญ๋ชฉ์ ์ค๋ฅธ์ชฝ์ ๋์ด๋์ด ์์ผ๋ฏ๋ก ํ์ํ ๋ ์ฝ๊ฒ ๋ค์ ์ถ๊ฐํ ์ ์์ต๋๋ค.
ํด๋ฐ ์ค์ ์ด ๋ง์์ ๋ค๋ฉด ์ฝ๋ ํธ์ง๊ธฐ์์ ์์ ๋ ํด๋ฐ ๊ตฌ์ฑ์ ๋ณต์ฌํฉ๋๋ค. ์ ํด๋ฐ ์ฝ๋๋ฅผ ํธ์ง๊ธฐ ์ค์ ์ ์ถ๊ฐํ๊ณ ๋ค๋ฅธ ์ค์ ์ต์ ์ ์ด๋ฏธ ๋ณ๊ฒฝํ๋ค๋ฉด ๋ ์ค์ ์ ๋ณํฉํ๋ ๊ฒ์ ์์ง ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ค์ ์ ๋ณ๊ฒฝํ ํ์๋ ๊ธฐ๋ณธ ๋๊ตฌ ๋ชจ์ ์ค์ ๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ๋ธ๋ผ์ฐ์ ์บ์๋ฅผ ๊ผญ ์ญ์ ํฉ๋๋ค.
๐ฏ ๋๊ตฌ ๋ชจ์ ๊ตฌ์ฑ์ ํต์ฌ, config.js ํ์ผ
CKEditor4์ ๋๊ตฌ ๋ชจ์ ๊ตฌ์ฑ์ ์ฃผ๋ก config.js ํ์ผ์์ ์ด๋ฃจ์ด์ง๋๋ค. ํด๋น ํ์ผ์ CKEditor ์ค์น ํด๋ ์์ ์์ผ๋ฉฐ, ์๋ํฐ์ ์ ๋ฐ์ ์ธ ๋์์ ์ค์ ํ๋ ์ค์ํ ํ์ผ์ ๋๋ค.
CKEDITOR.editorConfig = function( config ) { // ์ฌ๊ธฐ์ ํด๋ฐ ์ค์ ์ ์ถ๊ฐํฉ๋๋ค. };โ
1. Toolbar Configurator๋ก ๋ค์ด๊ฐ ์ํ๋ ํด๋ฐ์ ํํ๋ฅผ ๊ตฌ์ฑํฉ๋๋ค. ๊ตฌ์ฑ ํ, ์ค๋ฅธ์ชฝ ์๋จ์ ์๋ 'Get Toolbar config' ๋ฒํผ์ ํด๋ฆญํฉ๋๋ค.
2. ํ์๋ ์์ค๋ฅผ ์ ์ฒด ์ ํ ํ, ๋ณต์ฌํฉ๋๋ค.
3. CKEditor ํด๋ ๋ด, config.js ํ์ผ์ ์ด๊ณ ๋ณต์ฌํ๋ ๋ด์ฉ์ ๋ถ์ฌ๋ฃ์ต๋๋ค.
์๋ฒ๋ฅผ ์คํ ํ, ์ค์ ๋ ํด๋ฐ ํํ๋ฅผ ๋ธ๋ผ์ฐ์ ๋ฅผ ํตํด ํ์ธํฉ๋๋ค.
ToolbarGroups vs Toolbar๋ฅผ ์ด์ฉํ๋ ๋ฐฉ๋ฒ
CKEditor 4์์ ํด๋ฐ๋ฅผ ์ค์ ํ๋ ๋ฐฉ์์ ํฌ๊ฒ toolbarGroups์ toolbar ๋ ๊ฐ์ง๊ฐ ์์ต๋๋ค. ์ด ๋ ๊ฐ์ง ์ค์ ๋ฐฉ์์ ํด๋ฐ์ ๊ตฌ์ฑ๊ณผ ๋ฒํผ์ ๋ฐฐ์น์ ์ ์ฐ์ฑ์ ์ ๊ณตํ์ง๋ง, ๊ฐ๊ฐ์ ํน์ง๊ณผ ์ฌ์ฉ ๋ชฉ์ ์ด ๋ค๋ฆ ๋๋ค.
CKEditor 4๋ ๊ฐ๋ ฅํ WYSIWYG ํธ์ง๊ธฐ๋ก, ์ฌ์ฉ์๊ฐ ํ๋ถํ ํ ์คํธ ํธ์ง ๊ธฐ๋ฅ์ ํ์ฉํ ์ ์๋๋ก ๋ค์ํ ํด๋ฐ ์ค์ ์ ์ง์ํฉ๋๋ค. ํด๋ฐ๋ ํธ์ง๊ธฐ์ ํต์ฌ์ ์ธ ์ฌ์ฉ์ ์ธํฐํ์ด์ค ์์๋ก, ์ฌ์ฉ์๊ฐ ์์ฃผ ์ฌ์ฉํ๋ ๊ธฐ๋ฅ๋ค์ ๋น ๋ฅด๊ฒ ์ ๊ทผํ ์ ์๋๋ก ๋์์ค๋๋ค. CKEditor 4์์ ํด๋ฐ๋ฅผ ๊ตฌ์ฑํ๋ ์ฃผ์ ๋ฐฉ์์ toolbarGroups์ toolbar ๋ ๊ฐ์ง์ด๋ฉฐ, ๊ฐ๊ฐ์ ์ฅ๋จ์ ๊ณผ ์ฌ์ฉ๋ฒ์ ์ดํดํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค.
ToolbarGroups๋?
toolbarGroups๋ ํด๋ฐ์ ๋ฒํผ๋ค์ ๋ ผ๋ฆฌ์ ์ธ ๊ทธ๋ฃน์ผ๋ก ๋ฌถ์ด ๊ด๋ฆฌํ๋ ๋ฐฉ์์ ๋๋ค. CKEditor4๋ ๋ด๋ถ์ ์ผ๋ก ๊ธฐ๋ฅ๋ณ๋ก ๋ฒํผ๋ค์ ๋ฏธ๋ฆฌ ๊ทธ๋ฃนํํด ๋์์ผ๋ฉฐ, toobarGroups ์ค์ ์ ํตํด ์ด๋ค ๊ทธ๋ฃน๋ค์ ํด๋ฐ์ ํฌํจํ ์ง, ๊ทธ๋ฆฌ๊ณ ์ด๋ค ์์๋ก ๋ฐฐ์นํ ์ง๋ฅผ ์ ์ํ ์ ์์ต๋๋ค. ํด๋น ๋ฐฉ์์ ํน์ ๊ธฐ๋ฅ ๊ทธ๋ฃน์ ํต์งธ๋ก ์ถ๊ฐํ๊ฑฐ๋ ์ ์ธํ ๋ ๋งค์ฐ ์ ์ฉํ๋ฉฐ, ํด๋ฐ์ ์ ๋ฐ์ ์ธ ๊ตฌ์ฑ์ ๋น ๋ฅด๊ฒ ๋ณ๊ฒฝํ๊ณ ์ ํ ๋ ์ ํฉํฉ๋๋ค.
์ค์ ๋ฐฉ๋ฒ
toolbarGroups๋ config.js ํ์ผ ๋๋ CKEDITOR.replace(), CKEDITOR.inline() ํธ์ถ ์ ์ค์ ๊ฐ์ฒด ๋ด์์ ์ง์ ํ ์ ์์ต๋๋ค. ๊ฐ ๊ทธ๋ฃน์ ๊ฐ์ฒด ํํ๋ก ์ ์๋๋ฉฐ, name ์์ฑ์ผ๋ก ๊ทธ๋ฃน์ ์ด๋ฆ์ ์ง์ ํ๊ณ groups ์์ฑ์ผ๋ก ํด๋น ๊ทธ๋ฃน์ ํฌํจ๋ ํ์ ๊ทธ๋ฃน ๋๋ ๊ฐ๋ณ ๋ฒํผ์ ์ ์ํ ์ ์์ต๋๋ค.
// config.js ๋๋ CKEDITOR.replace() ์ต์
CKEDITOR.editorConfig = function( config ) {
config.toolbarGroups = [
{ name: 'document', groups: [ 'mode', 'document', 'doctools' ] },
{ name: 'clipboard', groups: [ 'clipboard', 'undo' ] },
{ name: 'editing', groups: [ 'find', 'selection', 'spellchecker', 'editing' ] },
{ name: 'links' },
{ name: 'insert' },
{ name: 'forms' },
{ name: 'tools' },
{ name: 'others' },
{ name: 'basicstyles', groups: [ 'basicstyles', 'cleanup' ] },
{ name: 'paragraph', groups: [ 'list', 'indent', 'blocks', 'align', 'bidi', 'paragraph' ] },
{ name: 'styles' },
{ name: 'colors' },
{ name: 'about' }
];
};
์ ์์๋ ๊ธฐ๋ณธ์ ์ธ ํด๋ฐ ๊ทธ๋ฃน ๊ตฌ์ฑ์ ๋ณด์ฌ์ค๋๋ค. ๊ฐ ๊ทธ๋ฃน ๊ฐ์ฒด๋ name ์์ฑ์ ํ์๋ก ๊ฐ์ง๋ฉฐ, groups ์์ฑ์ ํตํด ํด๋น ๊ทธ๋ฃน ๋ด์ ์ธ๋ถ ๊ทธ๋ฃน ๋๋ ๋ฒํผ๋ค์ ์ ์ํ ์ ์์ต๋๋ค. groups ์์ฑ์ ์๋ตํ๋ฉด, ํด๋น name์ ๊ฐ์ง ๊ธฐ๋ณธ ๊ทธ๋ฃน์ ๋ชจ๋ ๋ฒํผ์ด ํฌํจ๋ฉ๋๋ค.
config.toolbarGroups๋ ๋๊ตฌ ๋ชจ์์ ๊ตฌ์ฑํ๋ "๊ทธ๋ฃน"์ ์์๋ฅผ ์ ์ํฉ๋๋ค. ๊ฐ ๊ทธ๋ฃน์ ํน์ ๊ธฐ๋ฅ ๋ฒ์ฃผ์ ์ํ๋ ๋ฒํผ๋ค์ ๋ฌถ์ด๋์ ๋ ผ๋ฆฌ์ ์ธ ๋จ์์ ๋๋ค.
- document : ๋ฌธ์ ๊ด๋ จ ์์
(์: ์์ค ๋ณด๊ธฐ, ๋ฏธ๋ฆฌ ๋ณด๊ธฐ, ์ ์ฅ, ์ ๋ฌธ์ ๋ฑ)
- ํ์ ๊ทธ๋ฃน : mode, document, doctools - clipboard : ํด๋ฆฝ๋ณด๋ ์์
๋ฐ ๋๋๋ฆฌ๊ธฐ / ๋ค์ ์คํ
- ํ์ ๊ทธ๋ฃน : clipboard, undo - editing : ์ฐพ๊ธฐ, ๋ฐ๊พธ๊ธฐ, ์ ํ, ๋ง์ถค๋ฒ ๊ฒ์ฌ ๋ฑ ํธ์ง ๊ด๋ จ ๊ธฐ๋ฅ
- ํ์ ๊ทธ๋ฃน : find, selection, spellchecker - forms : HTML ํผ ์์ ์ฝ์ (์: ํ ์คํธ ํ๋, ์ฒดํฌ๋ฐ์ค, ๋ผ๋์ค ๋ฒํผ ๋ฑ)
- basicstyles : ๊ธฐ๋ณธ์ ์ธ ํ
์คํธ ์คํ์ผ (์: ๊ตต๊ฒ, ๊ธฐ์ธ์, ๋ฐ์ค, ์ทจ์์ ๋ฑ)
- ํ์ ๊ทธ๋ฃน : basicstyles, cleanup (ํฌ๋งท ์ ๊ฑฐ) - paragraph : ๋จ๋ฝ ์์ (์: ๋ชฉ๋ก, ๋ค์ฌ ์ฐ๊ธฐ / ๋ด์ด ์ฐ๊ธฐ, ์ธ์ฉ, ์ ๋ ฌ, ํ
์คํธ ๋ฐฉํฅ ๋ฑ)
- ํ์ ๊ทธ๋ฃน : list, indent, blocks, align, bidi - links : ํ์ดํผ๋งํฌ ๊ด๋ จ ๊ธฐ๋ฅ (์: ๋งํฌ ์ฝ์ / ์ ๊ฑฐ, ์ต์ปค)
- insert : ๋ค์ํ ๊ฐ์ฒด ์ฝ์ (์: ์ด๋ฏธ์ง, ํ, ๊ฐ๋ก์ค, ํน์ ๋ฌธ์, ์ด๋ชจํฐ์ฝ, ํ์ด์ง ๋๋๊ธฐ, iframe ๋ฑ)
- styles : ์คํ์ผ ์ ์ฉ (์: ๋จ๋ฝ ์คํ์ผ, ๊ธ๊ผด, ๊ธ๊ผด ํฌ๊ธฐ)
- colors : ํ ์คํธ ์์ ๋ฐ ๋ฐฐ๊ฒฝ์
- tools : ์ ์ฉํ ๋๊ตฌ (์: ์ต๋ํ, ๋ธ๋ก ํ์ ๋ฑ)
- others : ๊ธฐํ ๊ธฐ๋ฅ
- about : CKEditor ์ ๋ณด
์ฐธ๊ณ
- ' / ' : ์ด ๊ธฐํธ๋ฅผ toolbarGroups ๋ฐฐ์ด ์์ ๋ฃ์ผ๋ฉด ํด๋น ์์น์์ ๋๊ตฌ ๋ชจ์์ด ์๋ก์ด ์ค๋ก ๋๋ฉ๋๋ค.
- ์ ๊ทธ๋ฃน๋ค์ CKEditor์ 'Full' ๋น๋์ ์ผ๋ฐ์ ์ผ๋ก ํฌํจ๋ ๊ทธ๋ฃน๋ค์ ๋๋ค. ์ฌ์ฉ ์ค์ธ CKEditor ๋น๋๋ ์ค์น๋ ํ๋ฌ๊ทธ์ธ์ ๋ฐ๋ผ ๋ชฉ๋ก์ด ๋ฌ๋ผ์ง ์ ์์ต๋๋ค.
Toolbar๋?
toolbar๋ ํด๋ฐ์ ํ์๋ ๊ฐ๋ณ ๋ฒํผ๋ค์ ์ง์ ๋์ดํ์ฌ ๊ตฌ์ฑํ๋ ๋ฐฉ์์ ๋๋ค. ์ด ๋ฐฉ์์ toolbarGroups๋ณด๋ค ๋ ์ธ๋ฐํ ์ ์ด๋ฅผ ๊ฐ๋ฅํ๊ฒ ํ๋ฉฐ, ํด๋ฐ์ ๊ฐ ๋ฒํผ์ ์ํ๋ ์์์ ์์น์ ์ ํํ ๋ฐฐ์นํ ์ ์์ต๋๋ค. ํน์ ๋ฒํผ๋ง ์ถ๊ฐํ๊ฑฐ๋ ์ ์ธํ๊ณ ์ถ์ ๋, ๋๋ ํด๋ฐ์ ๋ ์ด์์์ ์์ ํ ์ปค์คํฐ๋ง์ด์งํ๊ณ ์ถ์ ๋ ์ ์ฉํฉ๋๋ค.
์ค์ ๋ฐฉ๋ฒ
toolbar๋ ๋ง์ฐฌ๊ฐ์ง๋ก config.js ํ์ผ ๋๋ CKEDITOR.replace(), CKEDITOR.inline() ํธ์ถ ์ ์ค์ ๊ฐ์ฒด ๋ด์์ ์ง์ ํ ์ ์์ต๋๋ค.
// config.js ๋๋ CKEDITOR.replace() ์ต์
CKEDITOR.editorConfig = function( config ) {
config.toolbar = [
{ name: 'document', items: [ 'Source', '-', 'Save', 'NewPage', 'Preview', 'Print', '-', 'Templates' ] },
{ name: 'clipboard', items: [ 'Cut', 'Copy', 'Paste', 'PasteText', 'PasteFromWord', '-', 'Undo', 'Redo' ] },
{ name: 'editing', items: [ 'Find', 'Replace', '-', 'SelectAll', '-', 'Scayt' ] },
{ name: 'forms', items: [ 'Form', 'Checkbox', 'Radio', 'TextField', 'Textarea', 'Select', 'Button', 'ImageButton', 'HiddenField' ] },
'/', // ๋ค์ ์ค๋ก ์ด๋
{ name: 'basicstyles', items: [ 'Bold', 'Italic', 'Underline', 'Strike', 'Subscript', 'Superscript', '-', 'RemoveFormat' ] },
{ name: 'paragraph', items: [ 'NumberedList', 'BulletedList', '-', 'Outdent', 'Indent', '-', 'Blockquote', 'CreateDiv', '-', 'JustifyLeft', 'JustifyCenter', 'JustifyRight', 'JustifyBlock', '-', 'BidiLtr', 'BidiRtl', 'Language' ] },
{ name: 'links', items: [ 'Link', 'Unlink', 'Anchor' ] },
{ name: 'insert', items: [ 'Image', 'Flash', 'Table', 'HorizontalRule', 'Smiley', 'SpecialChar', 'PageBreak', 'Iframe' ] },
'/', // ๋ค์ ์ค๋ก ์ด๋
{ name: 'styles', items: [ 'Styles', 'Format', 'Font', 'FontSize' ] },
{ name: 'colors', items: [ 'TextColor', 'BGColor' ] },
{ name: 'tools', items: [ 'Maximize', 'ShowBlocks' ] },
{ name: 'others', items: [ 'About' ] }
];
};
์ ์์๋ toolbar ์์ฑ์ ์ฌ์ฉํ์ฌ ํด๋ฐ์ ํฌํจ๋ ๊ฐ๋ณ ๋ฒํผ๋ค์ ๋ช ์์ ์ผ๋ก ๋์ดํ ๊ฒ์ ๋๋ค. ๊ฐ ๊ฐ์ฒด๋ name ์์ฑ์ผ๋ก ๊ทธ๋ฃน์ ์ด๋ฆ์ ์ง์ ํ๊ณ , items ์์ฑ์ผ๋ก ํด๋น ๊ทธ๋ฃน์ ์ํ ๋ฒํผ๋ค์ ๋ฐฐ์ด์ ์ ์ํฉ๋๋ค. '/'๋ฅผ ์ฌ์ฉํ์ฌ ํด๋ฐ์ ์ค ๋ฐ๊ฟ์ ์ ์ฉํ ์ ์์ผ๋ฉฐ, '-'๋ฅผ ์ฌ์ฉํ์ฌ ๊ทธ๋ฃน ๋ด์์ ๊ตฌ๋ถ์ ์ ์ถ๊ฐํ ์ ์์ต๋๋ค.
config.toolbar๋ ๊ฐ ๊ทธ๋ฃน ๋ด์ ํ์๋ ๋ฒํผ์ ์์์ ์ข ๋ฅ๋ฅผ ๋ช ์์ ์ผ๋ก ์ง์ ํ ๋ ์ฌ์ฉํฉ๋๋ค. ๊ฐ ๋ฒํผ์ ํด๋น ๊ธฐ๋ฅ์ ์ํํ๋ ํ๋ฌ๊ทธ์ธ์ ์ํด ์ ๊ณต๋ฉ๋๋ค.
Document ๊ทธ๋ฃน ๊ด๋ จ
- Source : HTML ์์ค ์ฝ๋ ๋ณด๊ธฐ / ํธ์ง
- Save : ์ ์ฅ (๋ณ๋ ํ๋ฌ๊ทธ์ธ ํ์)
- NewPage : ์ ๋ฌธ์
- Preview : ๋ฏธ๋ฆฌ ๋ณด๊ธฐ
- Print : ์ธ์
- Templates : ํ ํ๋ฆฟ ์ฝ์
Clipboard / Undo ๊ทธ๋ฃน ๊ด๋ จ
- Cut : ์๋ผ๋ด๊ธฐ
- Copy : ๋ณต์ฌ
- Paste : ๋ถ์ฌ ๋ฃ๊ธฐ
- PasteText : ํ ์คํธ๋ก ๋ถ์ฌ ๋ฃ๊ธฐ
- PasteFromWord : Word์์ ๋ถ์ฌ ๋ฃ๊ธฐ
- Undo : ๋๋๋ฆฌ๊ธฐ
- Redo : ๋ค์ ์คํ
Editing ๊ทธ๋ฃน ๊ด๋ จ
- Find : ์ฐพ๊ธฐ
- Replace : ๋ฐ๊พธ๊ธฐ
- SelectAll : ๋ชจ๋ ์ ํ
- Scayt : ์ค์๊ฐ ๋ง์ถค๋ฒ ๊ฒ์ฌ (Spell Check As You Type)
Forms ๊ทธ๋ฃน ๊ด๋ จ
- Form : ํผ ํ๊ทธ ์ฝ์
- Checkbox : ์ฒดํฌ ๋ฐ์ค
- Radio : ๋ผ๋์ค ๋ฒํผ
- TextField : ํ ์คํธ ํ๋
- Textarea : ํ ์คํธ ์์ญ
- Select : ๋๋กญ๋ค์ด ๋ชฉ๋ก
- Button : ๋ฒํผ
- ImageButton : ์ด๋ฏธ์ง ๋ฒํผ
- HiddenField : ์จ๊ฒจ์ง ํ๋
Basic Styles ๊ทธ๋ฃน ๊ด๋ จ
- Bold: ๊ตต๊ฒ
- Italic: ๊ธฐ์ธ์ ๊ผด
- Underline: ๋ฐ์ค
- Strike: ์ทจ์์
- Subscript: ์๋ ์ฒจ์
- Superscript: ์ ์ฒจ์
- RemoveFormat: ์์ ์ ๊ฑฐ
Paragraph ๊ทธ๋ฃน ๊ด๋ จ
- NumberedList: ๋ฒํธ ๋งค๊ธฐ๊ธฐ ๋ชฉ๋ก
- BulletedList: ๊ธ๋จธ๋ฆฌ ๊ธฐํธ ๋ชฉ๋ก
- Outdent: ๋ด์ด ์ฐ๊ธฐ
- Indent: ๋ค์ฌ ์ฐ๊ธฐ
- Blockquote: ์ธ์ฉ ๋ธ๋ก
- CreateDiv: Div ์ปจํ ์ด๋ ์์ฑ
- JustifyLeft: ์ผ์ชฝ ์ ๋ ฌ
- JustifyCenter: ๊ฐ์ด๋ฐ ์ ๋ ฌ
- JustifyRight: ์ค๋ฅธ์ชฝ ์ ๋ ฌ
- JustifyBlock: ์์ชฝ ์ ๋ ฌ
- BidiLtr: ํ ์คํธ ๋ฐฉํฅ ์ผ์ชฝ์์ ์ค๋ฅธ์ชฝ
- BidiRtl: ํ ์คํธ ๋ฐฉํฅ ์ค๋ฅธ์ชฝ์์ ์ผ์ชฝ
- Language: ์ธ์ด ์ค์ (๋ค๊ตญ์ด ์ง์ ํ๋ฌ๊ทธ์ธ ํ์)
Links ๊ทธ๋ฃน ๊ด๋ จ
- Link: ๋งํฌ ์ฝ์ /์์
- Unlink: ๋งํฌ ์ ๊ฑฐ
- Anchor: ์ต์ปค ์ฝ์ /์์
Insert ๊ทธ๋ฃน ๊ด๋ จ
- Image: ์ด๋ฏธ์ง ์ฝ์
- Flash: Flash ์ฝ์
- Table: ํ ์ฝ์
- HorizontalRule: ๊ฐ๋ก์ค ์ฝ์
- Smiley: ์ด๋ชจํฐ์ฝ ์ฝ์
- SpecialChar: ํน์ ๋ฌธ์ ์ฝ์
- PageBreak: ์ธ์์ฉ ํ์ด์ง ๋๋๊ธฐ
- Iframe: IFrame ์ฝ์
- CodeSnippet: ์ฝ๋ ์ค๋ํซ ์ฝ์ (Code Snippet ํ๋ฌ๊ทธ์ธ ํ์)
- Mathjax: ์ํ ๊ณต์ ์ฝ์ (MathJax ํ๋ฌ๊ทธ์ธ ํ์)
- CreatePlaceholder: ํ๋ ์ด์คํ๋ ์ฝ์ (Placeholder ํ๋ฌ๊ทธ์ธ ํ์)
Styles ๊ทธ๋ฃน ๊ด๋ จ
- Styles: CSS ์คํ์ผ ์ ์ฉ (๋๋กญ๋ค์ด)
- Format: ๋จ๋ฝ ํฌ๋งท (์: Normal, Heading 1, Heading 2 ๋ฑ)
- Font: ๊ธ๊ผด ์ ํ (๋๋กญ๋ค์ด)
- FontSize: ๊ธ๊ผด ํฌ๊ธฐ ์ ํ (๋๋กญ๋ค์ด)
Colors ๊ทธ๋ฃน ๊ด๋ จ
- TextColor: ํ ์คํธ ์์
- BGColor: ๋ฐฐ๊ฒฝ ์์
Tools ๊ทธ๋ฃน ๊ด๋ จ
- Maximize: ํธ์ง๊ธฐ ์ต๋ํ/๋ณต์
- ShowBlocks: HTML ๋ธ๋ก ์์ ํ์/์จ๊ธฐ๊ธฐ
- About: CKEditor ์ ๋ณด
์ถ๊ฐ์ ์ธ ๊ธฐํธ
- -: ๊ฐ์ ๊ทธ๋ฃน ๋ด์์ ๋ฒํผ๋ค ์ฌ์ด์ ๊ตฌ๋ถ์ ์ ์ถ๊ฐํฉ๋๋ค.
- '/': toolbar ๋ฐฐ์ด ๋ด์์ ์๋ก์ด ์ค๋ก ๋๊ตฌ ๋ชจ์์ ๋๋๋๋ค.
์์ฃผ ์ฌ์ฉ๋๋ ๋๊ตฌ ๋ชจ์ ๋ฒํผ ๋ชฉ๋ก
- ํ
์คํธ ์์ :
- Bold, Italic, Underline, Strike, RemoveFormat, Styles, Format, Font, FontSize, TextColor, BGColor - ๋จ๋ฝ / ์ ๋ ฌ :
- NumberedList, BulletedList, Outdent, Indent, Blockquote, JustifyLeft, JustifyCenter, JustifyRight, JustifyBlock - ๋งํฌ / ์ฝ์
:
- Link, Unlink, Image, Table, HorizontalRule, Smiley, SpecialChar, Iframe - ๊ธฐํ :
- Source, Maximize, Undo, Redo, Copy, Paste, PasteText, PasteFromWord
โ ๏ธ ์ค์
์ฌ๊ธฐ์ ์๋ ๋ฒํผ์ ์ถ๊ฐํ๊ณ ์ถ๊ฑฐ๋, ํน์ ๋ฒํผ์ด ์๋ํ์ง ์๋๋ค๋ฉด, ํด๋น ๋ฒํผ์ด ํฌํจ๋ ํ๋ฌ๊ทธ์ธ์ด CKEditor ๋น๋์ ํฌํจ๋์ด ์๋์ง ํ์ธํด์ผ ํฉ๋๋ค. (์:CodeSnippet ๋ฒํผ์ ์ฌ์ฉํ๋ ค๋ฉด codesnippet ํ๋ฌ๊ทธ์ธ์ด ์์ด์ผ ํจ)
ํน์ ์๋ํฐ ์ธ์คํด์ค์๋ง ๋ค๋ฅธ ํด๋ฐ ์ ์ฉํ๊ธฐ
CKEditor4 ์ค์ ํ์ผ์ธ config.js ๋ ์ ์ญ ์ค์ ์ด์ง๋ง, ๋ง์ฝ ํน์ <textarea>์๋ง ๋ค๋ฅธ ๋๊ตฌ ๋ชจ์์ ์ ์ฉํ๊ณ ์ถ๋ค๋ฉด, CKEDITOR.replace() ๋๋ CKEDITOR.inline() ํธ์ถ ์ ์ค์ ๊ฐ์ฒด๋ฅผ ์ ๋ฌํ ์ ์์ต๋๋ค.
// HTML ์ฝ๋
// <textarea id="editor1"></textarea>
// <textarea id="editor2"></textarea>
// JavaScript ์ฝ๋
CKEDITOR.replace('editor1', {
toolbar: [
{ name: 'basicstyles', items: [ 'Bold', 'Italic' ] },
{ name: 'links', items: [ 'Link' ] }
]
});
CKEDITOR.replace('editor2', {
toolbar: [
{ name: 'document', items: [ 'Source' ] },
{ name: 'insert', items: [ 'Image', 'Table' ] }
]
});
editor1์ ๊ฐ๋จํ ํด๋ฐ๋ฅผ ๊ฐ์ง๊ณ , editor2๋ ๋ค๋ฅธ ํด๋ฐ๋ฅผ ๊ฐ์ง๊ฒ ๋ฉ๋๋ค.
@Junesker