before_display_content 호출 시점에

Context::getResponseMethod() == 'HTML' 이라면

 

$output 변수에는 당연히 현재 페이지의 HTML 컨텐츠가 들어 있겠죠?

이걸 문자열 처리 함수로 마음껏 주물러도 되겠죠?

 

No!

 

모듈에 따라서는 $output 변수에 엉뚱한 것이 들어 있는 경우도 종종 있습니다.

예를 들어 모듈 객체가 통째로 들어있다거나... ㅡ.ㅡ;;

 

이럴 때 str_replace 같은 함수로 $output을 조작하게 되면

경고가 나오지만... XE에서 E_WARNING 무시되는 건 모두들 아실 테고요...

그냥 함수 반환값이 빈 문자열이 됩니다.

 

결과는? 공포의 백지현상이죠.

HTML 출력 결과가 빈 문자열로 바뀌어 버리니까요.

 

따라서 HTML 출력 결과를 직접 조작하는 애드온을 개발하신다면

정말로 $output 변수에 문자열이 들어 있는지 확인하는 과정을 거쳐야 합니다.

문자열이 아니라면 괜히 건드리지 말고 포기해야 하고요.

 

if(!is_string($output)) {

    return;

}

 

기진곰

profile
GitHub @kijin 사람을 위한 인터넷 생태계의 발전에 많은 관심을 갖고 있습니다.
우리가 만들어 가는 XE의 새 이름, 라이믹스(Rhymix) 프로젝트에 참여하고 있습니다.
오픈소스 도로명주소 검색서버 및 API Postcodify를 개발, 운영중입니다.
국내외 서버 및 클라우드서버 세팅, 이전, 튜닝해 드립니다.
  • profile
    근데 코어에 들어있는 member_extra_info 애드온 부터 그렇게 되어있지않네요;;
  • profile profile
    안그래도 CONORY님의 socialxe 모듈과 코어의 member_extra_info 애드온 상호작용으로 백지현상이 발생하는 걸 보고 쓴 글입니다. 애드온 호출 시점에 모듈 객체가 그대로 들어가는 것이 모듈의 잘못은 아니겠지만... 시간 있으시면 한번 살펴봐 주세요 ㅠㅠ
  • profile profile
    처음 본 경우인데요.. 테스트하는 동안 그런 문제는 발견한적 없습니다. 신고도 없고요.

    대체 원인이 뭘까요?
  • profile profile
    어딘가의 트리거가 꼬인 것 같다고 추측하고 있습니다. 진짜 원인은 엉뚱한 곳에 있을지도 몰라요. XE의 모듈핸들러도 확 갈아버리고 싶을 만큼 너무나 복잡한 녀석이라...
  • profile profile
    네..디버깅하기가 어려워요..ㅠ
  • profile
    Context::getResponseMethod() == 'HTML' 이면 html로 출력하자는 건데 어떻게 객체값이 들어갈 수 있나요?
    그 모듈 잘못아닌가요? 아니면 코어에서 is_string()검사가 필요할 것 같습니다.