×

앱 설치 안내

리빌더 공식 홈페이지 바로가기를 PC에 설치해보세요!
바탕화면에서 앱으로 실행할 수 있어요.

팁과노하우

  • 팁과노하우 포인트 정책
      글쓰기
      100P
      댓글
      10P
  • 전체 111건 / 3 페이지
    • 81
    • 오래 전
      2025.03.12
  • 오래 전
  • [멤버십] 탈퇴한 회원의 경우 home 접근 / 구독 정보 삭제
  • 안녕하세요...미니님a입니다.
    게시판 보다가 https://rebuilder.co.kr/qna/2303미니홈 최근게시물 및 구독관련 > 질문과 답변 | 그누보드 리빌더웹사이트 부터 쇼핑몰, 그리고 플랫폼 까지! 가볍게 만들고 묵직하게 확장하는 그누보드 리빌더https://rebuilder.co.kr/qna/2303
    내용을 보면서 버그로 판단 되는 부분을 빠르게 수정 하였습니다.권한은 일단 패스하고
    1. 또한 실제로 없는 아이디의 경우와 탈퇴한 경우에도 구독버튼이 정상 작동하는 문제도 보입니다.
    이 부분 해결 해보겠습니다.
    먼저 rb/home.php 파일을 열어주세요
    그리고 19번 라인 다음에 (회원정보가 존재하지 않는다)아래 코드를 넣어주세요[code]// 탈퇴한 회원인지 확인 if (!empty($mb['mb_leave_date'])) {     alert('탈퇴한 회원입니다.', G5_URL); }[/code]

    ===========================================여기서부터는 멤버십 내용입니다.
    회원 탈퇴 시 구독자가 줄어들지 않고 탈퇴한 사용자 이름이 그대로 있는 버그가 있어 수정하였습니다. extend/rb_subscribe.extend.php 파일을 열어주세요
    맨 하단에 훅을 이용해 회원 탈퇴 시 구독 리스트에서 삭제하는 코드입니다. 맨 하단에 그냥 코드 그대로 넣어주시면 됩니다.
    [code] add_event('member_leave', 'sb_member_leave', G5_HOOK_DEFAULT_PRIORITY, 1);
    function sb_member_leave($member) {     global $g5;     $sql = "DELETE FROM rb_subscribe WHERE sb_mb_id = '{$member['mb_id']}'";     sql_query($sql); } [/code]
    또한 회원 탈퇴가 된 경우, 구독을 할 수 없도록 수정하여야 합니다.제작된 원본 코드는 json 으로 반환은 하지만, 메시지가 반환 되지 않는 구조라, 어쩔 수 없이 자바스크립트를 통해 수정해야 합니다. 


    수정 해야 될 부분은 2곳입니다.rb/rb.mod/subscribe/subscribe.skin.phprb/rb.mod/subscribe/subscribe_my.skin.php
    2개의파일 동일하게 수정해주시면 됩니다.
    5번 라인에 2줄을 넣어주세요[code]$sb_mb = get_member($sb_mb_id); $is_leave = $sb_mb['mb_leave_date'] && $sb_mb['mb_leave_date'] !== '';[/code]
    스크린샷은 다음과 같습니다.

    그리고 밑에 <a class 되어있는 부분의 onclick 이벤트에서 is_leave 를 추가해주셔야 합니다.
    [code]onclick="subscribe_add('<?php echo $member['mb_id'] ?>', '<?php echo $sb_mb_id ?>', '<?php echo $is_leave ?>');"[/code]


    마지막으로 자신을 구독할 수 없습니다. 라는 스크립트 구문에 else if 를 추가 합니다.
    [code]}else if(is_leave) {  alert('탈퇴한 회원입니다.');  return false; } else {[/code]
    스크린샷은 다음과 같습니다.

    이렇게 하시면 구독 및 탈퇴한 회원의 홈 접근을 막을 수 있습니다.고맙습니다.



    • Uploaded Image
    • 80
    • 오래 전
      2025.03.12
  • 오래 전
  • [수정][멤버십] PHP8 에서 구독 + 서명 사용 시 오류 수정
  • 안녕하세요...미니님a입니다.
    php8 환경에서 게시판 내 서명 사용 시,회원 프로필 정보가 나오는데요
    구독을 이용시 구문 오류가 발생합니다.
    해당 내용은 다음과 같이 수정할 수 있습니다.rb/rb.mod/subscribe/subscribe.skin.php 파일을 열어주세요
    3번 라인에 다음 코드를 넣어주시면 됩니다.[수정 - 03.12 14:40] - member > view 로 변경$sb_mb_id = $view['mb_id'];
    스샷 참고 하시길 바랍니다.




    해당 변수가 설정되지 않아 발생한 구문 오류였습니다.
    위 내용 적용 시 정상적으로 이용할 수 있습니다.


    고맙습니다.
    • Uploaded Image
    • 79
    • 오래 전
      2025.03.11
  • 오래 전
  • 마이 페이지 내 새글 / 새댓글에서 특정 게시판은 제외 하기
  • 안녕하세요...미니님a입니다.
    새글 / 새댓글에서 모든 게시판이 다 나와서 특정 게시판을 제외 하고 싶다는 의견이 있어별도로 팁으로 작성합니다.
    해당 기능은 "본인은 다 보이며, 타인이 내 홈에 왔을 땐 보이지 않는 기능" 입니다.
    예를 들어 익명 게시판 / 질문과 답변 등등
    이런 게시판은 새글 혹은 새 댓글에서 제외할 수 있습니다.
    또한 해당 팁은 별도로 스킨을 제작하거나 코드를 포함하지 않으므로, 별도로 추가 하시길 바랍니다.추후 업데이트 되는 내용이 있어 덮어 씌워질 경우 해당 코드가 유실 될 수 있으니 별도 보관 혹은 스크랩 해두셔서 관리하시길 바랍니다.
    다음 파일을 찾아주세요theme/skin/rb.basic/skin/member/rb.member/home.skin.php 
    여기에서 아래 코드를 찾아주세요 대략 260번 라인 근처에 있을꺼에요
    <?php if($ca == "bbs" || $ca == "") { ?>
    위 코드 아래에 보면  $sql_commons = " from {$g5['board_new_table']} a, {$g5['board_table']} b where a.bo_table = b.bo_table and a.wr_id = a.wr_parent and a.mb_id = '{$mb['mb_id']}' order by a.bn_id desc ";
    이 코드를 아래 코드로 변경 해주시면 됩니다.  // 제외할 게시판 배열 정의 $exclude_boards = array('free', 'notice'); // 제외할 게시판 테이블명 추가 // 제외할 게시판 조건 생성 $exclude_condition = "";  if($member['mb_id'] != $mb['mb_id'] && !empty($exclude_boards)) {     $exclude_condition = " and a.bo_table NOT IN ('" . implode("','", $exclude_boards) . "')"; } $sql_commons = " from {$g5['board_new_table']} a, {$g5['board_table']} b where a.bo_table = b.bo_table and a.wr_id = a.wr_parent and a.mb_id = '{$mb['mb_id']}'{$exclude_condition} order by a.bn_id desc ";
    제외할 게시판 배열에 원하는 게시판 이름을 적어주시면 됩니다.이렇게 하시면 해당 게시판에 내용은 생략 되어 새글이 출력 됩니다.
    만약 새 댓글을 사용중이시라면 하나 더 수정 해주셔야 합니다.약 450번 라인 근처에
    <?php if($ca == "comment") { ?> 를 찾아주세요
    그리고 바로 밑에 보면 이 코드가 있습니다.$sql_commons = " from {$g5['board_new_table']} a, {$g5['board_table']} b where a.bo_table = b.bo_table and a.wr_id <> a.wr_parent and a.mb_id = '{$mb['mb_id']}' order by a.bn_id desc ";
    이 코드를 아래 코드로 변경 해주세요
     $exclude_boards = array('free', 'qa', 'faq'); // 제외할 게시판 테이블명 추가 // 제외할 게시판 조건 생성 $exclude_condition = ""; if($member['mb_id'] != $mb['mb_id'] && !empty($exclude_boards)) { $exclude_condition = " and a.bo_table NOT IN ('" . implode("','", $exclude_boards) . "')"; } $sql_commons = " from {$g5['board_new_table']} a, {$g5['board_table']} b where a.bo_table = b.bo_table and a.wr_id <> a.wr_parent and a.mb_id = '{$mb['mb_id']}'{$exclude_condition} order by a.bn_id desc ";

    이렇게 하시면 댓글도 특정 게시판은 제외를 할 수 있습니다.
    실제 구동 영상은 아래와 같습니다.고맙습니다.





    • Uploaded Image
    • 78
    • 오래 전
      2025.03.10
  • 오래 전
  • 비회원의 경우는 특정 게시판의 댓글을 볼 수 없게 해봅시다.
  • 안녕하세요...미니님a입니다.
    부득이하게 모든 게시판은 아니더라도, 특정 게시판에 댓글은 회원만 이용 가능하게 설정 해야 할 때가 있을 경우유용하게 사용할 수 있을 것입니다.
    결과 화면만 보면 다음과 같습니다.
    기본 / 통합 모두 적용 가능하며, 특정 게시판만 설정할 수 있습니다.
    기본: 스킨 폴더 내 view_comment.skin.php 파일통합: 스킨 폴더 내 skin/cmt/basic/skin.php 파일 입니다.
    찾을 소스는 다음과 같습니다.
    [code]<p>     <?php if (strstr($list[$i]['wr_option'], "secret")) { ?><img src="<?php echo $board_skin_url; ?>/img/ico_sec.svg" alt="비밀글"><?php } ?>     <?php echo $comment ?> </p>[/code]
    위 소스를 아래 소스로 변경 해주세요
    [code]<?php  $bo_table_array = ['free', 'notice'];  if(!$is_member && in_array($bo_table, $bo_table_array)) { ?>   <p>비회원은 댓글 열람이 불가능합니다.</p>   <p><a href="<?php echo G5_BBS_URL ?>/login.php?url=<?php echo $urlencode; ?>">로그인 해주세요</a></p>   <?php } else { ?>     <?php if (strstr($list[$i]['wr_option'], "secret")) { ?><img src="<?php echo $board_skin_url; ?>/img/ico_sec.svg" alt="비밀글"><?php } ?>     <?php echo $comment ?>    <?php } ?>[/code]
    끝입니다.
    위 소스 기준 자유게시판과 / 공지사항은 비회원이 댓글 열람이 불가능합니다.만약 자유게시판과 / 공지사항을 빼고 모두 열람하게 하고 싶다면  if(!$is_member && in_array($bo_table, $bo_table_array)) { ?>이부분에서 !in_array 로 느낌표만 추가 해주시면 반대로 설정할 수 있습니다.
    고맙습니다.

    • Uploaded Image
    • 77
    • 오래 전
      2025.03.07
  • 오래 전
  • [나노팁] 로그아웃 후 현재 페이지 유지하기

  • 로그인은 현재 페이지가 유지되는데 로그아웃을 하면 홈으로 이동되어 알아온 팁~
    /bbs/logout.php 에서

    } else {    $link = G5_URL;}

    이 부분을

    } else {    //$link = G5_URL;    $link = $_SERVER['HTTP_REFERER'];}if(!$_SERVER['HTTP_REFERER']){    $link = "/";}

    이렇게 수정
    • 76
    • 오래 전
      2025.03.07
  • 오래 전
  • [수정] 회원 가입 시 아이디는 반드시 영문 + 숫자를 포함 하기
  • 안녕하세요...미니님a입니다.
    회원 가입 시 영어만 쓸 수 있지만,특정 사이트에서는 영문 + 숫자를 반드시 써야 가입되는 사이트도 종종 보신 적 있으실 것입니다.그 기능 별거 아닙니다. 단순히 스크립트만 추가해주면 되는 기능입니다.
    theme\rb.basic\skin\member\rb.member\register_form.skin.php 파일을 열어주세요
    약 560번 라인에 다음 코드를 찾아주세요
    // 회원아이디 검사     if (f.w.value == "") {         var msg = reg_mb_id_check();         if (msg) {             alert(msg);             f.mb_id.select();             return false;         }     }
    해당 코드 바로 밑에 아래 코드를 넣어주시면 끝입니다.
    const hasLetter = /[a-zA-Z]/.test(f.mb_id.value);     const hasNumber = /[0-9]/.test(f.mb_id.value);       if (!hasLetter || !hasNumber) {         alert("아이디는 반드시 영문자와 숫자를 모두 포함해야 합니다.");         $("#reg_mb_id").focus();         return false;     }
    어딘지 잘 모르겠다? 하시면 아래 스크린샷 참조 하세요

    끝입니다.
    이렇게 하시면, 회원가입 시 반드시 영문과 숫자를 하나 포함해야 회원 가입 진행이 가능합니다.코드를 넣었음에도 동작하지 않는다면 일명 강력 새로고침인 컨트롤 + F5를 해주시면 정상 적용 됩니다.
    [추가] 25.0.03.07 11:27:00
    만약 회원 가입 시도 할 때, 아이디 체크 부분에서 해당 기능을 이용 할려면 bbs/ajax.mb_id.php 파일을 수정 할 수 있습니다.단. 해당 파일은 바뀔일은 없겠지만, 어찌 되었던 기본적으로 코어를 수정 지향하고 있으므로 차후 발생하는 문제는 책임지지 않습니다.
    해당 파일을 열어 아래 코드를 찾아 주세요 if ($msg = reserve_mb_id($mb_id))   die($msg);
    그 밑에 아래 코드를 넣어주시면 됩니다. // 아이디에 영문자와 숫자가 모두 포함되어 있는지 확인 $hasLetter = preg_match('/[a-zA-Z]/', $mb_id); $hasNumber = preg_match('/[0-9]/', $mb_id); if (!$hasLetter || !$hasNumber) {     die("아이디는 반드시 영문자와 숫자를 모두 포함해야 합니다."); }
    이렇게 하시면 아래 스크린샷 처럼 동작합니다.
     

    실제 구동 영상은 아래와 같습니다.고맙습니다.

     
    • b8ef608a226fefa19e7c0de8a22ef26e_1741310705_6993.png
    • 75
    • 오래 전
      2025.03.05
  • 오래 전
  • [나노팁]SSL 설정 후 http로 접속되는 거 https로 강제 전환하기


  • 모바일에서 자꾸 http로 접속되길래 이곳저곳 찾다가 적용되는거 발견해서 끄적입니다.지피티에 물어봤어요 지피티짱~~
    _common.php  여기 맨 위에 넣어주시면 끝

    <?php
    // common.php 파일 최상단에 추가

    if (!isset($_SERVER['HTTPS']) || $_SERVER['HTTPS'] !== 'on') {
        $redirect = "https://" . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
        header("Location: " . $redirect, true, 301);
        exit();
    }
    ?>
     


    • 74
    • 오래 전
      2025.03.04
  • 오래 전
  • [수정] 별점 게시판의 점수를 5점이 아닌 10점으로 늘리기
  • 안녕하세요...미니님a입니다.
    최근에 유료로 공개된 별점 게시판에 5점을 10점으로 변경하는 팁입니다.영화도 10점 만점이니 5점이 부족하다고 느끼시는 분들에게는 유용하시리라 생각됩니다.
    큰 작업은 아닙니다.
    1. 해당 스킨의 style.css 를 열어주세요그 이후 컨트롤 + F 를 눌러 .star-rating 을 검색 합니다[추가 수정]2개가 나옵니다. .star-rating {position: relative;width: 120px;height: 24px;background-size: 24px 24px;cursor: pointer; touch-action: none;} .star-rating-container-v .star-rating {position: relative;width: 150px;height: 30px;background-size: 30px 30px;cursor: pointer; touch-action: none; margin: 0 auto; margin-top: 20px;}
    여기에서 가로를 120px > 240px 로 변경 해주세요그리고 하단에 150px > 300px로 변경 해주세요
    2. 해당 스킨의 write.skin.php 파일을 열어 주세요 144번 라인에 const maxStars = 5;
    위 코드 5를 10으로 만 변경 해주시면 됩니다.
    [추가 수정]생각해보니, 리스트랑 뷰도 수정해야 됩니다 ㅠㅠ
    3. 해당 스킨의 list.skin.php 파일을 열어주세요238번 라인에
    $star_bg = $star * 20;
    위 코드의 20을 10으로 변경 해주시면 됩니다.
    4. 해당 스킨의 view.skin.php 파일을 열어주세요121번 라인에
    $star_bg = $star * 20;
    위 코드를 10으로 변경 해주시면 됩니다.
    [추가수정]
    그리고 다음 코드를 검색 해주세요[code]const maxStars = 5;[/code]
    5를 10으로 변경 해주시면 됩니다.
    마지막으로 581번 라인 다음 코드를 찾아 주세요[code]// 별점 개수 조회 (새로운 구간 적용)$row_s1 = get_star_count($write_table, $wr_id, 4.5, 5.0); // 4.5~5.0$row_s2 = get_star_count($write_table, $wr_id, 3.5, 4.0); // 3.5~4.0$row_s3 = get_star_count($write_table, $wr_id, 2.5, 3.0); // 2.5~3.0$row_s4 = get_star_count($write_table, $wr_id, 1.5, 2.0); // 1.5~2.0$row_s5 = get_star_count($write_table, $wr_id, 0.5, 1.0); // 0.5~1.0                       [/code]
    위 코드를 아래 코드로 변경 해주세요[code]$row_s1 = get_star_count($write_table, $wr_id, 9.0, 10.0); // 9.0~10.0$row_s2 = get_star_count($write_table, $wr_id, 7.0, 8.9);  // 7.0~8.9$row_s3 = get_star_count($write_table, $wr_id, 5.0, 6.9);  // 5.0~6.9$row_s4 = get_star_count($write_table, $wr_id, 3.0, 4.9);  // 3.0~4.9$row_s5 = get_star_count($write_table, $wr_id, 0.1, 2.9);  // 0.1~2.9[/code]
    마지막으로 649번 라인에 그래프 레이블 수정 하면  됩니다.[code]labels: ["4.5~5.0", "3.5~4.0", "2.5~3.0", "1.5~2.0", "0.5~1.0"],[/code]
    위 코드를 아래 코드로 변경 해주세요[code]labels: ["9.0~10.0", "7.0~8.9", "5.0~6.9", "3.0~4.9", "0.1~2.9"],[/code]



     
    고맙습니다.
    • e19cd3d21f771ffd4d77adf281252782_1741076901_4192.png
    • 73
    • 오래 전
      2025.03.04
  • 오래 전
  • 회원 정보 수정 이후 원하는 페이지로 이동하기
  • 안녕하세요...미니님a입니다. 그누보드 시스템 내 정보 수정 시 다시 정보 수정 페이지로 이동 하게 구성 되어있습니다.회원 가입이 아닌 정보 수정의 경우 완료가 된 뒤 원하는 페이지로 이동 하게끔 만들어진 팁입니다.다른 코드 수정 없이 해당 기능을 이용할 수 있습니다. extend 폴더에 아무 이름이나 만들어주세요만약 구분하기 위함이라면 register_form_update.extend.php 이렇게 이름 지어주셔도 됩니다.이름은 말 그대로, 나중에 쉽게 찾기 위함입니다. 그리고 아래 코드만 넣어주시고, 원하시는 주소로 변경 해주시면 끝입니다.예제 코드는 정보 수정 이후 자유게시판으로 이동 하는 코드입니다. 당연히 수정되는 정보는 잘 저장 됩니다.
    <?php if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가 add_event('register_form_update_after', 'register_form_update_after_event', G5_HOOK_DEFAULT_PRIORITY, 2); function register_form_update_after_event() { global $w; if($w == 'u') { alert('회원정보가 수정되었습니다.', G5_URL.'/free'); } }끝입니다. 고맙습니다.

     
    • 405480b71760e6f8a2ca03e8425c7a04_1741067017_0974.gif
    • 72
    • 오래 전
      2025.03.04
  • 오래 전
  • 이벤트 게시판 날짜 오류 수정하기!
  • 안녕하세요...미니님a입니다.
    최근 공개된 이벤트 게시판 내 날짜 선택 오류가 존재합니다.아래 스크린샷 확인해주세요
    보시는 바와 같이 3월 7일 시작이고 종료가 3월 2일??인 비정상적으로 선택되는 오류가 있습니다.다시 말해, 종료일 선택 시 시작일 보다 작으면 선택할 수 없도록 해야 합니다. 
    해당 오류를 수정 해봅시다.
    ※ 본 팁은 스킨으로 별도 제작하지 않습니다. 따라서, 아래 코드만 수정 시 정상 이용할 수 있습니다.
    이벤트 게시판/write.skin.php 75번 76번 라인을 찾아주세요아래 코드를 찾으시면 됩니다.
    [code]<input type="text" name="wr_1" class="datepicker_inp datepicker" value="<?php echo isset($write['wr_1']) ? $write['wr_1'] : ''; ?>" id="wr_1" class="input" placeholder="시작일" required autocomplete="off" readonly><input type="text" name="wr_2" class="datepicker_inp datepicker" value="<?php echo isset($write['wr_2']) ? $write['wr_2'] : ''; ?>" id="wr_2" class="input" placeholder="종료일" required autocomplete="off" readonly> [/code]
    위 코드를 아래 코드로 변경 해주세요
    [code]<input type="text" name="wr_1" class="datepicker_start datepicker" value="<?php echo isset($write['wr_1']) ? $write['wr_1'] : ''; ?>" id="wr_1" class="input" placeholder="시작일" required autocomplete="off" readonly><input type="text" name="wr_2" class="datepicker_end datepicker" value="<?php echo isset($write['wr_2']) ? $write['wr_2'] : ''; ?>" id="wr_2" class="input" placeholder="종료일" required autocomplete="off" readonly> [/code]
    그리고 바로 밑에 스크립트를 추가 해주세요[code]<script>        $(function() {            $('.datepicker_start').datepicker({                minDate: 0            });            $('.datepicker_end').datepicker({                minDate: 0,                beforeShow: function(input, inst) {                    var startDate = $('.datepicker_start').datepicker('getDate');                    if (startDate) {                        $(this).datepicker('option', 'minDate', startDate);                    }                }            });                        // 시작일이 변경되면 종료일의 최소 날짜를 업데이트            $('.datepicker_start').on('change', function() {                var startDate = $(this).datepicker('getDate');                if (startDate) {                    $('.datepicker_end').datepicker('option', 'minDate', startDate);                }            });        });    </script>[/code]
    잘 모르겠다? 하시면 아래 스크린샷 참고 하시길 바랍니다.
     위 처럼 설정 시 시작일은 오늘 이전을 선택할 수 없습니다. 아래 스크린샷 처럼요

     종료일의 경우 시작일 이전의 데이터는 선택할 수 없습니다. 아래 스크린샷 처럼요 20일까지라면 20일은 선택할 수 있지만, 19일까지는 선택 불가~~

     
    좋은 스킨 공유 해주셔서 감사합니다.리빌더 화이팅~~
    고맙습니다.
    • 71
    • 오래 전
      2025.03.03
  • 오래 전
  • 광역시/도, 시/군/구 셀렉트로 만들기
  • 붙혀넣으면 바로 써먹을 수 있습니다. :D

     
    [code]                <?php                    /* 게시판에서 사용하는 경우 이걸로 변경 (수정시 selected 처리를 위함)                    $selected_sido = isset($write['wr_1']) ? $write['wr_1'] : '';                    $selected_sigungu = isset($write['wr_2']) ? $write['wr_2'] : '';                    */                    $selected_sido = isset($member['mb_1']) ? $member['mb_1'] : '';                    $selected_sigungu = isset($member['mb_2']) ? $member['mb_2'] : '';                ?>                <span>지역</span>                <div>                    <!-- 게시판이라면 mb_1 > wr_1 -->                    <select id="sido" name="mb_1" class="select w40" required>                        <option value="">광역시/도</option>                    </select>                    <!-- 게시판이라면 mb_2 > wr_2 -->                    <select id="sigungu" name="mb_2" class="select w30">                        <option value="">시/군/구</option>                    </select>
                    </div>                                <script>                const regionData = {                                            "서울특별시": ["종로구", "중구", "용산구", "성동구", "광진구", "동대문구", "중랑구", "성북구", "강북구", "도봉구", "노원구", "은평구", "서대문구", "마포구", "양천구", "강서구", "구로구", "금천구", "영등포구", "동작구", "관악구", "서초구", "강남구", "송파구", "강동구"],                        "부산광역시": ["중구", "서구", "동구", "영도구", "부산진구", "동래구", "남구", "북구", "강서구", "해운대구", "사하구", "금정구", "연제구", "수영구", "사상구", "기장군"],                        "인천광역시": ["중구", "동구", "미추홀구", "연수구", "남동구", "부평구", "계양구", "서구", "강화군", "옹진군"],                        "대구광역시": ["중구", "동구", "서구", "남구", "북구", "수성구", "달서구", "달성군", "군위군"],                        "광주광역시": ["동구", "서구", "남구", "북구", "광산구"],                        "대전광역시": ["동구", "중구", "서구", "유성구", "대덕구"],                        "울산광역시": ["중구", "남구", "동구", "북구", "울주군"],                        "세종특별자치시": [],                        "경기도": ["가평군", "고양시", "과천시", "광명시", "광주시", "구리시", "군포시", "김포시", "남양주시", "동두천시", "부천시", "성남시", "수원시", "시흥시", "안산시", "안성시", "안양시", "양주시", "양평군", "여주시", "연천군", "오산시", "용인시", "의왕시", "의정부시", "이천시", "파주시", "평택시", "포천시", "하남시", "화성시"],                        "강원특별자치도": ["원주시", "춘천시", "강릉시", "동해시", "속초시", "삼척시", "홍천군", "태백시", "철원군", "횡성군", "평창군", "영월군", "정선군", "인제군", "고성군", "양양군", "화천군", "양구군"],                        "충청북도": ["청주시", "충주시", "제천시", "보은군", "옥천군", "영동군", "증평군", "진천군", "괴산군", "음성군", "단양군"],                        "충청남도": ["천안시", "공주시", "보령시", "아산시", "서산시", "논산시", "계룡시", "당진시", "금산군", "부여군", "서천군", "청양군", "홍성군", "예산군", "태안군"],                        "경상북도": ["포항시", "경주시", "김천시", "안동시", "구미시", "영주시", "영천시", "상주시", "문경시", "경산시", "의성군", "청송군", "영양군", "영덕군", "청도군", "고령군", "성주군", "칠곡군", "예천군", "봉화군", "울진군", "울릉군"],                        "경상남도": ["창원시", "김해시", "진주시", "양산시", "거제시", "통영시", "사천시", "밀양시", "함안군", "거창군", "창녕군", "고성군", "하동군", "합천군", "남해군", "함양군", "산청군", "의령군"],                        "전북특별자치도": ["전주시", "익산시", "군산시", "정읍시", "완주군", "김제시", "남원시", "고창군", "부안군", "임실군", "순창군", "진안군", "장수군", "무주군"],                        "전라남도": ["여수시", "순천시", "목포시", "광양시", "나주시", "무안군", "해남군", "고흥군", "화순군", "영암군", "영광군", "완도군", "담양군", "장성군", "보성군", "신안군", "장흥군", "강진군", "함평군", "진도군", "곡성군", "구례군"],                        "제주특별자치도": ["제주시", "서귀포시"]                                      };
                    const sidoSelect = document.getElementById("sido");                const sigunguSelect = document.getElementById("sigungu");
                    function populateSido() {                    for (let sido in regionData) {                        let option = new Option(sido, sido);                        if (sido === "<?php echo $selected_sido; ?>") {                            option.selected = true;                        }                        sidoSelect.add(option);                    }                    updateSigungu();                }
                    function updateSigungu() {                    sigunguSelect.innerHTML = '<option value="">선택</option>';
                        let selectedSido = sidoSelect.value;                    if (selectedSido && regionData[selectedSido]) {                        regionData[selectedSido].forEach(sigungu => {                            let option = new Option(sigungu, sigungu);                            if (sigungu === "<?php echo $selected_sigungu; ?>") {                                option.selected = true;                            }                            sigunguSelect.add(option);                        });                    }                }
                    sidoSelect.addEventListener("change", updateSigungu);
                    populateSido();            </script>[/code]
    • 70
    • 오래 전
      2025.03.02
  • 오래 전
  • 게시판 뷰페이지 첨부사진보다 본문글이 위로 나오게하기
  • 게시판 뷰페이지 들어가보면 사진이 먼저 위로 올라오는데글이 먼저 위에 나오게 하기
        <!-- 본문 내용 시작 { -->    <div id="bo_v_con">                <?php            // 파일 출력
                $v_img_count = count($view['file']);
                if($v_img_count) {                echo "<div id=\"bo_v_img\">\n";
                    foreach($view['file'] as $view_file) {                    echo get_file_thumbnail($view_file);                }
                    echo "</div>\n";            }
            ?>
            <?php echo get_view_thumbnail($view['content']); ?>    </div>
    위에 부분을
    <!-- 본문 내용 시작 --><div id="bo_v_con">    <?php echo get_view_thumbnail($view['content']); ?></div><?php    // 파일 출력 코드 (이제 본문 아래에 위치)    $v_img_count = count($view['file']);    if($v_img_count) {        echo "<div id=\"bo_v_img\">\n";        foreach($view['file'] as $view_file) {            echo get_file_thumbnail($view_file);        }        echo "</div>\n";    }?>

    이렇게 바꿔주시면 반대로됩니다
    • 69
    • 오래 전
      2025.03.01
  • 오래 전
  • 아래로 당겨서 새로고침하기
  • 웹뷰사용시 새로고침버튼이 없어서 새로고침하려면 불편하더라고요네이버카페어플이나 기타 어플 같은경우 아래로 스크롤 하면 새로고침이 되는데그방법입니다 저는 할줄 몰라서 돈주고 배웠습니다 고수님들은 금방하시겠지만저처럼 초보자들에게 필요할까 해서 공유합니다
    적용하고싶은 페이지에 아래내용 넣어주시면 됩니다


       <style>      body {font-family: 'Nanum Myeongjo', 'Apple SD Gothic Neo', '���� ����', serif;    line-height: 1.6;    background-color: #f8f9fa;    color: #333;    overscroll-behavior: contain;ㅂ}      </style><script src="https://unpkg.com/pulltorefreshjs" defer></script><script>    document.addEventListener("DOMContentLoaded", () => {        PullToRefresh.init({            mainElement: '#scroll_container', // 새로고침이 작동할 스크롤 컨테이너            onRefresh() {                return new Promise((resolve, reject) => {                    $.ajax({                        url: window.location.href,                        dataType: 'html',                        success: function(data) {                            // 임시 DOM 객체에 전체 HTML 삽입 후, #scroll_container의 내용 추출                            var newContent = $('<div></div>').html(data).find('#scroll_container').html();                            $('#scroll_container').html(newContent);                            resolve();                        },                        error: function() {                            resolve();                        }                    });                });            },            instructionsPullToRefresh: '당겨서 새로고침',            instructionsReleaseToRefresh: '놓으면 새로고침',            instructionsRefreshing: '새로고침 중...'        });
            const counters = document.querySelectorAll(".stats-value");
            counters.forEach(counter => {            const updateCount = () => {                const target = +counter.getAttribute("data-count");                const count = +counter.innerText.replace(/,/g, '');
                    const increment = target / 200; // 속도 조정
                    if (count < target) {                    counter.innerText = Math.ceil(count + increment).toLocaleString();                    setTimeout(updateCount, 10);                } else {                    const suffix = counter.getAttribute("data-suffix") || "";                    counter.innerText = target.toLocaleString() + suffix;                }            };
                updateCount();        });    });</script> 

    • 68
    • 오래 전
      2025.02.28
  • 오래 전
  • 네이버 카페처럼 메인화면에서 글쓰기버튼 추가
  • 메인화면에 글쓰기 버튼 추가해서 누르면 나의 레벨에서 글쓸수 있는 게시판 목록이 나타나고 목록에서게시판을 선택하여 해당글쓰기로 이동하는 방법입니다여기서 글쓰기버튼을 클릭하면?이렇게 우측에 나의 레벨에서 작성할수 있는 게시판이 나열됩니다여기서 작성하고 싶은 게시판을 선택하면?
     해당 게시판의 글쓰기로 이동이 됩니다



    <style>/* 플로팅 글쓰기 버튼 */#floating-write-btn {  position: fixed;  bottom: 15px; /* 필요시 조정 */  right: 30px;  /* 필요시 조정 */  z-index: 2000;}
    #floating-write-btn button {  width: 60px;  height: 60px;  border: none;  border-radius: 50%;  background-color: #4d33b2; /* 버튼 배경색 */  color: #fff;  font-size: 16px;  cursor: pointer;  box-shadow: 0 4px 8px rgba(0,0,0,0.2);}
    /* 버튼 호버시 효과 */#floating-write-btn button:hover {  background-color: #ff5f1f;  transition: background-color 0.2s;}
    /* 모달 배경 */#board-select-modal {  display: none; /* 기본 숨김 */  position: fixed;  z-index: 99999;  left: 0; top: 0;  width: 100%; height: 100%;  overflow: auto;  background-color: rgba(0, 0, 0, 0.5);}
    /* 모달 컨텐츠 박스 */#board-select-modal .modal-content {  background-color: #1c1c1e;  color: #fff;  margin: 80px auto; /* 수직 가운데정렬 (상단 간격) */  max-width: 320px;  /* 모달 너비 (원하시면 늘리세요) */  border-radius: 8px;  padding: 20px;  position: relative;}
    /* 모달 닫기(X) 버튼 */#board-select-modal .close-modal {  position: absolute;  top: 10px;   right: 15px;  font-size: 24px;  cursor: pointer;}
    /* 모달 제목 */#board-select-modal h2 {  margin: 0 0 15px;  font-size: 18px;  text-align: center;  color: #ffd674; /* 원하는 색상 */}
    /* 목록 초기화 */#board-list {  list-style: none;  padding: 0;  margin: 0;}
    /* 그룹 아이템(접히는 상단) */.group-item {  margin-bottom: 10px;}
    /* 그룹 제목 영역 */.group-title {  background-color: #2c2c2e;  padding: 10px 12px;  border-radius: 6px;  cursor: pointer;  position: relative;  font-size: 14px;  display: flex;  align-items: center;  justify-content: space-between;}.group-title:hover {  background-color: #3a3a3c;}
    /* 그룹 제목 왼쪽 */.group-title-text {  font-weight: bold;}
    /* 펼치기/접기 화살표 (오른쪽) */.group-title .arrow {  font-size: 12px;  margin-left: 5px;  transition: transform 0.2s;}.group-title.open .arrow {  transform: rotate(180deg);}
    /* 하위 게시판 목록(초기 숨김) */.board-sublist {  list-style: none;  margin: 0;  margin-top: 6px;  padding: 0;  display: none; /* 처음에는 숨김 */}
    /* 하위 게시판 항목 */.board-sublist li {  margin-bottom: 6px;}
    .board-sublist li a {  display: block;  background: #4d33b2;  padding: 8px 12px;  border-radius: 4px;  color: #fff;  text-decoration: none;  font-size: 13px;  transition: background-color 0.2s;}.board-sublist li a:hover {  background-color: #444;}</style>
    <!-- 플로팅 글쓰기 버튼 --><div id="floating-write-btn">  <button type="button" title="글쓰기">    <!-- 연필 모양 아이콘 (FontAwesome 등에서 추출한 SVG 예시) -->    <svg aria-hidden="true" focusable="false" width="22" height="22"         viewBox="0 0 512 512" fill="currentColor"         xmlns="http://www.w3.org/2000/svg">      <path d="M497.94 74.17l-60.11-60.1a48 48 0 0 0-67.88 0L15.49 368.52a24 24 0 0 0-6.08 10.87L.15 460.32a24 24 0 0 0 28.83 28.84l81-9.26a24 24 0 0 0 10.86-6.07l354.47-354.4a48 48 0 0 0 .63-67.26zm-386 330.93l-50.72 5.8 5.79-50.66L345.94 80.44l44.9 44.9zm359.64-359.59l-31.92 31.88-44.9-44.9 31.89-31.88a16 16 0 0 1 22.63 0l22.34 22.34a16 16 0 0 1 .02 22.56z"/>    </svg>  </button></div>
    <!-- 모달창 --><div id="board-select-modal">  <div class="modal-content">    <span class="close-modal">&times;</span>    <h2>게시판 선택</h2>    <ul id="board-list">      <?php      // 로그인/권한 확인      if (!$is_member) {          // 비회원이면 안내          echo '<li><a href="'.G5_BBS_URL.'/login.php">로그인 후 이용가능합니다.</a></li>';      } else {          // 그룹 + 게시판 목록을 가져와서 "내 레벨로 쓰기 가능한 게시판"만 분류          $sql = "              SELECT b.bo_table, b.bo_subject, b.bo_write_level, b.gr_id, g.gr_subject                FROM {$g5['board_table']} b                LEFT JOIN {$g5['group_table']} g ON (b.gr_id = g.gr_id)               WHERE b.bo_use_search = '1'            ORDER BY b.gr_id ASC, b.bo_table ASC          ";          $result = sql_query($sql);
              // 그룹별로 묶을 배열          $grouped_boards = array();
              // 데이터 반복          while($row = sql_fetch_array($result)) {              // 내 레벨로 쓰기가 가능한지?              if ((int)$member['mb_level'] >= (int)$row['bo_write_level']) {                  $gr_id = $row['gr_id'];                  // 그룹 이름이 없으면 기본 그룹명 처리                  $group_name = $row['gr_subject'] ? $row['gr_subject'] : '기본그룹';
                      if (!isset($grouped_boards[$gr_id])) {                      $grouped_boards[$gr_id] = array(                          'group_name' => $group_name,                          'boards'     => array()                      );                  }                  // 보드 정보 푸시                  $grouped_boards[$gr_id]['boards'][] = array(                      'bo_table'   => $row['bo_table'],                      'bo_subject' => $row['bo_subject']                  );              }          }
              // 만약 작성가능한 게시판이 전혀 없다면 안내          if (empty($grouped_boards)) {              echo '<li><a href="javascript:void(0)">작성 가능한 게시판이 없습니다.</a></li>';          } else {              // 그룹별로 출력              foreach($grouped_boards as $gr_id => $grp) {                  // 그룹 제목                  echo '<li class="group-item">';                  echo '  <div class="group-title" onclick="toggleGroup('group-'.$gr_id.'', this)">';                  echo '    <span class="group-title-text">'.get_text($grp['group_name']).'</span>';                  echo '    <span class="arrow">▼</span>';                  echo '  </div>';
                      // 하위 게시판 목록                  echo '  <ul id="group-'.$gr_id.'" class="board-sublist">';                  foreach($grp['boards'] as $bd) {                      $write_url = get_pretty_url($bd['bo_table'], 'write');                      echo '<li><a href="'.$write_url.'">'.get_text($bd['bo_subject']).'</a></li>';                  }                  echo '  </ul>';                  echo '</li>';              }          }      }      ?>    </ul>  </div></div>
    <script>// (1) 플로팅 버튼 / 모달창 DOMconst floatingWriteBtn = document.getElementById("floating-write-btn");const boardSelectModal = document.getElementById("board-select-modal");const closeModalBtn     = document.querySelector("#board-select-modal .close-modal");
    // (2) 버튼 클릭 -> 모달 열기if (floatingWriteBtn) {  floatingWriteBtn.addEventListener("click", function() {    if (boardSelectModal) {      boardSelectModal.style.display = "block";    }  });}
    // (3) 닫기(X) 버튼 클릭 -> 모달 닫기if (closeModalBtn) {  closeModalBtn.addEventListener("click", function() {    if (boardSelectModal) {      boardSelectModal.style.display = "none";    }  });}
    // (4) 모달 배경 클릭 -> 모달 닫기window.addEventListener("click", function(event) {  if (event.target === boardSelectModal) {    boardSelectModal.style.display = "none";  }});
    /* 그룹 토글 함수 */function toggleGroup(groupId, titleElem) {  const sublist = document.getElementById(groupId);  if (!sublist) return;
      // 펼침/접힘  if (sublist.style.display === 'none' || sublist.style.display === '') {    sublist.style.display = 'block';    // 화살표 회전 효과를 위해 .open 클래스 토글    if (titleElem) titleElem.classList.add('open');  } else {    sublist.style.display = 'none';    if (titleElem) titleElem.classList.remove('open');  }}</script>

     
    • 19c45330452a68a43606da1be105b507_1740751257_7506.jpeg
    • 67
    • 오래 전
      2025.02.26
  • 오래 전
  • 목록 사이에 텍스트 광고 혹은 배너 광고 넣기
  • 안녕하세요...미니님a입니다.
    먼저 해당 팁은 별도로 스킨 제작하지 않고 팁으로만 작성하여 공유 드립니다.따라서, 해당 내용을 그대로 따라 하시면 현재 적용 중인 스킨에 잘 적용 되실 것입니다.
    웹 서핑을 하다보면 아래 처럼 게시글 중간 중간 광고가 노출 된 것을 본 적이 있으실 것입니다.

     이런 광고 기능 해보면 좋겠다? 생각 드셨죠?개선 및 제안 게시판에 팡야님께서 제안 해주신 적도 있으시던데요 https://rebuilder.co.kr/propose/167 자! 이 기능 구현 해봅시다!!
    ※주의사항 
    구글 애드센스는 정책 위반이라 하시면 구글 광고 계정 짤립니다. 하시면 안됩니다.
    쿠팡이나 일반 사이트 내 광고 등 다른 광고로 진행하셔야 합니다.
    괜히 구글 애드센스 하셨다가 광고 계정 짤려서 저한테 책임 물으시는 일 없으시면 좋겠습니다.
    이제 시작 해봅시다.
    기본 혹은 일반 스킨의 경우는 사용하시는 스킨 폴더 내 list.skin.php 파일을 열어 주시면 됩니다.만약 통합 스킨을 사용하신다면 통합 스킨 폴더 내 list/basic/skin.php 파일을 열어 주시면 됩니다.
    단. 썸네일과 갤러리는 논외로 치고 직접 작업하셔야 할 것 같습니다. 해당 팁은 리스트 기준입니다.
    아래 소스 코드를 찾아주세요 - 기본과 통합 똑같은 소스입니다.
     <?php } ?>     </tbody>   </table>   <?php if (count($list) == 0) { echo "<div class="no_data" style="text-align:center">데이터가 없습니다.</div>"; } ?>
    그리고 추가를 해줄 것인데 어디에 추가 해줄꺼냐면 <?php } ?> 소스 위에 작성할 것입니다.
    아래 소스를 추가 해주세요 <?php if($i === 5){?>         <tr>             <td colspan="4">                 <p style="text-align:center;">여기에 광고를 넣어주세요. 이미지 광고도 크기에 맞게 넣어주시면 됩니다.</p>             </td>         </tr>         <?php } ?>
    잘 모르겠다? 하시면 아래 스크린 샷 오렌지색을 주목 해주세요

     
    위 소스 기준 5는 7번째 목록에 광고를 나타내겠다는 뜻입니다.왜 7번째냐면 자바스크립트는 0부터 시작하기 때문에 0 1 2 3 4 5 해서 6번째가 되며, 7번째 광고가 노출됩니다.
    아래 처럼요 

     
    모바일 반응형으로 구현되어 있기에 이미지 자체가 비정상(?)만 아니면 적절하게 잘 노출 될 것입니다.만약 이미지가 찌그러짐 현상이 있다면 모바일에서는 변경하는 css 사용하시면 될 것 같습니다.
     
    페이지 마다 7번째에 광고가 노출 되므로 너무 많은 광고 노출 시 사용자 입장에서 불편할 수 있기 때문에 페이지 당 하나가 적절하다 판단하였습니다.
    그럼 잘 사용하시고 성공하시길 바래요고맙습니다.
    • 9deff7ac29f744f99fb090e7fc2dda1c_1740531941_3354.png

검색

게시물 검색