포럼
최근 에디터 컴포넌트 속성이 제거되어 사용이 제대로 되지 않는 분들 참고하세요..!
2014.08.05 12:40
리퍼러 애드온을 끄면 해결됩니다.
정확한 원인은 모르겠으나, 리퍼러 애드온(이나 모듈) 쪽에서 간섭이 있나 봅니다.
체크해보니 리퍼러 애드온을 끈 상태에서 editor_component와 같은 임의 속성이 무사히 전달됩니다.
우선 가장 빠른 해결 방법은 해당 애드온을 끄는 것이니 참고하기 바랍니다.
@큰돌 님 혹시 리퍼러 모듈에서 본문을 제어하는 부분이 있나요? 일단 해당 이슈가 있는 듯 하여 알림차원에서 멘션을 보냅니다.
구 버전에선 문제가 없었습니다.(최근 업뎃 전)
댓글 13
-
몽실아빠
2014.08.05 13:57
-
큰돌♡
2014.08.06 00:59
수정한 버전을 게시했습니다. 불편을 드려 죄송합니다. -
애니즌
2014.08.06 01:24
아닙니다 ㅎㅎ 덕분에 잘 사용하고 있습니다.
수정해주셔서 감사합니다:)
-
몽실아빠
2014.08.06 09:05
수정한 애드온 설치후 다른문제도 해결되었습니다. 감사합니다.
-
애니즌
2014.08.06 10:24
@큰돌♡ 님 확인해보니까 마찬가지로 컴포넌트가 작동되지 않습니다.
해당 애드온 코드를 분석하던 중 문제인 부분을 찾았습니다.
23번 째 줄에
$uagent = removeHackTag($_SERVER["HTTP_USER_AGENT"]);
이 부분에 removeHakTag()를 쓰신 게 문제인 것 같습니다.이 것을 주석처리하면 문제 없이 작동합니다...
즉, removeHackTag($content)로 돌 때 editor_component 속성이 있으면 기타 임의 속성을 살려주는데
다시한번 removeHackTag()가 돌면서 기존에 살려둔 코드를 날려버리는 것 같습니다.
당연히 $_SERVER["HTTP_USER_AGENT"]에는 editor_component 속성이 없으니까요...
따라서 removeHackTag()를 사용하려면 글이 입력되는 시점은 예외처리하셔야 할 듯 합니다.
//글을 입력하는 경우 종료. if(Context::get('act') == 'procBoardInsertDocument' || Context::get('act') == 'procBoardInsertComment') return; // called_position가 before_module_init 이고 module이 admin이 아닐 경우 if($called_position == 'before_module_init' && Context::get('module') != 'admin' && !$GLOBALS['__referer_addon_called__'] && ($addon_info->include_direct_access == "yes" || !empty($_SERVER["HTTP_REFERER"]))) {
아니면 called_position의 시점을 변경하는 것도 한 방법입니다.
// called_position가 before_module_init 이고 module이 admin이 아닐 경우
if($called_position == 'after_module_porc' && Context::get('module') != 'admin' && !$GLOBALS['__referer_addon_called__']
&& ($addon_info->include_direct_access == "yes" || !empty($_SERVER["HTTP_REFERER"])))
{그렇지만 그냥 글쓰기 입력 부분을 예외처리하는 게 나을 것 같습니다.
-
큰돌♡
2014.08.06 15:01
어떤 컴포넌트와 문제가 생기는 건가요? 좀더 정확하게 디버깅을 해봐야 겠네요. -
애니즌
2014.08.06 15:06
editor_component="" 속성을 삽입하는 모든 애드온에서 발생합니다.
구글, 유튜브, 이미지 링크, 멀티미디어 등등...
다만 이미지링크와 멀티미디어는 해당 속성이 없을 경우 강제로 코드가 삽입되게 되어 있어 다시 재 삽입이 되긴 합니다.
단, 관리자 권한이 있을 경우 content에서 removeHackTag()를 거치지 않기 때문에..
관리 권한이 없는 회원이나 비회원에게서 발생합니다.
제가 개인적으로 판단하기로는..
removeHackTag()를 사용하면
./clesses/security/Purifier.class.php에서
_setDefinition() 함수를 거치는데
지금 시점이 init이니까
가장 먼저 HTMLPurifier 객체가 생성이 되는데
그 이후로 생성되는 건 pass되거나 배열로 인식해서 두개의 객체가 생성되는 것 같습니다.
그렇기 때문에 정작 글쓰기 값을 입력할 때 _searchEditComponent()을 통해 editor_component 속성이 있을 경우 기타 속성을 다 살려주는데 이전에 사용하여 생성된 객체에서는 그런 값을 허용안함으로 되어 무시되는게 아닌가 싶습니다.
전문적인 개발지식이 있는 것은 아니라 추정이긴 합니다만
제가 디버깅했을 때는 두개의 객체가 생성되어 있더군요..
-
몽실아빠
2014.08.06 15:08
엇... 그렇군요. 전 테스트를 하지 않았는데 일단 리러퍼애드온 비활성화 해야겠네요.
-
애니즌
2014.08.06 15:14
아래처럼 코드를 추가하시면 문제없이 사용 가능합니다.
//글을 입력하는 경우 종료. if(Context::get('act') == 'procBoardInsertDocument' || Context::get('act') == 'procBoardInsertComment') return; // called_position가 before_module_init 이고 module이 admin이 아닐 경우 if($called_position == 'before_module_init' && Context::get('module') != 'admin' && !$GLOBALS['__referer_addon_called__'] && ($addon_info->include_direct_access == "yes" || !empty($_SERVER["HTTP_REFERER"]))) {
하이라이팅된 12,13째 줄 내용을 12번째줄 앞에 추가
-
큰돌♡
2014.08.06 16:34
일단 애드온에서 removeHackTag()를 호출하지 않도록 수정해서 게시했습니다.그런데, 어떻게 removeHackTag($_SERVER["HTTP_USER_AGENT"]) 코드가 에디터 내용을 건드리는지 이해가 안 되네요. ^^a -
애니즌
2014.08.06 16:52
저도 당황스럽긴 한데요..
쉽게 말씀드리면.. removeHackTag()는 content 전용으로 만들어진 것 같고...
따라서 글 을 인서트나 업데이트 할 때 한번만 실행되야 하는 것 같습니다.
removeHackTag()을 지우지 않은 상태에서 해보시면 아시겠지만 <img 태그에 있는 editor_component="image_link" 라는 값 또한 지워집니다..ㄷㄷ
물론 글 수정을 하거나 하면 다시 생기는 것 처럼 보이지만 db에서 보면 아예 editor_component 값을 날려버리더라구요..(즉 임의속성 빠빠잉..)
개발자가 아닌 저로서는 자세한 구조까지는 모르겠지만....
결론 적으로 말씀드리면 어쨌거나.. 글이 입력되는 시점에서는 한 번만 사용하거나 글 입력 이후에 실행되어야 문제가 없는 듯 합니다.
-
큰돌♡
2014.08.06 17:02
애드온 v3.3.3은 정상적으로 되는지 확인 부탁드릴게요.
-
애니즌
2014.08.06 17:14
정상적으로 작동됩니다 ^^ 빠른 응대 감사합니다.
@큰돌♡ 자료실에 포럼 댓글로 다른 한가지 이슈도 남겨 놓았습니다. 요 에디터 문제도 저도 동일하겨 겪었구요. 최근 우연치 않게 다른이슈로 리퍼러모듈을 사용을 해제하면서 에디터문제가 해결되면서 확인하게 되었습니다.