Q&A

CMS/프레임워크 Rhymix 2.1
개발 언어 PHP 8.3

image.png

 

먼저 게시판 스킨을 제작 중이고 _comment.html 를 제작중에 있습니다.

 

새고로침 없는 댓글로 AJAX로 댓글을 쓰고나면 에디터가 반절만 뜨는 증상이 있는데


사진 및 파일첨부 만뜨고 실제 텍스트 입력창은 공백으로 뜹니다.

 

DOM 및 CKEditor 초기화 문제같기도하구요

 

 

 

근데 그냥 ajax 새로고침 아닌 #댓글 주소로 전페이지 새로고침하여 이동하면 에디터 텍스트 토글이 정상입니다.

 

분명 좋은 방법이 있을것 같은데 아무리 고군분투해봐도 반쪽만 뜹니다.

 

다른 판매용 스킨에서도  에디터 텍스트 토글을 외부 페이지에서 하네요

 

혹시 좋은 방법이 있을까요?

톰캣 Lv. 11
시대의 흐름에 뒤떨어지지 않도록 아주 천천히지만 노력하고 있습니다.

댓글 6

  • 4시간 전 #1913587

    오류가 있다면 개발자도구 콘솔에 뜨겠죠?

  • 3시간 전 #1913592

    GET http://도메인/common/js/respond.min.js net::ERR_ABORTED 404 (Not Found)Understand this error
    632:1 Refused to execute script from 'http://도메인/common/js/respond.min.js' because its MIME type ('text/html') is not executable, and strict MIME type checking is enabled.

    해당에러가 떠있지만 해당에러와는 무관해 보입니다.
    댓글화면아닌곳에서도 뜨는 에러라서요

     

    위에러는 /layouts/default 스킨에서 


    <load target="../../common/js/respond.min.js" targetie="lt IE 9" />

    를 제거해줬더니 사라졌습니다.

     

    공개하면 검색엔진 노출되고 해서 사이트를 공개하기가 좀 그래서요. 쪽지로 전달은 드릴 수 있지만 라이믹스 정책에 위배된것으로 알고있어서 조심스럽네요.

    그외 찍히는 로그는 아래와 같습니다.

     

    image.png

  • 3시간 전 #1913603

    에러가 없다면 둘 중 하나겠네요. 1) 에디터가 정상적으로 초기화되었지만, 님이 원하는 위치가 아닌 다른 요소에 가서 붙었거나 2) 아예 초기화하려고 시도하지도 않았거나...

     

    새로고침 없이 이것저것 하다 보면 한 페이지에 여러 개의 에디터가 등장할 수도 있고, 기존에 있던 에디터를 DOM에서 제거하고 다른 곳에 동적으로 생성하는 상황도 있을 것 같습니다. 두 가지 시나리오 모두 현재 라이믹스에서는 정상 작동을 보장하기 어려운 상황입니다. 페이지 로딩 직후 1회, 1개의 에디터를 초기화한다고 가정하는 부분이 많기 때문입니다. 새로고침하지 않으면 시퀀스 값도 중복될 수 있고요. 문제가 될 만한 구조를 점진적으로 개선하고 있지만 아직 완전하지 않습니다.

  • 3시간 전 #1913610

    영상으로 녹화 해보았습니다.

    파일용량이 724kb이나 되니 보신 이후 삭제해 주셔도 됩니다. 

     

    댓글 적어주신것들을 고려하여 comment 전체부분을 ajax로 새로고침 되게영역 설정을 하긴해도 마찬가지라서

    답변 주신 것 처럼 아직은 불 완전 할 수 있다면 다음을 노려봐야겠네요!

     

    감사합니다.

     

    스크린 캡처_20250804_193042.zip

  • 3시간 전 #1913618

    네, 꼭 댓글 작성 후가 아니더라도 한 화면에서 텍스트 모드와 에디터 모드를 왔다갔다하다 보면 에디터가 정상적으로 로딩되지 않거나, 로딩은 되었지만 엉뚱한 editor_sequence에 가서 붙을 수도 있습니다. 그래서 웬만하면 별도의 화면으로 넘기거나, 이곳 공홈처럼 iframe으로 처리하는 것이 안전합니다. (공홈은 댓글 작성 후 새로고침을 해버리는데, 이건 그냥 댓글 영역을 다시 로딩하기 귀찮아서 그렇고;;; 에디터 때문은 아닙니다.)

  • 3시간 전 #1913599

    function refreshComments(ret_obj) {
        if (ret_obj.error !== 0) {
            alert(ret_obj.message || '댓글 등록 중 오류가 발생했습니다.');
            return;
        }

        const commentSrl = ret_obj['comment_srl'] || ret_obj?.data?.comment_srl;

        jQuery('.bbs_comments').load(window.location.href + ' .bbs_comments > *', function () {
            
            // 댓글 스크롤 이동
            if (commentSrl) {
                const target = document.getElementById(`comment_${commentSrl}`);
                if (target) {
                    target.scrollIntoView({ behavior: 'smooth', block: 'start' });
                }
            } else {
                document.querySelector('.bbs_comments')?.scrollIntoView({ behavior: 'smooth', block: 'end' });
            }
        });

        clearComment();
    }

    위코드가 작동이 안되어서

     

     

     

    AI의 도움을 받아 이렇게 아래처럼 해보아도 안되고 

    function refreshComments(ret_obj) {
        if (ret_obj.error !== 0) {
            alert(ret_obj.message || '댓글 등록 중 오류가 발생했습니다.');
            return;
        }

        const commentSrl = ret_obj['comment_srl'] || ret_obj?.data?.comment_srl;

        jQuery('.bbs_comments').load(window.location.href + ' .bbs_comments > *', function () {
            
            // 기존 에디터 제거
            if (typeof xeEditorFactory !== 'undefined' && typeof xeEditorFactory.destroyAll === 'function') {
                xeEditorFactory.destroyAll();
            }

            // 새로 불러온 영역에 에디터 다시 초기화
            if (typeof xeEditorFactory !== 'undefined' && typeof xeEditorFactory.load === 'function') {
                xeEditorFactory.load();
            }

            // CKEditor 인스턴스가 제대로 안 뜨는 경우를 대비한 보조 처리
            if (typeof CKEDITOR !== 'undefined') {
                // 아직 replace 되지 않은 div.rx_ckeditor 항목 찾아서 초기화
                document.querySelectorAll('div.rx_ckeditor').forEach(editorDiv => {
                    const seq = editorDiv.dataset.editorSequence;
                    if (!CKEDITOR.instances[`xe_editor_${seq}`]) {
                        // Rhymix의 CKEditor 기본 초기화 함수가 존재할 경우
                        if (typeof xeEditorFactory !== 'undefined' && xeEditorFactory.load) {
                            xeEditorFactory.load();
                        }
                    }
                });
            }

            // 댓글 스크롤 이동
            if (commentSrl) {
                const target = document.getElementById(`comment_${commentSrl}`);
                if (target) {
                    target.scrollIntoView({ behavior: 'smooth', block: 'start' });
                }
            } else {
                document.querySelector('.bbs_comments')?.scrollIntoView({ behavior: 'smooth', block: 'end' });
            }
        });

        clearComment();
    }