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

위와 같이 사이트는 현재 사용자가 보고 있는 메뉴가 어느 것인지 보여주어야 합니다. 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개 / 댓글 6개
자문자답합니다. 답답해서 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 클래스를 추가합니다. 쌩판 알지도 못하는 정규 표현식을 써야하나 고민했었는데 이렇게 좋은 함수가 있었군요 ㄷ
답변에 대한 댓글 2개
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
답변에 대한 댓글 1개
메뉴 선택이라는 말은 본문을 다시 한 번 정독해보시고, 코드를 확인해보시면 아시겠지만 현재 브라우저가 위치한 링크 또는 그누보드5가 인식하고 있는 현재 사용자가 위치한 bbs path와 해당 링크로 이동하도록 되어있는 메뉴의 링크와 일치할 경우 true를 출력하는 함수를 말하는 것이고, 이 함수를 통해 메뉴의 li 태그에 active 클래스가 자동으로 붙도록 하고 싶다는 말입니다.
즉, 홈, 커뮤니티, 쇼핑몰 세 개의 링크가 있다면 홈 링크를 눌러 메인 페이지로 이동하면 홈 링크가 색이 바뀌든, 글자가 굵어지든 강조되어 표시되는 것을 발합니다.
그래서 굳이 '메뉴 선택 표시'라고 까지 제목에 써놨는데 말이죠..;
답변을 작성하려면 로그인이 필요합니다.