팁과노하우

  • 팁과노하우 포인트 정책
      글쓰기
      100P
      댓글
      10P
  • 전체 104건 / 3 페이지
    • 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
    • 66
    • 오래 전
      2025.02.25
  • 오래 전
  • 관리자 기본 환경설정 여분 필드 추가하기
  • 안녕하세요...미니님a입니다.
    관리자 페이지 내 기본 환경설정 여분 필드를 쉽게 추가 하기 위한 팁입니다.다만, 해당 내용은 기본 코어를 수정할 수 밖에 없는 관계로 원치 않는 경우는 사용하지 마시길 바랍니다.
    예) 수정 이후 추후 업데이트 시 파일 복붙 하면 기존 데이터가 다 삭제되기 때문입니다.
    1. 여분필드 추가 파일 생성 - 파일명 아무거나 예) abcd.php - index.php 가 있는 최상위에 업로드 해주세요
    <?php include_once ('_common.php'); $max = 20; // 최대 몇까지 만드실 지 정해주세요 (단 이 숫자는 기억해주세요)   for ($i = 11; $i <= $max; $i++) {     $sql = "ALTER TABLE `g5_config` ADD `cf_{$i}_subj` VARCHAR(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL AFTER `cf_" . ($i-1) . "_subj`;";     $sql2 = "ALTER TABLE `g5_config` ADD `cf_$i` VARCHAR(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL AFTER `cf_" . ($i-1) . "`;";         sql_query($sql);     sql_query($sql2); }; echo '테이블 생성 완료';
    그리고 홈페이지 상에서 실행 한번 해주세요예) 홈페이지주소/abcd.php그리고 실행 했다면 해당 파일은 삭제 해주셔도 무방합니다.
    2. adm/config_form.php 파일 열어주세요1500번째 라인에 보면 다음 코드가 있습니다.

    <?php for ($i = 1; $i <= 10; $i++) { ?> 위 코드를 아래 코드 처럼 변경 해주세요단. 예제 기준 20이지, abcd.php 파일에서 70을 했다면 아래 코드도 70으로 해야 됩니다.<?php for ($i = 1; $i <= 20; $i++) { ?>
    3. adm/config_form_update.php 파일을 열어주세요
    160번 라인 근처에 보시면 다음과 같은 코드가 있습니다.
    for ($i = 1; $i <= 10; $i++) {    $check_keys['cf_' . $i . '_subj'] = isset($_POST['cf_' . $i . '_subj']) ? $_POST['cf_' . $i . '_subj'] : '';    $check_keys['cf_' . $i] = isset($_POST['cf_' . $i]) ? $_POST['cf_' . $i] : '';}
    여기에서 10이라는 숫자를 아까전에 abcd.php 파일에서 작성한 숫자로 변경 해주시면 됩니다.for ($i = 1; $i <= 10; $i++) { 이 코드를 for ($i = 1; $i <= 20; $i++) {이렇게 변경해주세요
    4. 맨 하단에 쿼리 업데이트 문을 수정 해주세요
    cf_1_subj = '{$_POST['cf_1_subj']}', cf_2_subj = '{$_POST['cf_2_subj']}', cf_3_subj = '{$_POST['cf_3_subj']}', cf_4_subj = '{$_POST['cf_4_subj']}', cf_5_subj = '{$_POST['cf_5_subj']}', cf_6_subj = '{$_POST['cf_6_subj']}', cf_7_subj = '{$_POST['cf_7_subj']}', cf_8_subj = '{$_POST['cf_8_subj']}', cf_9_subj = '{$_POST['cf_9_subj']}', cf_10_subj = '{$_POST['cf_10_subj']}', cf_1 = '{$_POST['cf_1']}', cf_2 = '{$_POST['cf_2']}', cf_3 = '{$_POST['cf_3']}', cf_4 = '{$_POST['cf_4']}', cf_5 = '{$_POST['cf_5']}', cf_6 = '{$_POST['cf_6']}', cf_7 = '{$_POST['cf_7']}', cf_8 = '{$_POST['cf_8']}', cf_9 = '{$_POST['cf_9']}', cf_10 = '{$_POST['cf_10']}' ";
    이부분을 아래처럼 변경 해주시면 됩니다.
    cf_1_subj = '{$_POST['cf_1_subj']}', cf_2_subj = '{$_POST['cf_2_subj']}', cf_3_subj = '{$_POST['cf_3_subj']}', cf_4_subj = '{$_POST['cf_4_subj']}', cf_5_subj = '{$_POST['cf_5_subj']}', cf_6_subj = '{$_POST['cf_6_subj']}', cf_7_subj = '{$_POST['cf_7_subj']}', cf_8_subj = '{$_POST['cf_8_subj']}', cf_9_subj = '{$_POST['cf_9_subj']}', cf_10_subj = '{$_POST['cf_10_subj']}', cf_11_subj = '{$_POST['cf_11_subj']}', cf_12_subj = '{$_POST['cf_12_subj']}', cf_13_subj = '{$_POST['cf_13_subj']}', cf_14_subj = '{$_POST['cf_14_subj']}', cf_15_subj = '{$_POST['cf_15_subj']}', cf_16_subj = '{$_POST['cf_16_subj']}', cf_17_subj = '{$_POST['cf_17_subj']}', cf_18_subj = '{$_POST['cf_18_subj']}', cf_19_subj = '{$_POST['cf_19_subj']}', cf_20_subj = '{$_POST['cf_20_subj']}', cf_1 = '{$_POST['cf_1']}', cf_2 = '{$_POST['cf_2']}', cf_3 = '{$_POST['cf_3']}', cf_4 = '{$_POST['cf_4']}', cf_5 = '{$_POST['cf_5']}', cf_6 = '{$_POST['cf_6']}', cf_7 = '{$_POST['cf_7']}', cf_8 = '{$_POST['cf_8']}', cf_9 = '{$_POST['cf_9']}', cf_10 = '{$_POST['cf_10']}', cf_11 = '{$_POST['cf_11']}', cf_12 = '{$_POST['cf_12']}', cf_13 = '{$_POST['cf_13']}', cf_14 = '{$_POST['cf_14']}', cf_15 = '{$_POST['cf_15']}', cf_16 = '{$_POST['cf_16']}', cf_17 = '{$_POST['cf_17']}', cf_18 = '{$_POST['cf_18']}', cf_19 = '{$_POST['cf_19']}', cf_20 = '{$_POST['cf_20']}' ";
    ※ 주의 사항 1. 마지막에는 , (콤마)가 들어가지 않습니다.2. abcd.php 파일에 생성한 개수 만큼 업데이트 하여야 합니다.
    여기까지 하시면 여분필드를 설정한 만큼 사용할 수 있습니다.고맙습니다.
    • 7e04b2d72373cc29eba99b2df9c2c577_1740471718_0125.png
    • 65
    • 오래 전
      2025.02.25
  • 오래 전
  • 클라우드플레어 : 특정 도메인 aaa.com 과 www.aaa.com 을 메인 도메인으로 이동시켜주기
  • https://rebuilder.co.kr/tip/259에서 어느분께서 댓글 달아주셨는데...위 방법으로 할 경우 seo에 문제가 생길 수 있다고 합니다.그래서 준비해 보았습니다.(사실 준비를 했다고 말은 했지만... 이 방법이 seo에 영향을 끼치는지는 잘 모릅니다. 다만 자바스크립트 태그로 이동이 아닌 클라우드플레어 사용자를 위한 클플 도메인 관리도구를 통해 손쉽게 이동시키기 위함이니 단순 클라우드플레어 도메인 리디렉션 방법이라고 생각해주시면 감사하겠습니다)클라우드플레어를 이용한 특정 도메인 aaa.com 과 www.aaa.com 을특정 URL(메인 도메인으로 이동시키기)로 이동시키는 방법
    사진으로 애플펜슬을 이용해 손쉽게 표현 해봤습니다.이미지 참고 잘 해주시구요.모르시는것 있으시면 질문주세요.(설정방법외 전문적인건 답변 못드림)
    7번 부분은 본인이 사용하시는 메인도메인 주소 입력해 주시면 되겠습니다.

    마지막으로 오*오*님을 기*루* 로 오해한 부분과 본의 아니게... 기모 란 사람을 부른건데 기모찌 기모찌... 라고 조롱거리로 삼았다고 느끼게 오해 불러일으킨점 이 게시글 자리를 빌어 사과드립니다미안합니다. 오*오*님
    • 64
    • 오래 전
      2025.02.24
  • 오래 전
  • 댓글 개수가 많을 때 더보기 버튼을 통해 댓글 펼치기
  • 안녕하세요...미니님a입니다.
    개선 및 제안 게시판 내 해당 요청이 있어 간단하게 팁으로 만들었습니다.https://rebuilder.co.kr/propose/771
    댓글이 5개가 넘지 않는다면, 더보기 버튼이 보이지 않으며,5개가 넘을 시 총 개수가 함께 노출 됩니다.
     만약 스킨으로 적용하고자 한다면 아래 링크를 통해 다운로드 할 수 있습니다.https://rebuilder.co.kr/userdata/393

    기본 / 통합 모두 적용 가능합니다.
    1. 기본의 경우 사용하시는 게시판 스킨 폴더의 view_comment.skin.php 파일을 열어주세요만약 통합이라면 사용하시는 게시판 스킨 폴더 내 cmt/basic/skin.php 파일을 열어주세요
    그 이후 똑같이 쓰시면 됩니다.
    상단에 css 를 추가 해주세요단. style.css 에 작성하셔도 무방합니다.
    <style> .hidden-comment { display: none; } .load-more-btn {     display: block;     width: 100%;     padding: 15px;     margin: 20px 0;     background: #f9f9f9;     border: 1px solid #ddd;     text-align: center;     cursor: pointer;     transition: all 0.3s ease; } .load-more-btn:hover {     background: #f0f0f0; } </style>
    위치를 잘 모르겠다 하시면 아래 스샷 참고 하세요

     
    자 다음에는 아래 코드를 찾아주세요
    <article id="c_<?php echo $comment_id ?>">
    그리고 아래 처럼 변경 합니다.
    <article id="c_<?php echo $comment_id ?>" class="<?php if($i >= 5) echo 'hidden-comment'; ?>">
    변경 이니 별도로 스샷은 업로드 하지 않습니다.
    자 다음에는 아래 코드를 찾아주세요
    <?php if ($i == 0) { //댓글이 없다면 ?><p id="bo_vc_empty">등록된 댓글이 없습니다.</p><?php } ?>
    그리고 그 아래에 아래 코드를 추가 합니다.
        <?php if($cmt_amt > 5) { ?>     <button type="button" id="load-more-comments" class="load-more-btn" data-current="5" data-total="<?php echo $cmt_amt; ?>">         더보기 (5/<?php echo $cmt_amt; ?>)     </button>     <?php } ?>
    어디인지 모르겠다? 하시면 스샷 참고 하시길 바랍니다.

     


    마지막으로 맨 하단에 보면 스크립트 댓글 열기를 찾아주세요단. 통합의 경우는 해당 파일이 아닌 통합 스킨폴더 내 view_comment.skin.php 에 아래 내용이 있습니다.
    <script> jQuery(function($) {                 //댓글열기     $(".cmt_btn").click(function(e){         e.preventDefault();         $(this).toggleClass("cmt_btn_op");         $("#bo_vc").toggle();     }); }); </script>
    여기에 아래 코드만 추가만 해주시면 됩니다.
    var $comments = $('#bo_vc article'); var $loadMoreBtn = $('#load-more-comments'); $loadMoreBtn.click(function() { var current = parseInt($(this).data('current')); var total = parseInt($(this).data('total')); var next = current + 5; var $btn = $(this); // 다음 5개의 댓글을 보여줌 $comments.slice(current, next).removeClass('hidden-comment').fadeIn(400, function() { // fadeIn 완료 후 실행 if (next >= total) { $btn.fadeOut(200); // 버튼을 부드럽게 사라지게 함 } }); // 더보기 버튼 상태 업데이트 $btn.data('current', next); $btn.text('더보기 (' + Math.min(next, total) + '/' + total + ')'); });어떻게 넣어야 할지 모르겠다면 아래 스샷을 참고 하세요

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

     


    • 277279c4b1a54cd7df2beb02f3ea4ffe_1740369666_5934.png
    • 63
    • 오래 전
      2025.02.18
  • 오래 전
  • 테스트 서버에는 정해진 아이피만 접근하기
  • 안녕하세요...미니님a입니다.
    필요에 의해 테스트 서버 하나쯤은 가지고 계시죠?근데 다른 사람들은 접근할 수 없게 만들어야 할 때가 종종 있습니다.
    실제로 제가 업로드 할 때 테스트 하는 리빌더 테스트 서버는 저만(?) 접속이 가능하거든요http://rbtest.dothome.co.kr
    위 접속하시면  아래 처럼 뜨는데요!!
    이런 식으로 타인에게는 접속을 허용하지 않고, 나만의 서버로 자유롭게 테스트 할 때 유용하게 사용할 수 있는 팁입니다! 
    소스에 대해 알고 계신다면 먼저 extend 폴더에 server.extend.php 파일을 생성해주세요 (이건 없기에 만들어야 합니다.)그리고 아래 코드를 통으로 복사해서 붙혀 넣으시면 됩니다.
    만약 소스에 대해서 잘 모르신다면 첨부된 파일을 다운로드 받아 압축해제 이후 extend 폴더에 넣어주시고, 본인의 아이피 대역만 설정해주시면 됩니다.(어찌 되었던 코드는 ㅠㅠ 조금 수정하셔야 합니다.)
    <?php if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가 $ip = '^(5.7.|5.50.|20.18.)'; if (!preg_match("/$ip/", $_SERVER['REMOTE_ADDR'])) {     echo 'rebuilder 테스트 서버입니다.';     exit; }
    상단에 아이피 대역은 본인의 아이피를 입력 하시거나 / 아이피 대역을 입력하시면 해당 사용자들만 접속이 가능합니다.
    광역으로 설정 되어있으며, 정확하게 하려면 아이피를 정확하게 입력해주시면 됩니다.본인 아이피는 아래 링크 (네이버) 누르면 확인 가능합니다.
    https://search.naver.com/search.naver?where=nexearch&sm=top_hty&fbm=0&ie=utf8&query=%EB%B3%B8%EC%9D%B8+%EC%95%84%EC%9D%B4%ED%94%BC+%ED%99%95%EC%9D%B8
    소스 코드는 2자리 광역이며, 만약 3자리 광역으로 하고자 한다면
    5\.7\.13\.   으로 하시면 됩니다.구분은 | 파이프로 처리 하시면 됩니다.
    고맙습니다.
    • a23659d8ced439b12c1c9beec1d09c63_1739845811_3227.png
    • 62
    • 오래 전
      2025.02.18
  • 오래 전
  • [멤버십] 구독 시 포인트 지급 및 구독 취소 시 알림 설정
  • 안녕하세요...미니님a입니다.
    해당 내용은 멤버십 내 "구독 + 알림" https://rebuilder.co.kr/item/126 을 사용하고 있다는 가정하에 공유 드리는 팁입니다.
    나는 소스 수정에 대해서 잘 알지 못한다? 하시면 아래 링크를 통해 다운로드 하시면 됩니다.https://rebuilder.co.kr/memberdata/119
    해당 팁에서 공유 되는 내용은 다음과 같습니다.
    1. 구독 추가 시 알림이 오지만, 구독 취소 시 알림이 오지 않아요 그래서 알림 추가
     2. 구독 추가 시 보너스 포인트 지급 및 구독 해제 시 보너스 포인트 회수를 통한 구독 시스템 활성화

     
    보너스 포인트 지급을 통해 구독을 유도 하고, 활성화 할 수 있는 방법이 아닐까? 조심스러운 생각이 듭니다.
    수정 되는 파일은 2곳입니다.rb/rb.mod/subscaribe/ajax.subscribe.phprb/rb.mod/subscaribe/ajax.subscribe_update.php
    먼저. rb/rb.mod/subscaribe/ajax.subscribe.php 파일을 열어주세요
    다음 소스를 찾아주세요
    $data = array('status' => 'del');
    그리고 바로 위에 소스를 넣어주세요
    // 구독 취소한 회원 정보 가져오기 $sb_fw_info = get_member($sb_fw_id); // 구독 취소시 포인트 차감 (-100 포인트) insert_point($member['mb_id'], 100 * - 1, $sb_fw_info['mb_nick'].'님 구독 취소', '@subscribe', 'subscribe_'.G5_TIME_YMDHIS, G5_TIME_YMDHIS); // 구독 취소 알림 메시지 발송 memo_auto_send($member['mb_nick'].'님 께서 회원님을 구독 취소 하셨습니다.', G5_URL.'/rb/home.php?mb_id='.$sb_mb_id.'&ca=fn', $sb_fw_id, "system-msg");
    주석 처리 해뒀으니 참고하시면 되며, 100포인트는 임의로 설정한 것입니다. 더 많이 주실 수록 시스템이 활성화 되리라 믿습니다?잘 모르겠다? 하시는 분들을 위해 스샷 부분 참고하세요



     그리고 하단에 구독 추가 시 알림은 기본적으로 되어있어 포인트 지급 부분만 수정 하면 됩니다.
    $data = array('status' => 'ok');
    코드 바로 위에 아래 코드를 넣어주세요
    // 구독 대상 회원 정보 가져오기 $sb_fw_info = get_member($sb_fw_id); // 구독 추가시 포인트 지급 (100 포인트) insert_point($member['mb_id'], 100, $sb_fw_info['mb_nick'].'님 구독 추가', '@subscribe', 'subscribe_'.G5_TIME_YMDHIS, G5_TIME_YMDHIS);
    마찬가지로 잘 모르겠다? 하시면 아래 스샷 보고 참고 하세요

     
    자! 여기까지 오셨다면 기본적으로는 끝났습니다.다만 My 페이지 내 구독자에서 삭제 시 포인트 회수 및 알림 설정이 남았습니다.

    rb/rb.mod/subscaribe/ajax.subscribe_update.php 파일을 열어주세요
    그리고 삭제 되는 부분을 찾습니다.
     if($sb_type == "del") {         if (isset($_POST['sb_id']) && !empty($_POST['sb_id'])) {                          $mb_id = $member['mb_id'];             $sb_id = $_POST['sb_id'];
    그리고 $sb_id 하단에 아래 코드를 넣어주세요
    // 구독 취소한 회원 정보 및 데이터 가져오기 $sb_data = sql_fetch("SELECT * FROM rb_subscribe WHERE sb_id = '{$sb_id}' and sb_mb_id = '{$mb_id}'"); $sb_info = get_member($sb_data['sb_fw_id']); // 구독 취소시 포인트 차감 (-100 포인트) insert_point($mb_id, 100 * - 1, $sb_info['mb_nick'].'님 구독 취소', '@subscribe', 'subscribe_'.G5_TIME_YMDHIS, G5_TIME_YMDHIS); // 구독 취소 알림 메시지 발송 memo_auto_send($member['mb_nick'].'님 께서 회원님을 구독 취소 하셨습니다.', G5_URL.'/rb/home.php?mb_id='.$mb_id.'&ca=fn', $sb_data['sb_fw_id'], "system-msg");
    스샷은 아래를 참고 하세요


     여기까지!입니다.
    여기까지 잘 따라 오셨다면 구독 시 100포인트가 지급되며, 구독 취소 시 100포인트가 회수 됩니다.또한 구독 취소 시 알림까지 오게 됩니다.
    구동 영상은 아래를 참조 하시길 바랍니다.고맙습니다.

     
    • 8aeab0b19d4b1811f22d6c81d1d65c2c_1739843201_043.png
    • 61
    • 오래 전
      2025.02.16
  • 오래 전
  • 홈페이지 접속시 연결된 여러도메인을 일괄적으로 메인도메인으로 이동시켜주기
  • www.aaa.com 접속시www.ccc.com 으로 접속하고 싶을경우
    이외 모든 연결된 도메인을 www.ccc.com 으로 접속하고자 할 경우
    <script type="text/javascript"> 
    var url = "www.ccc.com"; 
    if(location.host.toLowerCase().indexOf(url) == -1){ 
    location.href = "https://" + url + location.pathname + location.search; 

    </script> 
    그누보드5에 적용하고 싶으신 분들은위 스크립트를그누보드5 관리자 페이지 > 환경설정 > 레이아웃 추가설정(추가 script, css) 에다가 넣으시면 됩니다.
    • 60
    • 오래 전
      2025.02.14
  • 오래 전
  • 게시글 목록 인기순/추천순/날짜순 정렬 기능 추가 하기
  • 안녕하세요...미니님a입니다.
    해당 기능은 댓글로 팡야님께서 요청 하셔서 작업 했습니다.해당 기능은 커스터마이징을 한 사용자에게 유효하며, 스킨으로 적용하실 분들은 아래 링크에서 적용하시면 됩니다.
     스킨 https://rebuilder.co.kr/userdata/366
    단. 공지는 최우선 정렬이라서, 포함되지 않습니다.
    기본 : theme/rb.basic/skin/board/rb_basic/list.skin.php 파일을 열어주세요통합 : theme/rb.basic/skin/board/rb.bbs/list.skin.php 파일을 열어주세요
    그리고 상단에 스타일을 우선 적용 해주세요단. style.css 에 적용하셔도 무방합니다.
    <style> .order_list{ display: flex; justify-content: flex-end; margin-bottom: 24px; } .sort_select_wrap{ flex-basis: 15%; } @media (max-width: 1024px) { .sort_select_wrap{ flex-basis: 20%; } } @media (max-width: 768px) { .sort_select_wrap{ flex-basis: 30%; } } @media (max-width: 480px) { .sort_select_wrap{ flex-basis: 40%; } } </style>
    어딘지 잘 모르겠다? 하시면 아래 스샷 참고 하세요

     
    그리고 다음 코드를 찾아 주세요통합 게시판의 경우는 theme/rb.basic/skin/board/rb.bbs/top/basic/skin.php 파일 맨 하단에 있습니다. (똑같은 코드가 있음)
    <div class="cb"></div>     </ul>
    이 코드 바로 밑에 아래 코드를 넣어주세요
    <div class="order_list">         <div class="sort_select_wrap">             <select name="sort_option" id="sort_option" onchange="changeSortOption(this.value)" class="select" style="width: 100%;">                 <option value="wr_datetime desc" <?php echo ($sst == 'wr_datetime' && $sod == 'desc') ? 'selected' : ''; ?>>최신순</option>                 <option value="wr_good desc" <?php echo ($sst == 'wr_good' && $sod == 'desc') ? 'selected' : ''; ?>>추천순</option>                 <option value="wr_hit desc" <?php echo ($sst == 'wr_hit' && $sod == 'desc') ? 'selected' : ''; ?>>조회순</option>             </select>         </div>     </div> 마찬가지로 잘 모르겠다? 하시면 아래 스샷 참고 하세요

     
    자 다왔습니다. 이제 맨 하단에 스크립트만 추가 해주시면 됩니다.이부분은 코드 찾는게 아니라 진짜 맨 끝으로 이동 해주세요
    그리고 다음 코드를 넣어주세요통합 게시판의 경우 theme/rb.basic/skin/board/rb.bbs/list.skin.php 파일 맨 하단에 넣어 주시면 됩니다.
    <script> function changeSortOption(value) {     var [sst, sod] = value.split(' ');     var currentUrl = window.location.href;          // URL에서 현재 정렬 파라미터 제거     currentUrl = currentUrl.replace(/[?&]sst=[^&]+/, '').replace(/[?&]sod=[^&]+/, '');          // 새로운 정렬 파라미터 추가     var connector = currentUrl.includes('?') ? '&' : '?';     var newUrl = currentUrl + connector + 'sst=' + sst + '&sod=' + sod;          // 페이지 새로고침     window.location.href = newUrl; } </script> 마찬가지로 잘 모르겠다? 하시면 스샷 참고 하시길 바랍니다.

    자 끝났습니다. 이제 테스트 해보시겠어요?실제 구동 영상은 아래와 같습니다.
    고맙습니다.

     
    [수정 반영]2025.02.17- 모바일에서 셀렉트 박스가 비정상적으로 보이던 오류 수정 *상단 스타일 부분만 수정 되었습니다.*
    • 7bfe84788c985ae7490a451d1dc453de_1739767767_4299.png

검색

게시물 검색