게시판 $oDocument->getContent 아래 위에 php 코드 삽입하기
CMS/프레임워크 | Rhymix 2.1 |
---|---|
개발 언어 | PHP 7.4 |
여기 윗줄
{$oDocument->getContent(~~~~
여기 아랫줄
여기에 애드온에서 php 코드를 추가하려고 합니다.
str_replace를 써서 추가 해봤는데
str_replace를 쓰기엔 이미 php 가 처리된 직후라서 의미가 없네요.
애드온에서 저부분에 코드를 추가하는 방법이 있을까요?
감사합니다.

톰캣
Lv. 11
시대의 흐름에 뒤떨어지지 않도록 아주 천천히지만 노력하고 있습니다.
댓글 15
else로 구분을 해놓아버려서요.
애드온에서
if($~~~)
{
$DocumentContent = $oDocument->getContent(false);
}
else
{
$DocumentContent = $oDocument->getContent();
}
Context::set('DocumentContent', $DocumentContent);
템플릿에서
<!--@if($DocumentContent)-->
{$DocumentContent}
<!--@else-->
원래코드
<!--@end-->
일케 하면 안되나요?
이렇게 하라고 말씀드린거라..ㅠ;
<!--@if($DocumentContent)-->
{$DocumentContent}
<!--@else-->
원래코드
<!--@end-->
애드온에서 이 작업을 하고싶은건데
사용자들이 게시판 글읽기스킨코드를 수정하는거면 애드온의 의미가 없을것 같아요ㅜㅜ
애매하게 말씀하지말고 어떤애드온인지 어떻게 만들건데 어떤 페이지에서 어떤 조건일때 어떻게 하고 싶다. 이걸 설명해주세요..
질문 자꾸 애매하게 하시니.. 뭐 그 애매한 것에서 방법을 간구 해서 드리는건데.. 이것도 아니고 저것도 아니라 하시면.. 답변만 길어지니까 최대한 제가 공지사항에도 적어드린게 진짜 그냥 아이디어 다 내놓더라도 정확하게 알 수 잇도록 설명 해달라는거예요..
애초에 스킨에서 저렇게 조건이 필요한경우 애드온에서 님이 원하는 조건대로 if문만 잘 만들어두면 똑같이 동작하는 코드일껏 같아요..; 다른게시판 영향도 안갈거고요..
아래글의 연장선이며
https://xetown.com/questions/1785020
코드라고해도 별게 없습니다.
다만 이 코드가 게시판 글읽기에 들어가야한다는 점입니다.
제가 혼자쓰는거면 그냥 이대로 써도되지만 애드온을 만들어 배포하려면 글읽기 스킨을 수정할수 없으니
애드온으로 글읽기페이지 코드를 고치지 않고 만들어주고싶은 상황입니다.
아래글에 달아주신 첨부 갯수는 애드온에서 잘작동확인하여 이것과 잘 조합하여쓰려고하고있습니다.
<!--@if (isset($_POST['confirm_over_data']) && $_POST['confirm_over_data'] == '예')-->
{$oDocument->getContent(false)}
<!--@else-->
<div id="data_usage_warning">
<p>데이터 경고 안내문</p>
<p>그래도 열람 하시겠습니까?</p>
<div class="data_btn_container">
<form method="post">
<button type="submit" name="confirm_over_data" value="예" class="yes_btn">예</button>
</form>
<a href="이전페이지의URL"><button class="no_btn">아니요</button></a>
</div>
</div>
<!--@end-->
이래서 정확하게 예시 말하라는겁니다.
님이 원하시는 부분 (replace부분만)만 구현한겁니다.
게시글 읽기 항목일때 내용을 바꾸게 되는건데 저기에 HTML 태그 들어가게 하거나 아니면 원문 들어가게 하면 됩니다.
원문 들어갈때 제가 그냥 $matchs[6] 이걸로 리턴 시키도록 해놧을텐데 이거 쓰지마시고 $oDocument 를 Context::get() 함수로 가져와서 $oDocument->getContent(false); 을 그냥 리턴 시키면 됩니다. (그냥 리턴만 시키고 뭐 하면 마지막에 내용 빈것으로만 나오기에 구현에 주의하시기 바랍니다.)
라이믹스 기준으로 동작하고, 해당 코드 사용시 GPL v2 라이선스 필요합니다.
코드 설명 대략적으로 해드리면 글 읽기항목에 <div class="document_문서번호_맴버번호"></div> 이런 기준으로 태그가 들어가는데 그 태그 안에 보통 내용이 들어가게 됩니다. 그 내용을 그냥 callback 함수를 이용해서 바꿔치기 시키는 겁니다.
그 바꿔치기는 그 회원 확장 정보 출력 애드온에서 가져왔어요.
옵션은 귀찮아서 그냥 위 애드온꺼를 그냥 쭉 긁어왔으니.. 잘 조물 조물 해보세요.
아래 구현한 게시글내용대로 버튼 달아보고 그 값을 받아 넘겼을때 정확하게 폼제출한대로 주소창 변경하게 만들면 구현 난이도는 쉬울겁니다.
test.zip
람보님 덕분에 완성된 애드온으로 공개할 수 있게 되었습니다.
감사합니다.
output 이걸 다른걸로 바꾸니 안되는것같은데
조금 더 연구해서 공개해보겠습니다.
거의 밥을 입에다 떠다 넣어주셨네요 ㅠㅠ 항상 감사드립니다. 람보님
$output 이라는 코드를 바꿧는데 그 바꾼 부분에 있는 위아래 2줄씩 같이 드래그 복사 해서 남기세요.
그래야 ㅋㅋㅋ 보고 답변을 하죠..ㅋㅋㅋㅋ 어디부분 수정한지 모르니까 그런 상황을 최대한 알려주세요 ㅋㅋ
if($called_position != "before_display_content" || Context::get('act') == 'dispPageAdminContentModify' || Context::getResponseMethod() != 'HTML' || isCrawler())
{
return;
}
require_once __DIR__ . '/test.lib.php';
$temp_output = preg_replace_callback('!<(div)([^\>]*)document_([0-9]+)_([0-9]+)([^\>]*)>(.*?)\<\/(div)\>!is', 'replaceFunction', $output22);
if($temp_output)
{
$output22 = $temp_output;
}
unset($temp_output);
로 바꿨습니다!!
이렇게 다른 용어로 바꾸면 본문이 바로 떠버립니다!
아무리 봐도 output 이부분은 다른걸로 바꾸면 안될것같은데 ㅠㅠ
일반적으로 $output 변수자체가 애드온에서 동작하기로는 다음 애드온 실행때까지 그 변수를 활용할수있도록 구현되는 방식이라... 중복되지 않도록 처리하는건데.. 그게 바뀌면 안될 수 있겠네요
<!--BeforeDocument()-->
<!--BeforeDocument()-->
이거랑
<!--AfterDocument()-->
<!--AfterDocument()-->
class="document_ 토대로 매치해서 거기다가 본문을 한번더 넣어주는걸로 대체했으니
저 주석이 두개 나오는것 외에는 아주 완벽한 동작을합니다.(아무 문제도아님ㅋㅋ)
저는
<!--BeforeDocument()--> 이거 기준으로 아래 위로 넣는걸 연구했으니 될턱이 없었네요 ㅋㅋㅋㅋ
str_replace는 실행되고 나서 변환이라 php 실행 불가능인 셈인것 같네요