포럼
page_full_width" class="col-xs-12" |cond="$__Context->page_full_width">
XE의 황당한 class명 에러... (수정 요망)
2011.01.26 13:00
class명 중에
다른 이름은 다 문제가 없는데... 진짜 어의없는 경우에 에러라는 경고문이 뜬다.
forhanbi_3 즉 이렇게 마지막에 "_"넣고 숫자를 넣은 class명 상태에서 해당 class명 구역 위를 클릭하면
이런 경고문이 뜬다.
그런데
forhanbi-3,
for_hanbi_3(숫자 전에 "_"를 사용했을 경우),
forhan_bi
와 같은 경우에는 에러가 발생하지 않는다...
forhanbi_3 경우에만 에러를 유발시키는 이유가 뭔지...
특별한 이유가 없다면(없어 보임) 수정해 줬으면 합니다.
다른 이름은 다 문제가 없는데... 진짜 어의없는 경우에 에러라는 경고문이 뜬다.
forhanbi_3 즉 이렇게 마지막에 "_"넣고 숫자를 넣은 class명 상태에서 해당 class명 구역 위를 클릭하면
Fatal error: Call to a member function getVariables() on a non-object in D:\APM_Setup\htdocs\ngo\classes\display\XMLDisplayHandler.php on line 10
이런 경고문이 뜬다.
그런데
forhanbi-3,
for_hanbi_3(숫자 전에 "_"를 사용했을 경우),
forhan_bi
와 같은 경우에는 에러가 발생하지 않는다...
forhanbi_3 경우에만 에러를 유발시키는 이유가 뭔지...
특별한 이유가 없다면(없어 보임) 수정해 줬으면 합니다.
댓글 21
-
ForHanbi
2011.01.26 13:04
이것 때문에 놀란 가슴에 1시간 날려 먹었음.... -
ForHanbi
2011.01.26 13:13
내용 수정했습니다.
아무래도 올린글이 잘못된거 같아서 다시 실험을 해 봤고 문제는 위와같은 클라스명을 사용한 공간에 클릭을 하면 에러라는 경고문이 뜹니다.
-
Hammer
2011.01.26 14:24
분명히 이런 에러가 발생을 하긴 합니다. 헌데 발생하는 조건 찾기가 참 힘들군요. 저는 IE6의 경우에만 발생을하고, 또 숫자 클래스명이 붙은 영역의 모든 곳에서 에러가 나는 것이 아니라 그 클래스가 품고 있는 다른 클래스의 하단 영역에만 발생한다던지. 아무튼 에러가 발생하는 스팟 지역이 요상합니다.
어쨌든간에 클래스 뒤에 숫자가 오는 경우에 에러가 발생하는 것은 분명한 것 같습니다. 잘 찾아 주셨네요. 제대로 이슈에 등록이 되어야 할 것 같습니다. -
ForHanbi
2011.01.26 15:12
div, span, a 에서만 발생하더군요. -
SMaker
2011.01.26 14:32
예전부터 발생하던 버그입니다.
정확한 원인을 찾아야 해결이 빨리 될텐데 말이죠. -
misol
2011.01.26 14:46
어떻게 하면 재현되나요?? 템플릿 문법으로 클래스 불러오면 되나요? -
ForHanbi
2011.01.26 14:50
아뇨 그냥 html에 class명이 위와같은 형태로 되어 있으면 되고요.
제가 테스트 했을땐 어떤 주변상황에 상관없이 어떤 위치에 있던 크롬과 파폭에서 에러 표시를 날려주고 있습니다.
제 보기에는 순수 클라스명에 대한 에러가 아닌가 싶습니다.
단 저런 class명 안에 다른 요소가 있을때 그 요소가 있는 공간을 클릭할때는 에러를 안날리고 있습니다.
즉 순수하게 저런 형태의 class명 공간을 클릭할때만 해당한다고 봐야겠죠. -
misol
2011.01.26 15:02
아하! 뭔지 알겠어요 ㅋㅋ 이 부분, 게시판 글에서 "이 게시글을...." 이라는 부분 클릭하면 나오는 메뉴를 위해 만든 스크립트와 충돌하는 것입니다... 요약 책갈피도 활용하는 부분이라 알겠네요 ㅋㅋ -
misol
2011.01.26 15:05
예를 들어서 <div class="forhanbi_3">여길 눌러봐</div>라고 mid=index페이지에 넣으면<?xml version="1.0" encoding="utf-8" ?>
<methodCall>
<params>
<target_srl><![CDATA[3]]></target_srl>
<cur_mid><![CDATA[index]]></cur_mid>
<mid><![CDATA[index]]></mid>
<cur_act><![CDATA[null]]></cur_act>
<menu_id><![CDATA[forhanbi_3]]></menu_id>
<page_x><![CDATA[47]]></page_x>
<page_y><![CDATA[929]]></page_y>
<module><![CDATA[forhanbi]]></module>
<act><![CDATA[getForhanbiMenu]]></act>
</params>
</methodCall>
이런 식으로 xml메시지를 보냅니다. common.js파일안에 정의된 함수를 이용하는 것이에요.
어떻게 수정될지는 모르겠지만, displayPopupMenu 라고 common/js/common.js파일 안에서 찾아보시면...(최신 버전은 압축되어 보기 힘드니 구버전으로 보셔도 될거같아요.) 대충 그 비슷한 부근 코드로 찾아갑니다;; -
銀童
2011.01.26 15:09
Request 를 보면<?xml version="1.0" encoding="utf-8" ?><methodCall><params><target_srl><![CDATA[3]]></target_srl><cur_mid><![CDATA[MainForum]]></cur_mid><mid><![CDATA[MainForum]]></mid><cur_act><![CDATA[]]></cur_act><menu_id><![CDATA[forhanbi_3]]></menu_id><page_x><![CDATA[1405]]></page_x><page_y><![CDATA[498]]></page_y><module><![CDATA[forhanbi]]></module><act><![CDATA[getForhanbiMenu]]></act></params></methodCall>
이런식으로 날아가게 되는데,
common/js/common.js 에 있는
$(document).click(function(evt) {
// 이전에 호출되었을지 모르는 팝업메뉴 숨김
var area = $('#popup_menu_area');
if(!area.length) return;
으로 시작하는 팝업 메뉴 를 만들기 위한 스크립트에서 충돌하는거 같네요.
exec_xml(module_name, action_name, params, XE.displayPopupMenu, response_tags, params);
서버에 메뉴를 요청하는데 (예를든다면 forhanbe 모듈에 대한)
모듈이 없으니 에러를 뱉어내는게 당연합니다.
검출 루틴이// module명과 대상 번호가 없으면 return
if(!module_name || !target_srl || target_srl < 1) return;
var tmp_arr = menu_id.split('_');
var module_name = tmp_arr[0];
var target_srl = tmp_arr[1];
이런식으로 되어있어서
영문_숫자 형식 ex) eundong_34 면 모두 해당이 되게 되어있더라구요.
저런 확장메뉴가 필요한 부분에 모두 일괄적으로 class 를 주고(예를들면 extend_menu)
초기 jquery 선언 부분을$(document).click(function(evt) {
가 아니라
$('.extend_menu').click(function(evt) {
으로 바꿔두면 쓸데없는 이벤트 감소에도 큰 도움이 되리라고 생각합니다.
근데 왜 저렇게 했을까 하고 이유를 생각해보니
jquery 의 live 가 나오기 전에 만들어진 코드 같고,
js 등으로 생성된 부분에 이벤트가 정상적으로 걸리지 않으니 저런 편법을 쓴거같은데.
그렇다고 해도 조금 뭔가 애매하지 않은가 싶어요. -
銀童
2011.01.26 15:09
댓글 써놨더니 미솔님이 위에 써놨네 ㅠㅠ -
ForHanbi
2011.01.26 15:13
덕분에 이해가 되었습니다. -
misol
2011.01.26 15:14
오류메시지만 끄려면.. 임시 방편으로
./classes/display/XMLDisplayHandler.php
10번째 줄에 $variables = $oModule->getVariables();윗 줄에
if(!is_object($oModule)) return; 를 추가해주면 오류 메시지는 나오지 않아요. 그치만, 해결점을 찾으면 좋겠네요;; -
銀童
2011.01.26 15:16
일단은 해결책은 그냥 영문_숫자 형식의 클래스명을 안쓰시면 될꺼같네요.
아마 다음버전에서는 common.js 가 수정되지 않을까요 '-' -
misol
2011.01.26 15:20
참고로.. 문서들 하단에 나오는 "이 게시물을..." 부분은 <a class="document_19492921 action" href="#popup_menu_area" onclick="return false">이 게시물을...</a> 이렇게 되어 있습니다.
은동님 의견대로 되면 무난할 것 같고, 혹시나 없는 모듈로 호출하더라도 적절하게 XE가 대응 했으면 좋겠어요. -
Garon
2011.01.26 23:28
생각해보건데 미솔님 내공은 대단~ ㅎㅎㅎㅎ -
정찬명
2011.01.27 13:25
이 이슈가 팀에 공유 되었습니다. 아마도 다음 버전에서는 해결이 되겠지요. 고맙습니다. ^^ -
행복한고니
2011.04.07 16:51
#19678731 에서 수정되었습니다. -
8bit
2015.01.08 15:04
Forhanbi님 xemarket에서 Forhanbi님이 판매하시는 상품을 구매하려고 하는데 샘플 페이지 링크가 깨져 있습니다. 좀 보이게 부탁합니다.
-
키스투엑스이
2015.01.08 17:13
Forhanbi님은 현재 공식홈페이지에서 탈퇴된 상태입니다.
다른 루트로 연락하시는게 빠를 것 같네요. -
8bit
2015.01.08 22:09
감사함돠.