팁과노하우

2024.10.22 19:01

메뉴에 새글이 있을경우 N 아이콘 표시

https://rebuilder.co.kr/qna/855

삼다수님의 질문답변을 보고 만들었습니다.



리빌더의 새글 아이콘은 

get_new_ico("게시판 테이블 아이디", "카테고리 아이") 함수를 통해 

조건에 맞는 게시판에 새글이 있을 경우

<span class="gnb_new_ico">n</span>

위와 같은 HTML 코드를 반환 합니다.


그누보드5의 경우(혹은 리빌더의 또는 대다수의 경우) 메뉴관리에서 URL 전체의 링크로 저장되기 때문에 위 함수를 바로 사용하시기에는 작동할 수 없습니다.

게시판 테이블 아이디를 따로 불러올 수 없기 때문입니다.


그래서 생각한 방법이 현재 주소에서 게시판 아이디를 추출해서, 그 아이디를 메뉴를 출력하는 부분에서 get_new_ico 함수를 호출하면 되겠다 생각했습니다.



첨부파일로 올려드리는 extend 파일을 extend 폴더에 넣으세요. (파일이름은 바꾸셔도 무방합니다.)

해당 extend 파일에 작성되어 있는 코드는 URL을 받아서 URL에서 적절한 게시판 테이블 아이디를 반환해줍니다. (extract_bbs_name)

(짧은주소 사용 여부에 따른 로직이 다르게 코드를 짜긴 했지만, 미사용의 경우 테스트하지 못했습니다.)


extend 파일을 업로드 하였다면 사용하시는 헤더스킨 혹은 메뉴를 출력하는 곳으로 이동합니다. (본글에서는 basic 헤더 기준으로 설명합니다.)

header.php 파일중 아래 구문을 찾아주세요.


