HTML 출력 내용을 직접 조작하는 애드온 작성시 주의점
before_display_content 호출 시점에
Context::getResponseMethod() == 'HTML' 이라면
$output 변수에는 당연히 현재 페이지의 HTML 컨텐츠가 들어 있겠죠?
이걸 문자열 처리 함수로 마음껏 주물러도 되겠죠?
No!
모듈에 따라서는 $output 변수에 엉뚱한 것이 들어 있는 경우도 종종 있습니다.
예를 들어 모듈 객체가 통째로 들어있다거나... ㅡ.ㅡ;;
이럴 때 str_replace 같은 함수로 $output을 조작하게 되면
경고가 나오지만... XE에서 E_WARNING 무시되는 건 모두들 아실 테고요...
그냥 함수 반환값이 빈 문자열이 됩니다.
결과는? 공포의 백지현상이죠.
HTML 출력 결과가 빈 문자열로 바뀌어 버리니까요.
따라서 HTML 출력 결과를 직접 조작하는 애드온을 개발하신다면
정말로 $output 변수에 문자열이 들어 있는지 확인하는 과정을 거쳐야 합니다.
문자열이 아니라면 괜히 건드리지 말고 포기해야 하고요.
if(!is_string($output)) {
return;
}

기진곰
Lv. 25
라이믹스 개발자 겸, 전속 곰탱이입니다.
댓글 6
대체 원인이 뭘까요?
그 모듈 잘못아닌가요? 아니면 코어에서 is_string()검사가 필요할 것 같습니다.