애드센스 필터 애드온을 수정중입니다, 댓글 내용은 어떻게 불러오나요?
CMS/프레임워크 | Rhymix 1.9 |
---|---|
개발 언어 | PHP 7.1 |
if($called_position == 'before_display_content' && $addon_info->load_admin = 'N')
{
$swc = false;
$dmt = Context::get('oDocument');
$cmt = Context::get('oComment');
// 문서 내용에 금지 단어가 있다면 애드센스를 삭제
if($addon_info->denied_content == 'Y'){
$block_words = explode(',',$addon_info->denied_word_content);
$count_block_words = count($block_words);
foreach($block_words as $value) {
if(strpos($dmt->variables['content'],$value) !== false) {
$swc = true;
return;
} else if(strpos($dmt->variables['title'],$value) !== false) {
$swc = true;
return;
} else if(strpos($cmt->variables['content'],$value) !== false) {
$swc = true;
return;
}
// 문서 내용에 금지 단어가 없다면 애드센스를 출력
} if($swc == false) {
$footer = sprintf('<script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>');
Context::addHtmlFooter($footer);
return;
}
}
}
{
$swc = false;
$dmt = Context::get('oDocument');
$cmt = Context::get('oComment');
// 문서 내용에 금지 단어가 있다면 애드센스를 삭제
if($addon_info->denied_content == 'Y'){
$block_words = explode(',',$addon_info->denied_word_content);
$count_block_words = count($block_words);
foreach($block_words as $value) {
if(strpos($dmt->variables['content'],$value) !== false) {
$swc = true;
return;
} else if(strpos($dmt->variables['title'],$value) !== false) {
$swc = true;
return;
} else if(strpos($cmt->variables['content'],$value) !== false) {
$swc = true;
return;
}
// 문서 내용에 금지 단어가 없다면 애드센스를 출력
} if($swc == false) {
$footer = sprintf('<script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>');
Context::addHtmlFooter($footer);
return;
}
}
}
이런식으로 작성을 했습니다.
게시글 제목과 내용에 필터단어가 있으면 출력이 안되는걸 확인했는데
댓글 내용은 필터단어가 들어가도 출력이 되더라구요, 댓글 내용을 불러오는건 어떤건지 알 수 있을까요?
검색을 해도 제가 원하는 정보가 나오질 않아서 여기다가 질문을 남겨봅니다.
댓글 3
지금 문서정보를 가지고 올 수 있는건
출력하려는 곳의 화면에 뿌려지는 것은 문서번호로 특정하여 해당 문서와 제목을 가지고 올 수 있습니다.
그런데 댓글은 상황이 다릅니다.
댓글은 댓글 하나를 따로 출력하는 페이지가 아니기 때문에..
댓글을 출력하는 스킨에 보시면 각 개별 댓글의 정보는 말씀 하신
oComment 에서 다루는게 맞으나..
여러개의 다른 댓글을 특정해서 정보를 가져오는 건 반복문을 통해 각각 개별 댓글의 정보를 가져오는 것입니다.
따라서 지금 애드온에서도 문서출력할때 댓글을 출력하는 것과 같은 방식으로 반복문을 돌려서 해당 문서가 가지는 댓글마다 가지는 내용값을 배열에 담은 후,
그 배열에 담긴 값을 다시 금칙어가 포함인지 비교하는 코드가 필요합니다.
한가지 대안으로 아이디어를 드리자면 이게 실제 구현이 되는지는 잘은 모르겠습니다.
서버단에서 처리하지 않고 스크립트로 클라이언트 단에서 처리하는 것도 나빠 보이지 않네요.
https://xetown.com/tips/1211963#comment_1212288
제가 올린 위 팁의 경우 금칙어를 비교하는 부분이 있습니다.
우선 애드센스 넣으신 코드에서 <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>' 이부분은 모두 제거를 합니다.
그리고 스크립트로(문서열람페이지에 삽입)
글 제목,본문,댓글 영역을 class 등으로 특정하여 각각 내용을 html을 제외한 텍스트로 가져옵니다.
그리고 각 영역을 금칙어와 비교해서 금칙어가 없다면
<script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>'
을 푸시로 밀어주는 스크립트로 하면 될 것 같습니다.
이게 아이디어라.. 코드를 직접 만들어드리진 못했네요.
이렇게 하면 장점은 댓글이 여러페이지가 있다면 댓글의 페이지에 금칙어가 있다면 광고가 안나가고 없으면 나가는 댓글의 페이지별로 컨트롤이 가능합니다.
애드온에서 html 출력전에 처리하려면 모든 댓글의 내용을 다 가지고 온 후 결정해야 해서 댓글 중에 하나라도 금칙어가 있다면 출력을 막아야 하는 구조이죠.