안녕하세요.. 예전에 동일한 제목으로 질문을 올려드렸습니다.
아직 해결을 못했기에 조그마한 팁을 주시면 감사하겠습니다.ㅜㅜㅜㅜㅜ
저의 목표는
댓글란의 에디터는 본문에디터와 다르게, 좀더 작은 사이즈의 사진만 올라오도록 값을 달리하여 리사이징되도록 하는것입니다.
*현재 업로드 버튼을 눌러서 이미지 업로드하는 리사이징 크기 조정은 성공하였습니다.
****하지만, 에디터 텍스트 범위내에 이미지를 붙여넣을때 나타나는 리사이징 크기 조정 구현은 실패하고있습니다.
제가 시도한 방법은 다음과 같습니다.
1. 실패) 에디온 작성 ( 파일업로드 이벤트를 가로채서 커스텀 업로드 로직을 구현 , 후킹에는 성공하나, 원하는 사이즈로 리사이징 실패.. )
2. 실패) modules/file/file.controller.php / 의 코어파일 수정 ( 댓글용 class에 따른 다른크기의 리사이징 )
[참조] 게시글과 댓글란의 서로다른 사진 업로드 크기 조정에 대해서
https://xetown.com/questions/1838003
제가 파악한 사진 리사이징 로직정보는 다음과같습니다. (만약에 제 인식이 틀렸다면 지적부탁드립니다.)
1. /modules/file/tpl/upload_config.html 및 /modules/file/tpl/file_module_config.html 파일에서 관리자가 max_image_width 값을 입력하고 제출합니다. 예를 들어, 500을 입력할 수 있습니다.
2. /modules/file/file.admin.controller.php에 제출된 max_image_width 값을 받아와 $config->max_image_width에 저장합니다. 이 과정에서 Context::get() 함수를 사용하여 입력된 값을 가져옵니다.
3. /modules/file/file.controller.php에서 $config->max_image_width 값을 호출하여 이미지 리사이징 로직에서 사용합니다.
4. common/js/plugins/jquery.fileupload/js/main.js는 에디터에 붙여넣기를 할때 이미지 HTML을 생성합니다.
if (filename.match(/\.(gif|jpe?g|png|webp)$/i) && opt.autoinsertTypes.image) {
temp_code = self.generateHtml($container, result);
}
....
html = '<img src="' + file.download_url + '" alt="' + file.source_filename + '"'
+ ' editor_component="image_link" data-file-srl="' + file.file_srl + '" />';
....
editor.insertHtml(html, 'unfiltered_html');
5. modules/editor/skins/ckeditor/js/editor.js * Legacy function to get the container element for CKEditor.
function _getCkeContainer(editor_sequence) {
return $('#ckeditor_instance_' + editor_sequence);
}
리사이징 프로세스는 다음과 같이 작동할 것으로 추정됩니다:
1. 에디터에서 사용자가 이미지를 업로드하거나 붙여넣기 합니다.
2. 이미지는 서버로 전송됩니다.
3. file.controller.php에서 이미지 을 처리합니다:
설정된 max_image_width와 비교하여 이미지 크기를 확인합니다.
필요한 경우 이미지를 리사이징합니다.
4. 리사이징된 이미지를 저장하고 URL을 반환합니다.
5. 클라이언트 측 스크립트 (예: main.js)는 서버에서 반환된 URL을 사용하여 이미지를 에디터에 삽입합니다.
CKEditor는 이 과정에서 직접적으로 리사이징을 수행하지 않고, 대신 서버에서 처리된 이미지를 받아 표시하는 역할을 합니다.
이것을 토대로, ckeditor_comment라는 스킨을 따로 생성해서, 클래스는 다음과 같이 바꾸었습니다.
기존 class="rx_ckeditor"
댓글용 class="rx_ckeditor_comment"
잘 부탁드립니다. ㅜㅜ
애드온 작성이 정석인데, 어디에서 막히던가요?
1. 업로드한 파일을 처리하기 전, 즉 before_module_proc 시점에 끼어듭니다.
2. 현재 act가 procFileUpload인지 확인합니다. 아니면 리턴~
$current_act = Context::get('act');
if ($current_act !== 'procFileUpload') {
return;
}
3. 파일 업로드 대상이 댓글인지 확인합니다. 아니면 리턴~
$editor_sequence = Context::get('editor_sequence');
if ($_SESSION['upload_info'][$editor_sequence]->upload_target_type !== 'com') {
return;
}
4. 파일 모듈 설정을 불러와서 조작합니다.
$config = ModuleModel::getModuleConfig('file');
$config->max_image_width = 400;
$config->max_image_height = 300;
이렇게 해놓으면 file.controller.php에서 사진을 리사이즈할 때
님이 조작해 놓은 설정을 불러와서 작업하겠죠?
님이 직접 사진을 리사이즈할 필요가 전혀 없습니다.
임시로 설정을 바꿔놓기만 하면, 나머지는 file.controller.php에서 알아서 하니까요.