before_display_content 시점에 호출되는 기존의 애드온을 보면,
대개의 경우 출력 소스가 본문의 주석문(BeforeDocument, AfterDocument) 주변을 치환해서 나오곤 합니다.
그런데 애드온에서 (게시판 스킨을 안정적으로 유지한다면) 본문 내부의 특정 클래스 이름을 가지는 요소 주변으로도 출력 소스를 치환해서 보여줄 수가 있겠더군요.
관련한 정규식을 검색 및 짜깁기하는 게 쉽진 않았지만, 유용한 패턴이겠다 싶어 공유해보고자 합니다.
만약 클래스 이름을 애드온 옵션에서 지정받아온다면(이 경우에는 $addon_info->position입니다), 패턴을 다음과 같이 짜볼 수 있겠습니다.
$pattern = '/<(\w+)[^>]*class=("|\')[^"\']*\b' . $addon_info->position . '\b[^"\']*\2[^>]*>.*?<\/\1>/is';
$addon_info->position에 입력된 문자열과 같은 클래스 이름을 가진 요소를 찾아주는 패턴입니다.
$tpl은 출력될 html 소스인데요.
$output = preg_replace($pattern, $tpl . '$0', $output);
이렇게 하면 해당 요소 앞 부분에 $tpl이 출력되고,
$output = preg_replace($pattern, '$0' . $tpl, $output);
이렇게 하면 해당 요소 뒷 부분에 $tpl이 출력됩니다.