테마 제작중입니다. 선택된 메뉴 표시 방법 아시는 분 계신가요?
본문
위와 같이 사이트는 현재 사용자가 보고 있는 메뉴가 어느 것인지 보여주어야 합니다. 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
해결 되셔다니 다행이네요 즐거운하루되세요
간단하게 말씀드리자면 따로 없습니다.
직접 개발하셔야하는데
메뉴를 불러오는(기본 그누보드로 설명)의 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
자문자답합니다. 답답해서 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 클래스를 추가합니다. 쌩판 알지도 못하는 정규 표현식을 써야하나 고민했었는데 이렇게 좋은 함수가 있었군요 ㄷ
!-->!-->