새글

    최근 30일 이내 등록된 새글 이에요.
  • 이번 약한영웅 첫 4화까지 정말 매력적으로 다가왔지만 남주 연기에서 아쉬움이 커서 다음 편에 대한 기대감이 더욱 커지는 것 같아요 이 드라마는 한국 드라마 중에서도 시청자에게 기분 좋게 다가오는 감정이 느껴져서 부담 없이 즐길 수 있는 신선한 경험을 제공하네요 이번 약한영웅 첫 4화까지 정말 매력적으로 다가왔지만 남주 연기에서 아쉬움이 커서 다음 편에 대한 기대감이 더욱 커지는 것 같아요 이 드라마는 한국 드라마 중에서도 시청자에게 기분 좋게 다가오는 감정이 느껴져서 부담 없이 즐길 수 있는 신선한 경험을 제공하네요 이번 약한영웅 첫 4화까지 정말 매력적으로 다가왔지만 남주 연기에서 아쉬움이 커서 다음 편에 대한 기대감이 더욱 커지는 것 같아요 이 드라마는 한국 드라마 중에서도 시청자에게 기분 좋게 다가오는 감정이 느껴져서 부담 없이 즐길 수 있는 신선한 경험을 제공하네요
    관리자 2025-06-06 개선/제안
  • 현재 댓글 생성 서비스를 이용할 수 없습니다.
    관리자 2025-06-06 사이트 활용팁
  • 01. 새로운 파일 ajax.comment_good_nogood.php 생성 그누보드 bbs 디렉토리 안에 ajax.comment_good_nogood.php 파일을 생성하고 아래 내용을 넣어주세요. 이 파일은 댓글 추천/비추천 요청을 처리하고 데이터베이스를 업데이트하는 역할을 합니다. <?php include_once('./_common.php'); if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가 $comment_id = isset($_POST['comment_id']) ? (int)$_POST['comment_id'] : 0; $action = isset($_POST['action']) ? clean_xss_tags($_POST['action']) : ''; $bo_table = isset($_POST['bo_table']) ? clean_xss_tags($_POST['bo_table']) : ''; $wr_id = isset($_POST['wr_id']) ? (int)$_POST['wr_id'] : 0; // 게시글 ID if (!$comment_id || !$action || !$bo_table || !$wr_id) { die(json_encode(['error' => '잘못된 요청입니다.'])); } // 게시판 설정 정보 가져오기 (권한 체크에 필요) $board = get_board_info($bo_table); if (!$board) { die(json_encode(['error' => '게시판 정보가 없습니다.'])); } // 본문 추천/비추천 권한과 동일하게 적용 // bo_use_good_nogood은 보통 비회원도 추천/비추천이 가능한지 여부를 설정하는 변수입니다. if ($board['bo_use_good_nogood'] && !$member['mb_id']) { // 게시판 설정에서 비회원 추천/비추천을 허용하지 않으면 (즉, 회원만 가능하면) die(json_encode(['error' => '회원만 추천/비추천이 가능합니다.'])); } // IP 중복 체크 (게시글 추천/비추천과 동일하게 적용) // 이 부분은 게시판 설정의 'IP당 추천/비추천수'에 따라 다르게 동작할 수 있습니다. // 현재는 1회만 가능하도록 세션에 저장합니다. $ip = $_SERVER['REMOTE_ADDR']; $ss_name = 'ss_comment_'.$action.'_'.$comment_id; if (get_session($ss_name) == $ip) { die(json_encode(['error' => '이미 ' . ($action == 'good' ? '추천' : '비추천') . '하셨습니다.'])); } // 댓글 정보 가져오기 (cmt_good, cmt_nogood 칼럼 사용) $sql_comment = " SELECT cmt_good, cmt_nogood FROM {$g5['write_prefix']}{$bo_table} WHERE wr_id = '{$comment_id}' "; $comment_row = sql_fetch($sql_comment); if (!$comment_row) { die(json_encode(['error' => '댓글을 찾을 수 없습니다.'])); } $update_field = ''; if ($action === 'good') { $update_field = 'cmt_good'; $current_count = $comment_row['cmt_good']; } elseif ($action === 'nogood') { $update_field = 'cmt_nogood'; $current_count = $comment_row['cmt_nogood']; } else { die(json_encode(['error' => '유효하지 않은 액션입니다.'])); } // 데이터 업데이트 (cmt_good, cmt_nogood 칼럼 사용) $sql_update = " UPDATE {$g5['write_prefix']}{$bo_table} SET {$update_field} = {$update_field} + 1 WHERE wr_id = '{$comment_id}' "; sql_query($sql_update); // 세션에 IP 저장 (중복 추천/비추천 방지) set_session($ss_name, $ip); // 업데이트된 값 다시 가져오기 $new_comment_row = sql_fetch(" SELECT cmt_good, cmt_nogood FROM {$g5['write_prefix']}{$bo_table} WHERE wr_id = '{$comment_id}' "); echo json_encode([ 'success' => true, 'cmt_good_count' => $new_comment_row['cmt_good'], // 변경된 칼럼명에 맞게 'cmt_nogood_count' => $new_comment_row['cmt_nogood'] // 변경된 칼럼명에 맞게 ]); ?>   02. _common.php 파일 확인 (필요시 추가) _common.php 파일에 clean_xss_tags 함수가 포함되어 있는지 확인하세요. 일반적으로 그누보드에는 이 함수가 있지만, 혹시 없다면 아래 코드를 추가해야 합니다. // _common.php 또는 적절한 유틸리티 파일에 추가 if (!function_exists('clean_xss_tags')) { function clean_xss_tags($str) { $str = preg_replace('#</*(?:applet|b(?:ase|gsound)|xss:base|xss:bgsound|b(?:link|ody)|embed|frame(?:set)?|i(?:frame|layer)|l(?:ayer|ink)|meta|object|s(?:cript|tyle)|xml)[^>]*>#is', '', $str); $str = preg_replace('#<([^>]*)(onabort|onactivate|onafterprint|onafterupdate|onbeforeactivate|onbeforecopy|onbeforecut|onbeforedeactivate|onbeforeeditfocus|onbeforepaste|onbeforeprint|onbeforeunload|onbeforeupdate|onblur|onbounce|oncellchange|onchange|onclick|oncontextmenu|oncontrolselect|oncopy|oncut|ondataavailable|ondatasetchanged|ondatasetcomplete|ondblclick|ondeactivate|ondrag|ondragend|ondragenter|ondragleave|ondragover|ondragstart|ondrop|onerror|onerrorupdate|onfilterchange|onfinish|onfocus|onfocusin|onfocusout|onhelp|onkeydown|onkeypress|onkeyup|onlayoutcomplete|onload|onlosecapture|onmousedown|onmouseenter|onmouseleave|onmousemove|onmouseout|onmouseover|onmouseup|onmousewheel|onmove|onmoveend|onmovestart|onpaste|onpropertychange|onreadystatechange|onreset|onresize|onresizeend|onresizestart|onrowenter|onrowexit|onrowsdelete|onrowsinserted|onscroll|onselect|onselectionchange|onselectstart|onstart|onstop|onsubmit|onunload)([ \r\n\t]*)=([ \r\n\t]*)("|\'|&#x22;|&#x27;)([^\5]*)\5([^>]*?)>#is', '<$1$6>', $str); return $str; } }   03. CSS 추가 (style.css 또는 적절한 CSS 파일) 추천/비추천 버튼의 스타일을 위해 style.css 파일 (보통 board_skin_url에 있는)에 아래 CSS를 추가해주세요. /* 댓글 추천/비추천 버튼 */ .cmt_good_btn, .cmt_nogood_btn { display: inline-flex; align-items: center; cursor: pointer; margin-left: 10px; font-size: 13px; /* 폰트 크기 조절 */ color: #666; transition: color 0.2s ease; } .cmt_good_btn:hover, .cmt_nogood_btn:hover { color: #007bff; /* 호버 시 색상 변경 */ } .cmt_good_btn svg, .cmt_nogood_btn svg { margin-right: 3px; vertical-align: middle; } .cmt_good_btn .good_count, .cmt_nogood_btn .nogood_count { font-weight: bold; } .cmt_good_btn.disabled, .cmt_nogood_btn.disabled { cursor: not-allowed; opacity: 0.6; }   04. view_comment.skin.php 파일 수정 ① 파일 상단에 SQL 칼럼 추가 로직 삽입 사용자님의 view_comment.skin.php 파일에 아래 내용을 추가 및 수정합니다. view_comment.skin.php 파일의 가장 상단에 있는 <?php 태그 바로 아래에 다음 코드를 추가합니다. <?php if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가 // --- [시작] 댓글 추천/비추천 칼럼 존재 여부 확인 및 추가 --- if (isset($bo_table) && $bo_table) { $write_table = $g5['write_prefix'] . $bo_table; // 게시판 테이블명 (댓글 테이블도 동일하게 사용) // cmt_good 칼럼 확인 및 추가 $sql_check_cmt_good = "SHOW COLUMNS FROM `{$write_table}` LIKE 'cmt_good'"; $row_cmt_good = sql_fetch($sql_check_cmt_good); if (!$row_cmt_good) { // 기존 wr_good 칼럼 뒤에 추가하는 것이 자연스러움. 만약 wr_good이 없다면 wr_hit 뒤에. // 여기서는 wr_hit 뒤에 추가하는 것으로 가정합니다. $sql_add_cmt_good = "ALTER TABLE `{$write_table}` ADD `cmt_good` INT(11) NOT NULL DEFAULT '0' AFTER `wr_hit`"; sql_query($sql_add_cmt_good, false); } // cmt_nogood 칼럼 확인 및 추가 $sql_check_cmt_nogood = "SHOW COLUMNS FROM `{$write_table}` LIKE 'cmt_nogood'"; $row_cmt_nogood = sql_fetch($sql_check_cmt_nogood); if (!$row_nogood) { // $row_nogood 대신 $row_cmt_nogood를 확인해야 합니다. // cmt_good 칼럼 뒤에 추가 $sql_add_cmt_nogood = "ALTER TABLE `{$write_table}` ADD `cmt_nogood` INT(11) NOT NULL DEFAULT '0' AFTER `cmt_good`"; sql_query($sql_add_cmt_nogood, false); } } // --- [끝] 댓글 추천/비추천 칼럼 존재 여부 확인 및 추가 --- ?>   ② 댓글 작성일자 옆에 추천/비추천 버튼 삽입 view_comment.skin.php 파일에서 div class="gall_date" 부분을 찾습니다. 이 부분은 대략 40~50번째 줄에 있을 것입니다. <p class="p_times" style="margin-bottom:10px;"><span><?php echo date('Y-m-d H:i', strtotime($list[$i]['datetime'])) ?></span></p> 위 코드 바로 아래에 다음 HTML 코드를 추가합니다. <?php if ($list[$i]['mb_id'] != $member['mb_id'] || $member['mb_id'] == '') { // 본인 댓글이 아니거나 비회원일 경우에만 표시 (권한에 따라 조절) ?> <span class="cmt_good_btn" data-comment-id="<?php echo $comment_id; ?>" data-action="good"> <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-thumbs-up"><path d="M14 9V5a3 3 0 0 0-3-3l-4 9v11h11.28a2 2 0 0 0 2-1.7l1.38-9a2 2 0 0 0-2-2.3zM7 22H4a2 2 0 0 1-2-2v-7a2 2 0 0 1 2-2h3"></path></svg> <span class="good_count"><?php echo $list[$i]['cmt_good']; // 변경된 칼럼명 ?></span> </span> <span class="cmt_nogood_btn" data-comment-id="<?php echo $comment_id; ?>" data-action="nogood"> <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-thumbs-down"><path d="M10 15v4a3 3 0 0 0 3 3l4-9V2H5.72a2 2 0 0 0-2 1.7l-1.38 9a2 2 0 0 0 2 2.3zM17 2h3a2 2 0 0 1 2 2v7a2 2 0 0 1-2 2h-3"></path></svg> <span class="nogood_count"><?php echo $list[$i]['cmt_nogood']; // 변경된 칼럼명 ?></span> </span> <?php } ?> <script> // --- [추가 시작] 댓글 추천/비추천 기능 --- $(document).on('click', '.cmt_good_btn, .cmt_nogood_btn', function() { const btn = $(this); const commentId = btn.data('comment-id'); const action = btn.data('action'); // 'good' 또는 'nogood' // 중복 클릭 방지 if (btn.hasClass('disabled')) { return false; } btn.addClass('disabled'); // 버튼 비활성화 $.ajax({ url: g5_bbs_url + '/ajax.comment_good_nogood.php', // 이 파일을 새로 생성해야 합니다. type: 'POST', data: { comment_id: commentId, action: action, bo_table: '<?php echo $bo_table; ?>', // 게시판 테이블명 wr_id: '<?php echo $wr_id; ?>' // 게시글 ID }, dataType: 'json', success: function(data) { if (data.error) { alert(data.error); } else { if (action === 'good') { btn.find('.good_count').text(data.cmt_good_count); } else if (action === 'nogood') { btn.find('.nogood_count').text(data.cmt_nogood_count); } } }, error: function(xhr, status, error) { console.error("AJAX Error:", status, error); alert('요청 처리 중 오류가 발생했습니다.'); }, complete: function() { btn.removeClass('disabled'); // 버튼 다시 활성화 } }); }); // --- [추가 끝] 댓글 추천/비추천 기능 --- </script>        
    관리자 2025-06-06 사이트 활용팁
  • 현재 댓글 생성 서비스를 이용할 수 없습니다.
  • 현재 댓글 생성 서비스를 이용할 수 없습니다.
    관리자 2025-06-06 사이트 활용팁
  • 현재 댓글 생성 서비스를 이용할 수 없습니다.
    관리자 2025-06-06 사이트 활용팁
  • 현재 댓글 생성 서비스를 이용할 수 없습니다.
    관리자 2025-06-06 사이트 활용팁
  • 현재 댓글 생성 서비스를 이용할 수 없습니다.
    관리자 2025-06-06 사이트 활용팁
  • 현재 댓글 생성 서비스를 이용할 수 없습니다.
    관리자 2025-06-06 사이트 활용팁
  • 현재 댓글 생성 서비스를 이용할 수 없습니다.
    관리자 2025-06-06 사이트 활용팁