테스트 사이트 - 개발 중인 베타 버전입니다

메뉴 읽어 올때 서브메뉴가 있는지 먼저 알수 있는 방법은? 채택완료

jakekwak 11년 전 조회 5,561

아래는 그누보드 5에서 메뉴를 읽어오는 부분인데, g5_menu에서 me_code가 2개인 것을 먼저 읽고, 각각의  $row[me_code]와 매칭되는  서브 메뉴를 sql로 읽어오는 형태인데요.. 먼저 메뉴를 뿌리기전에 서브 메뉴가 있는 것을 파악하는 방법이 있을까요? 

그래야 서브 메뉴가 있는 곳은 조금 다르게 html을 구성할려고 합니다..

 

html과 sql이 섞여 있다 보니 어렵네요

</p><p>    <nav id="gnb"></p><p>        <h2>메인메뉴</h2></p><p>        <ul id="gnb_1dul"></p><p>            <?php</p><p>            $sql = " select *</p><p>                        from {$g5['menu_table']}</p><p>                        where me_use = '1'</p><p>                          and length(me_code) = '2'</p><p>                        order by me_order, me_id ";</p><p>            $result = sql_query($sql, false);</p><p>            $gnb_zindex = 999; // gnb_1dli z-index 값 설정용</p><p> </p><p>            for ($i=0; $row=sql_fetch_array($result); $i++) {</p><p>            ?></p><p>            <li class="gnb_1dli" style="z-index:<?php echo $gnb_zindex--; ?>"></p><p>                <a href="<?php echo $row['me_link']; ?>" target="_<?php echo $row['me_target']; ?>" class="gnb_1da"><?php echo $row['me_name'] ?></a></p><p>                <?php</p><p>                $sql2 = " select *</p><p>                            from {$g5['menu_table']}</p><p>                            where me_use = '1'</p><p>                              and length(me_code) = '4'</p><p>                              and substring(me_code, 1, 2) = '{$row['me_code']}'</p><p>                            order by me_order, me_id ";</p><p>                $result2 = sql_query($sql2);</p><p> </p><p>                for ($k=0; $row2=sql_fetch_array($result2); $k++) {</p><p>                    if($k == 0)</p><p>                        echo '<ul class="gnb_2dul">'.PHP_EOL;</p><p>                ?></p><p>                    <li class="gnb_2dli"><a href="<?php echo $row2['me_link']; ?>" target="_<?php echo $row2['me_target']; ?>" class="gnb_2da"><?php echo $row2['me_name'] ?></a></li></p><p>                <?php</p><p>                }</p><p> </p><p>                if($k > 0)</p><p>                    echo '</ul>'.PHP_EOL;</p><p>                ?></p><p>            </li></p><p>            <?php</p><p>            }</p><p> </p><p>            if ($i == 0) {  ?></p><p>                <li id="gnb_empty">메뉴 준비 중입니다.<?php if ($is_admin) { ?> 
<a href="<?php echo G5_ADMIN_URL; ?>/menu_list.php">관리자모드 > 환경설정 > 메뉴설정</a>에서 설정하실 수 있습니다.<?php } ?></li></p><p>            <?php } ?></p><p>        </ul></p><p>    </nav> </p><p>

댓글을 작성하려면 로그인이 필요합니다.

답변 1개

채택된 답변
+20 포인트
//대메뉴 구하기
$bmenu = array();
$mmenu = array();

$sql = " SELECT COUNT(me_id) AS cnt {$g5['menu_table']} WHERE me_use = '1' and length(me_code) = '2' ";
$bmenuCnt = sql_fetch($sql);
$bmenu['cnt'] = $bmenuCnt['cnt']; //대메뉴 개수구하기
$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);
for($i=0; $row=sql_fetch_array($result); $i++)
{
    $bmenu[$i] = $row;

    //2단메뉴 구하기
    $sql2 = " select count(me_id) AS cnt from {$g5['menu_table']} where me_use = '1' and length(me_code) = '4' and substring(me_code, 1, 2) = '{$row['me_code']}' ";
    $mmenuCnt = sql_fetch($sql2);
    $mmenu[$i]['cnt'] = $mmenuCnt['cnt'];
    $sql2 = " select * from {$g5['menu_table']} where me_use = '1' and length(me_code) = '4' and substring(me_code, 1, 2) = '{$row['me_code']}' order by me_order, me_id ";
    $result2 = sql_query($sql2);
    for($j=0; $row2=sql_fetch_array($result2); $j++)
    {
        $mmenu[$i][$j] = $row2;
    }
}
위와 같은 형태로 코드를 배열에 넣는다면 불러오기가 수월하겠죠
for($i=0; $i<$bmenu['cnt']; $i++)
{
    if($mmenu[$i]['cnt'] > 0)
    {
    ?>
    <li class="gnb_1dli" style="z-index:<?php echo $gnb_zindex--; ?>">
        <a href="<?php echo $mmenu[$i][0]['me_link']; ?>" target="_<?php echo $mmenu[$i][0]['me_target']; ?>" class="gnb_1da"><?php echo $mmenu[$i][0]['me_name'] ?></a>
    <?
    }else
    {
    ?>
    <li class="gnb_1dli" style="z-index:<?php echo $gnb_zindex--; ?>">
        <a href="<?php echo $bmenu[$i]['me_link']; ?>" target="_<?php echo $bmenu[$i]['me_target']; ?>" class="gnb_1da"><?php echo $bmenu[$i]['me_name'] ?></a>
    <?
    }
    for($j=0; $j<$mmenu[$i]['cnt']; $j++)
    {
        if($mmenu[$i]['cnt'] > 0)
        {
    ?>
        <li class="gnb_2dli"><a href="<?php echo $mmenu[$i][$j]['me_link']; ?>" target="_<?php echo $mmenu[$i][$j]['me_target']; ?>" class="gnb_2da"><?php echo $mmenu[$i][$j]['me_name'] ?></a></li>
    <?
        {
    }
}
이러한 형태로 나누어서 사용하시면 편하게 사용할 수 가 있겠지요

 

로그인 후 평가할 수 있습니다

댓글을 작성하려면 로그인이 필요합니다.

답변을 작성하려면 로그인이 필요합니다.

로그인