foreach( (array) $row['sub'] as $row2 ){

바로 아래에 두줄의 코드를 삽입 해주세요.

$menu_bo_table = extract_bbs_name($row2['me_link']);
$newIcon = $menu_bo_table ? get_new_ico($menu_bo_table, "") : "";



그럼 아래와 같은 모습입니다.


$k = 0;
foreach( (array) $row['sub'] as $row2 ){
    $menu_bo_table = extract_bbs_name($row2['me_link']);
    $newIcon = $menu_bo_table ? get_new_ico($menu_bo_table, "") : "";
    if( empty($row2) ) continue;



아래와 같이 소메뉴를 출력하는 구문을 바꿔주세요.


기존

<li><a href="<?php echo $row2['me_link']; ?>" target="_<?php echo $row2['me_target']; ?>"><?php echo $row2['me_name'] ?></a></li>



수정후
<li><a href="<?php echo $row2['me_link']; ?>" target="_<?php echo $row2['me_target']; ?>"><?php echo $row2['me_name'] ?><?php echo $newIcon;?></a></li>


그럼 사진과 같이 새글이 있는 곳에 n 글자가 보이게 됩니다.


62829e37f35b17c752bf918c2342233c_1729591208_9479.png


n에 대한 스타일링은 적절한 스타일시트 파일 (theme/rb.basic/rb.layout_hd/basic/style.css) 에 스타일을 정의 해주세요.


.gnb_new_ico { 스타일 정의 }








제가 글쓰는 솜씨가 없습니다...

혹시 궁금하신 점 있으시면, 언제든 댓글 달아주세요.


  • 공유링크 복사
    미니홈 쪽지 구독하기
    구독하고 알림받기

    댓글목록

    profile_image
    리빌더미니홈 1:1 대화하기  오래 전

    좋은 방법인것 같습니다.
    공유 감사합니다.

    extract_bbs_name() 함수를 보지는 못했는데
    bo_table=테이블명 일때도 가능하면 범용적으로 쓰일 수 있을것같습니다.

    2024-10-22 19:07

    profile_image
    HUMHAE미니홈 1:1 대화하기  오래 전

    extend 파일을 만들면서 새로 만든 함수입니다.
    현재는 환경설정의 짧은주소 사용 여부에 따라 bo_table=테이블, https://주소/테이블 에서
    테이블을 추출하는데 생각해보니 짧은주소사용 여부를 따지지 않고 그냥 바로 주소를 통해서 정규식으로 추출해와도 좋을 것 같습니다.

    기회가 된다면 추출한 테이블이 실제로 DB에 존재하는 게시판인지를 검사하도록도 해봐야겠습니다 ㅎㅎ

    2024-10-22 19:15

    profile_image
    펄스나인미니홈 1:1 대화하기  오래 전

    크 멋집니다 :D 식사 챙기세요~ ㅎㅎ

    2024-10-22 19:19

    profile_image
    no_profile 우루사100mg미니홈 1:1 대화하기  오래 전

    감사합니다. 추천!

    2024-10-22 19:10

    profile_image
    no_profile 삼다수미니홈 1:1 대화하기  오래 전

    좋은 자료 감사합니다.

        $menu_bo_table = extract_bbs_name($row2['me_link']);
        $newIcon = $menu_bo_table ? get_new_ico($menu_bo_table, "") : "";

    넣으면 헤더 부분 css 깨진 상태로 나오면서 본문과 하단 부분은 나타나지 않아요.

    http://theme/rb.basic/rb.layout_hd/basic/header.php

    2024-10-23 12:17

    profile_image
    HUMHAE미니홈 1:1 대화하기  오래 전

    https://rebuilder.co.kr/tip/103

    이 게시글로 적용 해보시겠어요?

    2024-10-23 13:35

    profile_image
    no_profile 삼다수미니홈 1:1 대화하기  오래 전

    네 그렇게 적용 하였는데
    증상이 나옵니다.

                    <nav id="cbp-hrmenu" class="cbp-hrmenu pc">
                        <ul>
                        <?php
                        $menu_datas = get_menu_db(0, true);
                        $gnb_zindex = 999; // gnb_1dli z-index 값 설정용
                        $i = 0;
                        foreach( $menu_datas as $row ){
                            if( empty($row) ) continue;
                        ?>
                        <li>
                            <a href="<?php echo $row['me_link']; ?>" target="_<?php echo $row['me_target']; ?>" class="font-B"><?php echo $row['me_name'] ?></a>
                            <?php
                            $k = 0;
    foreach( (array) $row['sub'] as $row2 ){
    $menu_bo_table = extract_bbs_name($row2['me_link']);
    $newIcon = $menu_bo_table ? get_new_ico($menu_bo_table, "") : "";
    if( empty($row2) ) continue;



                                if($k == 0)
                                    echo '<div class="cbp-hrsub"><div class="cbp-hrsub-inner"><div><!--<h4 class="font-B">그룹</h4>--><ul>'.PHP_EOL;
                            ?>
                                <li><a href="<?php echo $row2['me_link']; ?>" target="_<?php echo $row2['me_target']; ?>"><?php echo $row2['me_name'] ?><?php echo get_bbs_new_ico($row2['me_link']);?></a></li>
                            <?php
                            $k++;
                            }  //end foreach $row2

                            if($k > 0)
                                echo '</ul></div></div></div>'.PHP_EOL;
                            ?>
                        </li>
                        <?php
                        $i++;
                        }  //end foreach $row
                        ?>
                       
                        <?php if ($i == 0) {  ?>
                        <li><a href="javascript:void(0);">메뉴 준비 중입니다.</a></li>
                        <?php } ?>
                        </ul>
                    </nav>

    2024-10-23 14:27

    profile_image
    HUMHAE미니홈 1:1 대화하기  오래 전

    업데이트된 extend 넣으셨으면,

    $menu_bo_table = extract_bbs_name($row2['me_link']);
    $newIcon = $menu_bo_table ? get_new_ico($menu_bo_table, "") : "";

    이 코드는 안넣으셔도 됩니다!

    2024-10-23 15:21

구매 신청
  • 구매문의 : cs@rebuilder.co.kr / 010-6466-3355
    신청 이후 담당자가 개별연락 드리고 있습니다.
    입금자명과 실제 입금자가 동일한 경우 자동처리 됩니다.
  • 결제예정 금액 : 0 (VAT별도)
    하나은행(KOEXKRSE) : 258-910104-00407 / 김은정(인덱스)

  •