테마 제작중입니다. 선택된 메뉴 표시 방법 아시는 분 계신가요?

테마 제작중입니다. 선택된 메뉴 표시 방법 아시는 분 계신가요?

QA

테마 제작중입니다. 선택된 메뉴 표시 방법 아시는 분 계신가요?

본문

3547666023_1517788248.7895.png

 

위와 같이 사이트는 현재 사용자가 보고 있는 메뉴가 어느 것인지 보여주어야 합니다. XE에서 넘어오면서 테마를 제작 중인데 그누보드는 XE처럼 현재 위치와 메뉴 링크를 비교해주는 함수가 자체적으로 내장되어있지 않은 것 같더라구요. 변수만 넣고 조건에 따라 active라는 클래스를 추가하도록 하면 그만이었는데 그누보드에서는 그 기능마저 직접 하드코딩해줘야 합니다ㅠ

 

 


<ul class="navbar-nav">
<?php
$sql = " select *
from {$g5['menu_table']}
where me_use = '1'
and length(me_code) = '2'
order by me_order, me_id ";
$result = sql_query($sql, false);
$cur_url = 'https://anthonytale.com'.$_SERVER['REQUEST_URI']; // #1 현재위치 설정용으로 추가
 
for ($i=0; $row=sql_fetch_array($result); $i++) {
$li_view1 = $i+1; // #2 각각의 메뉴명을 추가하기위해 설정
?>
 
<li <?php if($row['me_link'] == $cur_url){echo 'class="active"';} ?>>
<a href="<?php echo $row['me_link']; ?>" target="_<?php echo $row['me_target']; ?>">
<div class="name">
<?php echo $row['me_name'] ?>
</div>
<div class="dot"></div>
</a>
</li>
<?php
$i++;
} //end foreach $row
 
if ($i == 0) { ?>
<li class="gnb_empty">메뉴 준비 중입니다.<?php if ($is_admin) { ?> <a href="<?php echo G5_ADMIN_URL; ?>/menu_list.php">관리자모드 > 환경설정 > 메뉴설정</a>에서 설정하실 수 있습니다.<?php } ?></li>
<?php } ?>
</ul>

 

대략 이런 식으로 만들었는데요. 문제는 /bbs/board.php?bo_table=story&wr_id=2 이런식으로 하위 링크가 있을 경우는 답이 없습니다. 근데 sir은 또 잘 되네요? 기본 테마에도, 심지어는 그누보드 5.3 베타 버전 테마에도 없었는데 방법이 따로 있는건가요?... 그누보드 다 좋은데 이런 점이 아쉽네요ㅠㅠ

 

이 질문에 댓글 쓰기 :

답변 6

해결 되셔다니 다행이네요 즐거운하루되세요

http://eagleowm1226.cafe24.com/bbs/board.php?bo_table=youtube&wr_id=48

보다 시피 잘됩니다 

다른 문제 로보이네요

질문 내용을 잘못 이해하신거 같은데요^^;
메뉴 선택이라는 말은 본문을 다시 한 번 정독해보시고, 코드를 확인해보시면 아시겠지만 현재 브라우저가 위치한 링크 또는 그누보드5가 인식하고 있는 현재 사용자가 위치한 bbs path와 해당 링크로 이동하도록 되어있는 메뉴의 링크와 일치할 경우 true를 출력하는 함수를 말하는 것이고, 이 함수를 통해 메뉴의 li 태그에 active 클래스가 자동으로 붙도록 하고 싶다는 말입니다.

즉, 홈, 커뮤니티, 쇼핑몰 세 개의 링크가 있다면 홈 링크를 눌러 메인 페이지로 이동하면 홈 링크가 색이 바뀌든, 글자가 굵어지든 강조되어 표시되는 것을 발합니다.

그래서 굳이 '메뉴 선택 표시'라고 까지 제목에 써놨는데 말이죠..;

간단하게 말씀드리자면 따로 없습니다.

직접 개발하셔야하는데

메뉴를 불러오는(기본 그누보드로 설명)의 head.php 파일을 보시면

쿼리로 메뉴를 읽어옵니다.

현재 url체크하시고 $row['mb_link']가 같으면 클래스에 active를 주시면되는데

문제는 1차 대분류에는 한번더 조회를 해야하는 번거로움이있습니다.

    $cur_url = 'https://anthonytale.com'.$_SERVER['REQUEST_URI']; // #1 현재위치 설정용으로 추가

                                                            / 추가

    $cur_url = 'https://anthonytale.com/'.$_SERVER['REQUEST_URI']; // #1 현재위치 설정용으로 추가


for ($i=0; $row=sql_fetch_array($result); $i++) {

$li_view1 = $i+1; // #2 각각의 메뉴명을 추가하기위해 설정


echo "<br>".$row['me_link']."==".$cur_url; //두 변수의 값이 같나요?
?>

  

<li <?php if($row['me_link'] == $cur_url){echo 'class="active"';} ?>>

<a href="<?php echo $row['me_link']; ?>" target="_<?php echo $row['me_target']; ?>">

<div class="name">

<?php echo $row['me_name'] ?>

</div>

<div class="dot"></div>

</a>

</li>

<?php

$i++;

} //end foreach $row

본문에서 사용한 방식이 저 방식입니다. 테스트용으로 본 서버 안에 폴더를 하나 만들어서 단순히 G5_URL을 사용하면 중복으로 입력되기 때문에 G5_URL 을 직접 링크로 대체했을 뿐 동일한 구조입니다.

자문자답합니다. 답답해서 php 문자열 비교하는 함수 위주로 열심히 구글링했더니 방법을 찾았습니다.


$var_active = strpos($cur_url, $row['me_link']);

 

원본 문자열 내에서 찾는 문자열이 있을 경우 숫자 0을, 없을 경우 false를 리턴하는 php 내장 함수입니다.

ture or false가 아니라 0과 false로 값을 리턴해서 조건문에 비교 연산자를 함께 사용해야 합니다.

 

위와 같이 변수를 정의하고, 


<?php if($var_active === 0){echo 'class="active"';} ?>

 

이렇게 해당 변수와 숫자 0이 완벽하게 일치하면 active 클래스를 추가합니다. 쌩판 알지도 못하는 정규 표현식을 써야하나 고민했었는데 이렇게 좋은 함수가 있었군요 ㄷ

네 제가 위에 말씀드린 방식이 저방식입니다.
url주소의 문자를 $row['mb_link'] 변수와 체크해서 일치하는지를 찾으라는 답변이였습니다.
1차메뉴로 메뉴구성이 끝난다면 관계없지만
2차메뉴까지 구성되는 메뉴의 경우 1차 메뉴에 active 클래스를 주는방법이 까다롭습니다.
그부분까지 한번에 말씀드린것입니다.

문자열 언급은 없었는데 말이죠... strpos 함수를 알려주신 것도 아니고 이미 질문글 내에 있는 코드도 나름 비교문입니다. 문자를 통채로 체크하는 것 뿐이죠. 제가 만든 원 코드에서 바뀐 점은 함수가 추가된 것 밖에 없습니다. 질문에 답변을 주시는 건 감사하지만, 이미 알고있는 사실을 당연하다듯이 말하시면 전 답답합니다.

답변을 작성하시기 전에 로그인 해주세요.
전체 122 | RSS
QA 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT