묻고답하기
애드온 $output 관련 질문
2014.04.11 18:40
안녕하세요
애드온을 만들고 있는데요
몇가지 막히는 게 있어서 문의드립니다.
다름이 아니라
게시판 본문 글에서만 특정 태그를 변경하려고 합니다.
근데 제가 알기론 $output 요놈은 레이아웃까지 포함된 전체 태그(소스?)로 알고 있습니다.
만일 게시물 본문 내용만 변경토록 하려면 어떻게 해야하는지요..?
댓글 13
-
LI-NA
2014.04.11 18:59
-
애니즌
2014.04.11 21:14
preg_replace_callback() 으로 뽑을려면
$html = $output;
$pattern = '/<div class="xe_content">[^<\/div>]/';
preg_replace_callback('/<img[^>]+>/',function,$html);
이런 느낌으로 접근하면 될까요?
-
LI-NA
2014.04.11 21:32
음... 제가 정규식을 잘 못해서 뭐라 말씀을 못드리겠지만, 비슷한 느낌이에요.
function 정의할때는 php 파일 인클루드하는거 잊지 마시구...
그 회원 레벨 아이콘 출력 애드온 살펴보시면 이해가 갈거에여.
-
애니즌
2014.04.11 21:45
넵 답변 감사합니다.!
저도 정규식은 잘 몰라서 골머리 썩고 있네요..ㅜ.ㅜ
우선 jquery로 구현해놨는데 영 ~ 아니올시다 라는 느낌이네요 ㅎㅎ
그리고 라이트박스?랑 충돌이라고 해야하나.. 암튼 그런 게 있는 것 같고..
당분간 걍 GG 해야겠어요
-
LI-NA
2014.04.11 22:55
저는 파일 아이콘 추가 애드온을 jQuery로 구현했네요 ㅎㅎ;;
-
애니즌
2014.04.12 00:29
파일아이콘이라는 게 파일 첨부할 때 나오는 거 말씀하시는 건가욤??
xe_board 스킨에는 기본적으로 나오던데..ㄷㄷ 이게 기본 기능이 아닌가 보군요?!!
-
LI-NA
2014.04.12 11:06
흠... 그건 잘 모르겠지만, 본문에 삽입한 파일 링크들은 아이콘이 없길래 애드온으로 만든거에여
-
애니즌
2014.04.12 11:49
아~~ 링크로 삽입할 때 로군요 +_+
대단합니당!!
-
애니즌
2014.04.12 12:35
다른 방법을 찾긴했습니다.
문제는 정규식이 문제긴 하지만
게시판 본문만 변경하는 방법은
$output; 말고도 다른 게 있더군요..
$oDocument = Context::get('oDocument');
//본문 내용..
$oDocument->variables['content'];
이 부분을 정규식으로 잘 만지작 하면
레이아웃이라던지 이런 거에 전혀 영향이 없고 본문 내용만 컨트롤 가능합니다.
xe 애드온 강좌 예제에서 찾았네요..-_-;;
근데 변경하는 정규식때문에 또 골머리를 앓고 있습니다... 흐ㅏ아앙...ㅇ아ㅠㅠㅠㅠㅠㅠㅠㅠ
-
숭숭군
2014.04.12 12:09
간단하게 하면됩니다
$pattern = 정규식
$replacement = 변경내용
$output = preg_replace($pattern, $replacement, $output);
위를 활용한 대표적인 프로그램으로 아래링크를 참조하시길..
http://xecenter.com/xe/work/66607
http://xecenter.com/xe/work/65909
http://xecenter.com/xe/work/65763
-
애니즌
2014.04.12 12:30
궁금한 것이
정말 단순하게 생각하여
$output = str_replace('src','src="dummy.png" data', $output);
이렇게 했을 경우
src="dummy.png" 까지는 잘 바껴지던데
뒤에 한칸띄고 data는 왜 안나올까요..?
-
숭숭군
2014.04.12 18:59
글쎄요..
$replacement = 'src="dummy.png" data';
$output = str_replace('src',$replacement,$output);
으로 해보세요..
-
애니즌
2014.04.12 21:12
문제를 찾았습니다.
뭔지는 모르겠는데 게시판 모듈? 문서모듈단에서 강제로 이미지 코드를 변경하네요..
그래서 임의메서드를 지워버려서.. 사용할 수가 없던 것이였습니다..ㅠㅠ
preg_replace_callback 함수를 이용해 xe_content div부터 뽑아내고 내부에서 preg_replace를 사용하면 될 것 같습니다.