팁과노하우

  • 팁과노하우 포인트 정책
      글쓰기
      50P
      댓글
      10P
  • 전체 124건 / 1 페이지
    • 124
    • 8일 전
      2025.11.10
  • 8일 전
  • 게시판에 글 작성시 글자가 잘릴때
  • 게시판에 많은 글자를 입력하는 경우 글자가 잘리는 경우가 있습니다.두가지 변경으로 처리해줄 수 있습니다.
    해당 게시판의 wr_content 컬럼의 타입을 TEXT > LONGTEXT 로 변경.보통은 여기서 해결된다고 하지만, 그누보드 코어에는 wr_content 의 글자를 강제로 자르는 코드가 있습니다.
    /bbs/write_update.php 파일의 32라인 부근의 아래코드 입니다.$wr_content = substr(trim($_POST['wr_content']),0,65536);
    입력폼에서 넘어온 wr_content 를 최대 65,536 바이트만 남기고 자르는 코드 입니다.위 코드를 아래와같이 변경해주시면 많은양의 글자를 입력하더라도 서버에서 걸리는게 아니면 정상적으로 저장됩니다.$wr_content = $_POST['wr_content'] ?? '';
    • 123
    • 8일 전
      2025.11.10
  • 8일 전
  • 모듈, 위젯 안에서 현재 보고있는 게시판 ID 출력하기
  • 게시판안에 현재 게시판의 ID를 출력하려면보편적인 방법으로 <?php echo $bo_table ?> 을 넣으면현재 보고있는 게시판의 ID 가 출력됩니다.
    하지만 위젯이나, 모듈을 게시판 안에 추가했고, 위젯이나 모듈에서 $bo_table 을 넣으면 리빌더의 모듈 출력 구조상 아무것도 출력이 되지않습니다. (최신글의 경우 출력되는 게시물의 bo_table 이 출력됨)
    이럴때는 $bo_table 대신에 $GLOBALS['bo_table'] 을 사용하면 되겠습니다.

    예제1 (현재 게시판의 ID를 위젯 또는 모듈에 출력)
    <?php if (!empty($GLOBALS['bo_table'])) echo $GLOBALS['bo_table']; ?>
    예제2 (조건문을 통해 특정내용 출력)
    <?php if (!empty($GLOBALS['bo_table']) && $GLOBALS['bo_table'] == "free") { ?> free 게시판 안에있는 위젯 또는 모듈에 출력 됩니다. <?php } ?> <?php if (!empty($GLOBALS['gr_id']) && $GLOBALS['gr_id'] == "community") { ?> community 그룹에 속해있는 위젯 또는 모듈이면 출력 됩니다. <?php } ?> <?php if (!empty($GLOBALS['wr_id']) && $GLOBALS['wr_id'] == "1") { ?> ID가 1인 게시물 안에 있는 위젯 또는 모듈이면 출력 됩니다. <?php } ?>
    감사합니다.
    • 122
    • 15일 전
      2025.11.03
  • 15일 전
  • 출석부 사용 시 8.2 버전에서 오류 수정
  • 안녕하세요...미니님a입니다.
    출석부 사용하시는 분들 중 8.2 버전을 사용하고 있다면, 아마 아래 처럼 오류가 뜰거라 생각됩니다.참고로 제 테스트 서버 사양은 다음과 같습니다.


    위 오류가 발생한다면
    수정하러 가봅시다!!
    rb/rb.mod/attendance/attend.view.php 65번 라인
    [code]$total_count = (int)$total_row['cnt'];[/code]
    코드를 아래와 같이 수정 해주세요
    [code]$total_count = isset($total_row['cnt']) ? (int)$total_row['cnt'] : 0;[/code]
    자...다음rb/rb.mod/attendance/attend.list.php 20번 라인
    [code]$total_count = (int)$total_row['cnt'];[/code]
    코드를 아래와 같이 수정 해주세요
    [code]$total_count = isset($total_row['cnt']) ? (int)$total_row['cnt'] : 0;[/code]
    이렇게 수정하시면 정상적으로 페이지 오류가 사라질 것 입니다.



    그런데 말입니다!! 이것만 수정해서는 안됩니다.실제 출석이 되지 않는 오류까지 발생합니다.


    rb/rb.mod/attendance/attend.lib.php 57번 라인
    [code]$n = (int)$row['cnt'];[/code]
    코드를 아래와 같이 수정 해주세요
    [code]$n = (int)($row['cnt'] ?? 0);[/code]
    여기까지 하셨다면, 이제 정상적으로 출석부를 이용할 수 있습니다.


    고맙습니다.

    • 121
    • 18일 전
      2025.10.31
  • 18일 전
  • 특정 상품 특정 결제만 가능하게 하는 방법
  • 소스코드 다운로드 하시고 extend 폴더에 넣어주시면 됩니다.
    4번째 줄에 상품 id 넣어주시면 되고
    $ONLY_BANK_IT_IDS = ['1756140373']; // 특정 결제 수단만 허용할 it_id(상품코드)들
    40번째 줄에서 true는 허용 false는 비허용 입니다.//결제수단 허용/비허용 $is_bank_pay = true; $is_card_pay = false; $is_vbank_pay = false; $is_iche_pay = false; $is_hp_pay = false; $is_kakaopay_use = false;

    등록된 상품아이디는 40번째 줄에서 true로 설정한 것만 결제수단에 나오게 됩니다.
    따로 허브에 올릴 필요가 없을것 같아서 이곳에 공유합니다.~
    sir에서도 은근히 질문이 많더라구요~

    • 120
    • 21일 전
      2025.10.28
  • 21일 전
  • 출석부 로그인시 자동 출석 체크
  • 사람들이 로그인 하면서 출석부 까먹고 있는 사람들도 있습니다.
    저두 그렇 경우가 많네요^^ 
    그냥 전 글쓰기보다 그냥 강제로 출석 체크 만들어 봤습니다.
    $total_count = (int)$total_row['cnt']; 오류가 생기는분은 $total_count = isset($total_row['cnt']) ? (int)$total_row['cnt'] : 0; 이걸로 대체 해주세요.

    rb/rb.mod/attendance attend.lib.php 맨밑에 복사하시고 붙여 넣기 하세요. // ---------------------------------------------------- // [추가된 기능] 로그인 성공 시 자동 출석 체크 함수 // ---------------------------------------------------- function rb_attend_auto_check($member) { // $member 변수가 없거나 비어 있으면 실행하지 않음 if (!is_array($member) || empty($member['mb_id'])) return false; // 입력 값 설정 (로그인 자동 출석이므로 내용은 기본값) $content = '자동 로그인 출석 체크'; // 자동으로 입력 문자 값을 고쳐 주세요. $mb_id = $member['mb_id']; // 날짜 정규화 $ymd8 = rb_attend_norm_ymd8(defined('G5_TIME_YMD') ? G5_TIME_YMD : date('Ymd')); $now = defined('G5_TIME_YMDHIS') ? G5_TIME_YMDHIS : date('Y-m-d H:i:s'); $ip = $_SERVER['REMOTE_ADDR'] ?? ''; // 중복 체크 if (rb_attend_is_checked_today($mb_id, $ymd8)) { return ['status' => 'skip', 'msg' => '이미 출석 완료']; } // 설정과 순위 $cf = rb_attend_get_config(); $rank = rb_attend_pick_rank($ymd8); // 저장 (attend.write.php의 핵심 SQL 로직) sql_query(" INSERT INTO rb_attendance (mb_id, ymd, at_datetime, at_ip, at_content, at_rank) VALUES ( '".sql_real_escape_string($mb_id)."', '{$ymd8}', '{$now}', '".sql_real_escape_string($ip)."', '".sql_real_escape_string($content)."', ".($rank ? (int)$rank : "NULL")." ) "); $at_id = sql_insert_id(); // 참여 포인트 지급 (rel_act를 'autobase'로 변경하여 일반 출석과 중복 지급 방지) $base = isset($cf['base_attend_point']) ? (int)$cf['base_attend_point'] : 0; if ($base > 0) { rb_attend_insert_point($mb_id, $base, '로그인 자동 출석 참여', G5_TIME_YMD.'-autobase', $at_id); } // 순위 보너스 포인트 (rel_act를 'autorank'로 변경하여 중복 지급 방지) $awarded_bonus = 0; if ($rank && $rank >= 1 && $rank <= 5) { $bonus = 0; if ($rank == 1) $bonus = (int)$cf['bonus_rank1']; if ($rank == 2) $bonus = (int)$cf['bonus_rank2']; if ($rank == 3) $bonus = (int)$cf['bonus_rank3']; if ($rank == 4) $bonus = (int)$cf['bonus_rank4']; if ($rank == 5) $bonus = (int)$cf['bonus_rank5']; if ($bonus > 0) { rb_attend_insert_point($mb_id, $bonus, '로그인 자동 출석 순위 보너스', G5_TIME_YMD.'-autorank', $at_id); $awarded_bonus = $bonus; } } // 연속 처리 $st = rb_attend_update_streak_and_award($mb_id, $ymd8, $cf); return [ 'status' => 'success', 'msg' => '로그인 자동 출석 완료!', 'rank' => $rank ]; }
    bbs/login_check.php // 선택필드 초기화 $sql = " update {$g5['g5_shop_cart_table']} set ct_select = '0' where od_id = '$s_cart_id' $add_cart_where "; sql_query($sql); } 위부분 찾아서 밑에 복사 하셔서 붙여넣기 하세요 // **↓↓↓↓↓↓ 자동 출석 체크 로직 삽입 ↓↓↓↓↓↓** // 1. 출석부 라이브러리 파일 포함 include_once(G5_PATH.'/rb/rb.mod/attendance/attend.lib.php'); // 2. 자동 출석 함수 호출. $mb는 로그인 성공 시의 회원 정보입니다. $attend_result = rb_attend_auto_check($mb); // 3. (선택 사항) 다음 페이지로 출석 결과 메시지를 전달하기 위해 세션에 저장 if ($attend_result['status'] === 'success') { $msg_text = $mb['mb_nick'] . '님, 로그인 시 자동 출석 체크 완료! '; if ($attend_result['rank']) { $msg_text .= ' ('.$attend_result['rank'].'등 달성)'; } // 다음 페이지 (리디렉션 후 도착할 페이지)에서 출력할 세션 메시지에 저장 set_session('ss_attend_msg', $msg_text); } // **↑↑↑↑↑↑ 자동 출석 체크 로직 추가 끝 ↑↑↑↑↑↑**





    • Uploaded Image
    • 119
    • 24일 전
      2025.10.25
  • 24일 전
  • 디비 테이블 언어셋변경(utf8mb4_unicode_ci) - 'wr_datetime'의 유효하지 못한 디폴트 값을 사용하셨습니다. 오류 해결
  • 본 팁은!!A. 디비테이블을 utf8mb4_unicode_ci 로 변경하고자 할경우B. 'wr_datetime'의 유효하지 못한 디폴트 값을 사용하셨습니다. 란 오류가 발생할 경우사용되는 SQL쿼리문 입니다.
    1. SQL서 아래 SQL질의를 실행SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO"; SET time_zone = "+00:00"; ALTER TABLE `테이블명` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci
    2. 여러개의 디비테이블을 수정하고자 할경우. SQL서 아래 질의를 실행SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO"; SET time_zone = "+00:00"; ALTER TABLE `테이블명` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; ALTER TABLE `테이블명` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; ALTER TABLE `테이블명` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci테이블 구분은 '테이블명' 쿼리문 라인 맨뒤에 ; 을 이용하여, 구분지음.마지막 쿼리문에는 ; 를 붙이지 말 것.
    • 118
    • 오래 전
      2025.10.21
  • 오래 전
  • 분야별 상위 순위 출력 코드
  • 이번에 수여자 통계하면서 사용했던 코드입니다.코드 그대로넣으면 출력 됩니다.
    포인트(보유) 5 : 현재보유 입니다. 참고해주세요.
    추천받은수 상위 5출석 상위 5 : 일일 로그인포인트(환경설정)를 지급한다면  집계가능합니다.게시글수 상위 5
    댓글수 상위 5
    <?php // --------------------------------------------- // 설정 // --------------------------------------------- $exclude_ids = ['master','false9']; //제외아이디 // --------------------------------------------- // 유틸 // --------------------------------------------- // exclude IN 절 function build_exclude_in($ids){ $safe = array_map('sql_escape_string', $ids); return "'" . implode("','", $safe) . "'"; } // 닉네임 가져오기 function get_nick_by_id($mb_id){ $mb_id = sql_escape_string($mb_id); $row = sql_fetch("select mb_nick from g5_member where mb_id='{$mb_id}'"); return ($row && $row['mb_nick']) ? $row['mb_nick'] : $mb_id; } // 상위 N 추출: 연관배열 (mb_id => cnt) 를 cnt 내림차순 정렬 후 상위 N 반환 function topNFromAssoc($assoc, $n=5){ // 기본 5위 arsort($assoc, SORT_NUMERIC); return array_slice($assoc, 0, $n, true); } // 출력용 공통 렌더러 function render_top_list($title, $rows){ // rows: [['nick'=>..., 'count'=>...], ...] echo '<div style="margin:8px 0 16px">'; echo '<strong>' . htmlspecialchars($title, ENT_QUOTES) . '</strong><br>'; if (empty($rows)) { echo '<span>데이터 없음</span>'; } else { $rank = 1; foreach($rows as $r){ $nick = htmlspecialchars($r['nick'], ENT_QUOTES); $cnt = number_format((int)$r['count']); echo $rank . '위: <strong>' . $nick . '</strong> <span style="opacity:.8">(' . $cnt . ')</span><br>'; $rank++; } } echo '</div>'; } // --------------------------------------------- // 1) 포인트 상위 1~5위 (g5_member.mb_point) // --------------------------------------------- $exclude_in = build_exclude_in($exclude_ids); $res_point = sql_query(" select mb_id, mb_nick, mb_point from g5_member where mb_id not in ({$exclude_in}) order by mb_point desc, mb_id asc limit 5 "); $tops_point = []; for($i=0; $row = sql_fetch_array($res_point); $i++){ $tops_point[] = [ 'nick' => $row['mb_nick'], 'count' => (int)$row['mb_point'], ]; } // --------------------------------------------- // 2) 출석 상위 1~5위 (g5_point.po_content LIKE '%첫로그인%') // 공백 변형 '첫 로그인' 등도 잡도록 REPLACE 사용 // --------------------------------------------- $res_att = sql_query(" select x.mb_id, m.mb_nick, x.cnt from ( select mb_id, count(*) as cnt from g5_point where REPLACE(REPLACE(po_content,' ',''), CHAR(160), '') like '%첫로그인%' and mb_id not in ({$exclude_in}) group by mb_id order by cnt desc, mb_id asc limit 5 ) x join g5_member m on m.mb_id = x.mb_id order by x.cnt desc, x.mb_id asc "); $tops_att = []; for($i=0; $row = sql_fetch_array($res_att); $i++){ $tops_att[] = [ 'nick' => $row['mb_nick'], 'count' => (int)$row['cnt'], ]; } // --------------------------------------------- // 3) 전체 게시글/댓글/추천 합산 (모든 write_* 테이블) // --------------------------------------------- $postCnt = []; // wr_is_comment = 0 $commCnt = []; // wr_is_comment = 1 $goodCnt = []; // wr_is_comment = 0 글들의 wr_good 합계 (작성자별) $prefix = sql_escape_string($g5['write_prefix']); // 보통 'g5_write_' $qtbl = sql_query(" select table_name from information_schema.tables where table_schema = database() and table_name like '{$prefix}%' "); while($t = sql_fetch_array($qtbl)){ $tbl = $t['table_name']; $res1 = sql_query(" select mb_id, count(*) as cnt, sum(coalesce(wr_good,0)) as good_sum from {$tbl} where wr_is_comment = 0 and mb_id not in ({$exclude_in}) group by mb_id "); while($r = sql_fetch_array($res1)){ $mb = $r['mb_id']; $postCnt[$mb] = ($postCnt[$mb] ?? 0) + (int)$r['cnt']; $goodCnt[$mb] = ($goodCnt[$mb] ?? 0) + (int)$r['good_sum']; } // 댓글 $res2 = sql_query(" select mb_id, count(*) as cnt from {$tbl} where wr_is_comment = 1 and mb_id not in ({$exclude_in}) group by mb_id "); while($r = sql_fetch_array($res2)){ $mb = $r['mb_id']; $commCnt[$mb] = ($commCnt[$mb] ?? 0) + (int)$r['cnt']; } } // 상위 5 추출 $top_posts = []; foreach(topNFromAssoc($postCnt, 5) as $mb_id => $cnt){ $top_posts[] = ['nick'=> get_nick_by_id($mb_id), 'count'=> $cnt]; } $top_comms = []; foreach(topNFromAssoc($commCnt, 5) as $mb_id => $cnt){ $top_comms[] = ['nick'=> get_nick_by_id($mb_id), 'count'=> $cnt]; } $top_goods = []; foreach(topNFromAssoc($goodCnt, 5) as $mb_id => $cnt){ $top_goods[] = ['nick'=> get_nick_by_id($mb_id), 'count'=> $cnt]; } // --------------------------------------------- // 출력 // --------------------------------------------- echo '<div style="line-height:1.9">'; render_top_list('포인트 상위', $tops_point); render_top_list('추천 상위 (누적 wr_good)', $top_goods); render_top_list('출석 상위 (첫로그인 카운트)', $tops_att); render_top_list('게시글 상위', $top_posts); render_top_list('댓글 상위', $top_comms); echo '</div>'; ?>
    • 117
    • 오래 전
      2025.10.16
  • 오래 전
  • New Basic 레이아웃 모듈 배치
  • New Basic 레이아웃 모듈 배치
    # New Basic 레이아웃 해당 게시글 레이아웃 예시 사진에 있는 모듈 배치 방법을 공유 드립니다.위 레이아웃 예시에 있는 모듈은 대부분 콘텐츠허브에 공유된 혹은 리빌더 기본 내장 모듈을 사용합니다.- 투표 위젯 : 코드 개선 후 배포 예정입니다.- 탭 최신글 스킨은 리빌더 기본 내장 스킨으로 대체합니다.


    필요한 위젯일간, 주간, 월간 인기글 위젯퀵메뉴 링크 위젯 (리빌더 내장, rb.quick_btns)최신글 스킨 (리빌더 내장, rb.latest.thumb_latest)별점최신글 스킨 (멤버십 전용, rb.latest.thumb_top 대체 가능)아웃로그인프로젝트현황 위젯날씨위젯캘린더 최신글 스킨 (멤버십 전용)채용정보 게시판 최신글 스킨 (멤버십 전용)캘린더 미니 위젯 (멤버십 전용)


    기본 모듈 배치 방법
    리빌더 기본 모듈 배치 방법은 관리자 로그인시 화면 하단 중앙에 관리자 전용 버튼그룹이 표시됩니다.그 중, 2번째 버튼(모듈설정)을 누르면 레이아웃 배치가 가능한 영역에 모듈추가 버튼이 표시됩니다.모듈추가 버튼을 누르면 우측에 사이드바가 나타나 여러 모듈(위젯, 최신글, 최신글(탭), 투표, 배너)을 추가할 수 있습니다.



    배치 따라하기
    좌측열 모듈배치- 3열 인기글 배치



    가로로 3열로 배치되는 위젯은 직접 가로사이즈를 지정하여 배치해야 합니다.각각의 모듈의 너비의 합은 100%를 넘지 않아야 합니다.100%가 넘어가는 경우 마지막 모듈은 아래로 배치되게 됩니다.
    각 모듈의 너비 사이즈는 배치를 원하는 개수를 100%에 나눠 계산 해주세요.
    2개 = 50%3개 = 33%, 34%, 33%4개 = 25%
    화면에 딱 맞게 사이즈를 배치하기 위에서는 세 위젯의 너비의 합이 100% 맞아 떨어지는게 좋습니다. (3개열 참조)


    - 좌/ 우 배치​​위 사진처럼 세개의 모듈이 좌/우로 나뉘어진 배치는 하위모듈 추가를 활용합니다.

    ​사진처럼 좌측에 넓게 모듈이 하나있고, 우측에 2행의 모듈을 배치할때는좌측의 위젯의 너비를 적절하게 설정해주세요.사진의 탭 최신글 스킨의 너비는 80% 입니다.
    우측으로 보내기 위한 모듈의 너비는 20%로 설정하여 같은 열에 배치되도록 해줍니다.
    사진처럼 퀵버튼 위젯(rb.quick_btns) 아래로 모듈을 설치하기 위해서는, 사진처럼 모듈에 있는 + 버튼을 눌러하위 모듈을 설치할 수 있습니다.
    높이는 상단의 모듈에 마우스를 오버하면 표시되는 그래버로 좌측의 모듈의 높이에 일정하도록 직접 조정해주세요.

    - 2열 최신글 배치

    이제까지 잘 따라오셨다면 위 위젯의 모듈 배치는 어렵지 않으실겁니다.2열로 배치된 모듈이기 때문에 각 모듈의 너비는 50%로 배치합니다.


    - 1열 최신글 배치

    기본적으로 모듈의 배치는 너비사이즈를 따로 건드리지 않는 이상 자동으로 100% (1열배치)로 추가됩니다.



    좌측열 모듈배치는 각 위젯을 등록해주시면 됩니다.(가로사이즈 기본 100% 사용)
    • 1760570556_2a07846dfcb7f33c_clipboard_image_1760570554590.png
    • 116
    • 오래 전
      2025.10.02
  • 오래 전
  • 10분 동안 아무 반응 없다면 자동 로그아웃 시키기!
  • 안녕하세요...미니님a입니다.
    은행권 같은 곳에 로그인 하면 10분간 아무런 액션이 없으면, 자동 로그아웃 되는 기능과 동일한 팁이라 보시면 됩니다.당연히 다른 메뉴를 이용하면 그 시간은 초기화 가 됩니다.
    설정은 10분이긴 하나, 사용하시는 분에 입맛에 맞게 변경 하시면 됩니다.사용하시는 로그인 스킨/outlogin.skin.2.php 파일을 열어주세요
    적당한 위치에 아래 코드를 작성합니다.<li style="color: #ff0000; font-weight: bold; margin: 10px 0; font-size: 14px; text-align:center;"> <div id="auto_logout_timer"> 자동 로그아웃: <span id="timer_display">1:00</span> </div> </li>예제로 사용된 스킨은 기본 베이직 스킨이라 li 요소에 넣었습니다. 스크린샷은 아래를 참고 하세요

    그리고 하단에 스크립트 닫기 태그 위에 아래 코드를 넣어주시면 됩니다.
    // 자동 로그아웃 타이머 (1분 = 60초) function autoLogoutTimer(url) { var timeLeft = 600; // 600초 (10분) var timerDisplay = document.getElementById('timer_display'); function updateTimer() { var minutes = Math.floor(timeLeft / 60); var seconds = timeLeft % 60; // 초를 2자리로 표시 (예: 09, 08, 07...) timerDisplay.textContent = minutes + ':' + (seconds < 10 ? '0' : '') + seconds; if (timeLeft <= 0) { // 타이머가 0이 되면 자동 로그아웃 location.href = url; } else { timeLeft--; } } // 초기 표시 updateTimer(); // 1초마다 타이머 업데이트 setInterval(updateTimer, 1000); } // 실행 const logoutUrl = "<?php echo G5_BBS_URL ?>/logout.php?url=<?php echo $urlencode ?>" autoLogoutTimer(logoutUrl);
    마찬가지로 스크린샷 참고 하시면 됩니다.

    그럼 해당 시간은 실시간으로 타이머가 보이면서, 정해진 시간이 흐르면 자동 로그아웃 처리가 됩니다.고맙습니다.
    • 978180634_1759367710.4231.png
    • 115
    • 오래 전
      2025.09.25
  • 오래 전
  • 그누보드(영카트) 5.6.23 팝빌알림톡제거 없데이트 관련 FTP상에서 파일제거 경로
  • 그누보드(영카트) 5.6.23 팝빌알림톡제거 없데이트 관련 FTP상에서 파일제거 경로
    안녕하세요?bank365 입니다.그누보드(영카트) 5.6.23에서 팝빌알림톡이 제거 가 되었는데요.깃허브를 보고, 삭제하기 햇갈려 하는 사람들을 위해직접 깃허브 삭제 내용을 들고 왔습니다.
    root = html / www 등의 최상위 경로를 의미합니다.
    root/adm/alimtalkpreset.phproot/adm/alimtalkpreset_popbill.phproot/adm/alimtalkpresetupdate.phproot/adm/img/svc_btn_07.jpgroot/adm/shop_admin/orderalimtalk.inc.php
    삭제root/extend/kakao5.extend.php

    삭제
    root/js/kakao5.js
    삭제
    root/plugin/kakao5 폴더전체
    삭제
    나머지 팝빌관련 파일들은 그누보드(영카트) 5.6.23 업데이트시삭제가 아닌 (핍빌과 관련된 소스)php 파일이 수정되었음을 알려드리며패치파일 덮어씌우기 혹은 전체 그누보드 파일 덮어씌우기등 편하신 방법대로 진행해 주심 되겠습니다.
    ==================================================================

    위 파일과 폴더등을 모두 삭제후,phpmyadmin(mysql) | mariadb 에 등록된 팝빌관련 DB테이블 삭제 하는 법
    https://sir.kr/g5_tip/24277[5.6.23 버전] 알림톡 DB 테이블 및 필드 제거 방법 > 그누보드5 팁자료실그누보드는 PHP, Python 언어로 만들어진 오픈소스 무료 게시판입니다. 그누보드, 무료게시판, 무료쇼핑몰, 영카트, 리액트 게시판, React 게시판, 컨텐츠몰, 제작의뢰, 전자결제, 결제대행사, Python, CMS, 파이썬 게시판, PHP 게시판, python 게시판, fastapi 게시판, [5.6.23 버전] 알림톡 DB 테이블 및 필드 제거 방법 > 그누보드5 팁자료실https://sir.kr/g5_tip/24277
    에서 uninstall_kakao5.php (8.8K) 2025-09-23 09:31:17 를 다운로드 받아
    root/adm 에 업로드후(관리자 아이디admin로  로그인후 진행해 주세요)https://도메인이름.도메인확장자/adm/uninstall_kakao5.php 를 실행해 주신후 화면에 보이는 설명대로 진행해 주시면 됩니다.(ex// https://storybank.me/adm/uninstall_kakao5.php)
    phpmyadmin(mysql) | mariadb 에 등록된 팝빌관련 DB테이블을 삭제 진행후root/adm/uninstall_kakao5.php 를 FTP 계정에서 삭제해 주시면 끝

    저처럼 찌꺼기 파일에 민감하신 분들을 위해 적어보았습니다감사합니당
    • 114
    • 오래 전
      2025.09.08
  • 오래 전
  • 그누보드 게시판에서 이모지 사용하는 방법
  • define('G5_DB_CHARSET', 'utf8');define('G5_DB_CHARSET', 'utf8mb4');

    의외로 모르시는 분들이 많은것 같아요.그누보드 설치 전 그누보드가 설치 되어있는 최상위 폴더에 있는 config.php 파일에서 utf8 -> utf8mb4 로 변경해주시면 됩니다.
    • 113
    • 오래 전
      2025.09.02
  • 오래 전
  • 내가 쓴 글이 아니라면 읽기 금지 설정
  • 안녕하세요...미니님a입니다. 게시판 리스트 내 글 읽기를 내가 쓴 글이 아니라면 읽지 못하게 해야 할 경우 사용할 수 있는 코드입니다. 사용하시는 스킨/view.skin.php 파일을 열어주세요적당한 위치에 if (!$is_admin && $view['mb_id'] !== $member['mb_id']) { alert('내가 쓴 게시글이 아닙니다.'); exit; }  넣어주시면 됩니다. 내가 쓴글만 읽을 수 있으며, 관리자는 그냥 통과 됩니다.고맙습니다.
    • 112
    • 오래 전
      2025.08.06
  • 오래 전
  • [리빌더 버그 수정] 보낸쪽지 확인 불가
  • 리빌더에서 보낸쪽지를 확인할 수 없는 버그가 있습니다.제 환경에서만 그런지는 모르겠으나, 리빌더 데모 사이트에서도 동일한 현상으로 보아 같은 버그인 듯 합니다.

    문제되는 파일 : bbs/memo_view.php
    문제가 발생하는 이유- 받고, 보낸 쪽지에 따른 분기문 바깥에서 아래의 쿼리로 모든 경우에서 받은사람의 아이디를 현재접속한 계정의 아이디로 검색합니다.- 이런 경우 받은쪽지를 볼 경우에는 당연히 접속한 계정의 id로 받은 쪽지를 검색하니, 문제가 발생되지 않습니다.- 다만, 보낸 쪽지의 경우 내가 나에게 보낸 쪽지가 아닌이상 받은사람은 다른 사람인데, 내 아이디를 검색하니 정상의 경우가 아닙니다.
    해결 방법
    1. 39번째 줄에 있는 아래 구문을 삭제하세요.$c = sql_fetch (" select COUNT(*) as cnt from {$g5['memo_table']} where me_id = '$me_id' and me_recv_mb_id = '{$member['mb_id']}' ");
    2. 37번째줄 $memo = sql_fetch($sql); 구문 아래에 다음 코드를 추가하세요.$qry = sql_query($sql);$memo_count = sql_num_rows($qry);
    3. 바로 다음의 if($c['cnt'] < 1) { 구문을 if($memo_count < 1) { 으로 변경해주세요.


    수정 된 코드<?phpinclude_once('./_common.php');
    if (!$is_member)    alert('회원만 이용하실 수 있습니다.');
    $me_id = isset($_REQUEST['me_id']) ? (int) $_REQUEST['me_id'] : 0;
    if ($kind == 'recv'){    $t = '받은';    $unkind = 'send';
        $sql = " update {$g5['memo_table']}                set me_read_datetime = '".G5_TIME_YMDHIS."'                where (me_id = '$me_id' or me_send_id = '$me_id' )                and me_recv_mb_id = '{$member['mb_id']}'                and me_read_datetime = '0000-00-00 00:00:00' ";    sql_query($sql);
        $sql = " update `{$g5['member_table']}` set mb_memo_cnt = '".get_memo_not_read($member['mb_id'])."' where mb_id = '{$member['mb_id']}' ";    sql_query($sql);}else if ($kind == 'send'){    $t = '보낸';    $unkind = 'recv';}else{    alert($kind.' 값을 넘겨주세요.');}
    $sql = " select * from {$g5['memo_table']}            where me_id = '$me_id'            and me_{$kind}_mb_id = '{$member['mb_id']}' ";$memo = sql_fetch($sql);$qry = sql_query($sql);$memo_count = sql_num_rows($qry);
    if($memo_count < 1) {    alert('삭제 되었거나 존재하지 않는 쪽지 입니다.');}
    • 111
    • 오래 전
      2025.07.29
  • 오래 전
  • 리스트에서 제목 OOO 표시 하기
  • 게시판 리스트에서 제목을 가리는 팁입니다.
    해당 게시판 list.skin.php 문서에서
    echo $list[$i]['subject'] 이부분을 찾아 아래와 같이 수정해주세요.echo 'OOO'.substr($list[$i]['wr_subject'], 3, strlen($list[$i]['wr_subject']) - 3);
    5개를 원하시면OOOOO 하시고 숫자 3을 5로 수정해 주시면 됩니다.
    • 110
    • 오래 전
      2025.07.25
  • 오래 전
  • php 8.2.28 회원 가입 시 나타나는 경고 수정
  • 안녕하세요...미니님a입니다.
    php8.2.28 버전에서 회원 가입 시 회원 가입 버튼이 경고 창에 의해 이상하게 출력 됩니다.테스트 버전은 최신 버전인 2.2.1.5 버전입니다.

    해당 php 버전에서 회원 가입 시도 시 아래 처럼 경고가 발생합니다.



    register_form.skin.php 파일 내 453번 라인 근처에 보면 아래 코드가 있습니다.
    <button type="submit" class="btn_submit font-B" accesskey="s"><?php if ($re == "re") { ?>전환가입<?php } else { ?><?php echo $w==''?'회원가입':'정보수정'; ?><?php } ?></button>
    해당 코드를 아래 코드로 변경 해주시면 오류는 사라집니다.
    <button type="submit" class="btn_submit font-B" accesskey="s"><?php if (isset($re) && $re == "re") { ?>전환가입<?php } else { ?><?php echo $w==''?'회원가입':'정보수정'; ?><?php } ?></button>





    ======================================================================

    추가) 25.07.25 10:47
    회원 가입 시 input hidden 값을 넘어가는 부분의 경고창도 확인하였습니다.


    같은 파일 50번 라인에서 수정 할 수 있습니다.
    [code]<input type="hidden" name="re" value="<?php echo $re ?>">[/code]
    위 코드를 아래 코드로 변경 해주세요
    [code]<input type="hidden" name="re" value="<?php echo isset($re) ? $re : ''; ?>">[/code]







    고맙습니다.
    • 1753407494_c0f41537fb5fdb2c_image.png
    • 109
    • 오래 전
      2025.07.22
  • 오래 전
  • 카테고리 일괄 변경
  • extend/user.config.php 파일에 아래 코드 추가

    sql_query(" update g5_write_free set ca_name = 변경 될 카테고리명 where ca_name = '기존 카테고리명' ");
    참고 : g5_write_free > free는 게시판명
    새로 고침하면 변경된거 확인 가능 하고변경 된것 확인 하시고 삭제 해주세요.
    • 108
    • 오래 전
      2025.07.17
  • 오래 전
  • 관리자 화면 내 구독 PHP8 오류 출력
  • 안녕하세요...미니님a입니다.
    구독 관리 메뉴 (관리자) 접근 시 PHP8 버전에는 경고가 발생합니다.

    혹시나 싶어서 리빌더 측 새로운 채신!!! 파일 다운로드 하여 업로드 해봤지만, 같은 경고창이 뜨는 것을 확인 하였습니다.
    경로는 스샷에 보는 것 처럼
    /adm/rb/subscribe_form.php  파일 152 번 라인 / 153번 라인입니다.
    <?php    for ($i=0; $rowss=sql_fetch_array($result_is); $i++) {        $mbx1 = get_member($rowss['sb_mb_id']);        $mbx2 = get_member($rowss['sb_fw_id']);        $name1 = get_text($mbx1['mb_nick']);        $name2 = get_text($mbx2['mb_nick']);                if($rowss['sb_push'] == 1) {            $sb_push = "알림수신";        } else {             $sb_push = "-";        }         $bg = 'bg'.($i%2);     ?>
    위 코드를 아래 코드로 변경 해주시면 경고는 사라지게 됩니다.
    <?php    for ($i=0; $rowss=sql_fetch_array($result_is); $i++) {        if (isset($rowss['sb_mb_id']) && $rowss['sb_mb_id']) {            $mbx1 = get_member($rowss['sb_mb_id']);            $name1 = isset($mbx1['mb_nick']) ? get_text($mbx1['mb_nick']) : '';        } else {            $name1 = '';        }         if (isset($rowss['sb_fw_id']) && $rowss['sb_fw_id']) {            $mbx2 = get_member($rowss['sb_fw_id']);            $name2 = isset($mbx2['mb_nick']) ? get_text($mbx2['mb_nick']) : '';        } else {            $name2 = '';        }         if(isset($rowss['sb_push']) && $rowss['sb_push'] == 1) {            $sb_push = "알림수신";        } else {             $sb_push = "-";        }         $bg = 'bg'.($i%2);     ?>

    고맙습니다.
    • 107
    • 오래 전
      2025.07.04
  • 오래 전
  • 리빌더 스크롤 개선 팁입니다. (모바일)
  • 리빌더로 제작된 사이트들을 보면 스크롤이 네이티브의 경험과 좀 다름을 느꼈습니다.그래서 수정점을 찾아 공유합니다.
    수정이 필요한 파일/theme/rb.basic/rb.css/mobile.css
    수정한 부분@media all and (max-width:1024px) 미디어 쿼리 최상단 html body 태그
    원본 코드html, body {overflow-x: hidden; background-color: #fff !important;}
    수정 코드html, body {overflow-x: hidden; background-color: #fff !important; height: auto;}
    --------
    결과 (비포 / 애프터)
    -before-


    -after-



    • Uploaded Image
    • 106
    • 오래 전
      2025.07.01
  • 오래 전
  • 내용관리 (일반페이지 생성) 에서 모듈출력 사용하기
  • 내용관리 생성 > php 파일내 div코딩 > 파일업로드 순으로 하시면 되겠습니다.
    리빌더 2.2.1.4 버전 부터 작동합니다.

    1. 관리자모드 > 게시판관리 > 내용관리 에서 페이지를 생성합니다. (id : about 이라고 가정)내용관리를 생성하실때 스킨을 (테마)rb.basic 을 지정해주세요.
    2. about.php 파일을 만든 후 모듈추가가 가능한 div를 코딩합니다.<div class="flex_box" data-layout="고유한이름"></div>
    3. /theme/rb.basic/rb.page/ 경로에 만드신 about.php 파일을 업로드합니다. (내용관리의 id와 파일이름을 동일하게)4. 도메인/bbs/content.php?co_id=about  으로 접속합니다. (짧은주소 사용시 : 도메인/content/about)5. 관리자 로그인 후 해당 페이지에서 모듈추가 버튼으로 모듈을 추가합니다.
    2 에서 <div class="flex_box" data-layout="고유한이름"></div> 를 여러개 만드신 후에CSS로 레이아웃을 잡아주셔도 됩니다.




    감사합니다.
    • Uploaded Image
    • 105
    • 오래 전
      2025.07.01
  • 오래 전
  • 익명 게시판 닉네임 500개 추가 하기
  • 안녕하세요...미니님a입니다.
    리빌더에서 제공하는 익명 게시판에 닉네임이 50개 가량 동물 이름으로 되어있습니다.여기에 명사까지 추가 하여 500개를 추가적으로 포함한 파일입니다.
    그냥 심심해서 만들어봤습니다.다운로드 받은 텍스트 파일을 익명 게시판 스킨 폴더에 넣어주시면 됩니다.

검색

게시물 검색