게시글 출력 시 여분 필드 값에 따라 div 묶는 방법?

게시글 출력 시 여분 필드 값에 따라 div 묶는 방법?

QA

게시글 출력 시 여분 필드 값에 따라 div 묶는 방법?

답변 3

본문

안녕하세요~ 회사 홈페이지 연혁을 게시판으로 등록을 하고 있는데 여분 필드 값에 따라 div를 묶는 방법이 있을까요? 


 <div class="tbl_head01 tbl_wrap">
        <ul class="year_total mt-80">
        <?php for ($i=0; $i<count($list); $i++) {
                $edit_href = "../bbs/write.php?w=u&bo_table=$bo_table&wr_id=".$list[$i][wr_id];
         ?>
        <li class="pro<?php echo $list[$i]['wr_15'] ?>">
            <div class="res_pd clear">
                <div class="year mc"><?php echo $list[$i]['wr_15'] ?> <?php if ($is_checkbox) { ?><label for="chk_wr_id_<?php echo $i ?>" class="sound_only"><?php echo $list[$i]['wr_15'] ?></label><input type="checkbox" name="chk_wr_id[]" value="<?php echo $list[$i]['wr_id'] ?>" id="chk_wr_id_<?php echo $i ?>"><?php } ?></div>
                <div class="con"><a href="<?php echo $list[$i]['href'].'&sca='.urlencode($list[$i]['ca_name']); ?>">
                <?php echo $list[$i]['wr_subject'] ?>
                </div>
            </div>
        </li>
        <? } ?>
    </ul>
    </div>

 

리스트 출력은 현재 이렇습니다. wr_15에는 시행년도가 기록되는데

해당 년도에 리스트가 여러개면 같은 숫자가 반복되는게 보기에 썩 좋지가 않아서

wr_15의 값이 동일한 리스트만 한곳에 묶였으면 좋겠네요.

<기존 모양>

2084341921_1698738500.7246.png

 

<원하는 모양>

2084341921_1698738547.4788.png

 

 

아참. 해당 게시판은 wr_15 값에 따라 내림차순으로 정렬하고 있습니다.

이 질문에 댓글 쓰기 :

답변 3


<?php
$is_checkbox = false;
$bo_table = 'test';
$list = [
    ['wr_id' => '9', 'href' => '#9', 'ca_name' => '1', 'wr_subject' => '9', 'wr_15' => '2023'],
    ['wr_id' => '8', 'href' => '#8', 'ca_name' => '1', 'wr_subject' => '8', 'wr_15' => '2022'],
    ['wr_id' => '7', 'href' => '#7', 'ca_name' => '1', 'wr_subject' => '7', 'wr_15' => '2022'],
    ['wr_id' => '6', 'href' => '#6', 'ca_name' => '1', 'wr_subject' => '6', 'wr_15' => '2022'],
    ['wr_id' => '5', 'href' => '#5', 'ca_name' => '1', 'wr_subject' => '5', 'wr_15' => '2022'],
    ['wr_id' => '4', 'href' => '#4', 'ca_name' => '1', 'wr_subject' => '4', 'wr_15' => '2022'],
    ['wr_id' => '3', 'href' => '#3', 'ca_name' => '1', 'wr_subject' => '3', 'wr_15' => '2021'],
    ['wr_id' => '2', 'href' => '#2', 'ca_name' => '1', 'wr_subject' => '2', 'wr_15' => '2020'],
    ['wr_id' => '1', 'href' => '#1', 'ca_name' => '1', 'wr_subject' => '1', 'wr_15' => '2020'],
];
 
$wr_15_values = array_column($list, 'wr_15');
$wr_15_values = array_unique($wr_15_values);
?>
 
<style>
.year_total { list-style-type: none; }
.year_total .year { font-size: 1.6em; font-weight: bold; color: #c0392b; }
.year_total .con { display: inline-block; }
<?php
$css = '';
foreach ($wr_15_values as $v) {
    $css .= '.year_total .pro' . $v . ' ~ .pro' . $v . ' .year { display: none; }' . PHP_EOL;
}
echo $css;
?>
</style>
 
 <div class="tbl_head01 tbl_wrap">
        <ul class="year_total mt-80">
        <?php for ($i=0; $i<count($list); $i++) {
                $edit_href = "../bbs/write.php?w=u&bo_table=$bo_table&wr_id=".$list[$i]['wr_id'];
         ?>
        <li class="pro<?php echo $list[$i]['wr_15'] ?>">
            <div class="res_pd clear">
                <div class="year mc"><?php echo $list[$i]['wr_15'] ?></div>
                <?php if ($is_checkbox) { ?><input type="checkbox" name="chk_wr_id[]" value="<?php echo $list[$i]['wr_id'] ?>" id="chk_wr_id_<?php echo $i ?>"><?php } ?>
                <div class="con"><a href="<?php echo $list[$i]['href'].'&sca='.urlencode($list[$i]['ca_name']); ?>">
                <?php echo $list[$i]['wr_subject'] ?>
                </a></div>
            </div>
        </li>
        <?php } ?>
    </ul>
    </div>

여러 방법이있겠지만 지금 생각나는건

쿼리를 두개 쓰는방법이 있겠네요

wr_15 를 group by로 쿼리를 돌리거나 select distinct? 로 돌려서 묶어주고

그안에서 세부목록을 where 문에 wr_15를 조건으로 넣고 쿼리를돌려서

리스트를 만드는 방법이있겠네요

다음과 같은 방법도 있으니 참고해 보세요


<div class="tbl_head01 tbl_wrap">
    <?php
    $current_year = null; // 초기값 설정
    for ($i = 0; $i < count($list); $i++) {
        $year = $list[$i]['wr_15'];
        // 현재 연도와 다르다면 새로운 그룹을 시작
        if ($year !== $current_year) {
            if ($current_year !== null) {
                // 이전 그룹을 닫음
                echo '</ul></div>';
            }
            // 새로운 그룹 시작
            echo '<div class="year_group">';
            echo '<h2>' . $year . '년 그룹</h2>';
            echo '<ul class="year_total mt-80">';
            $current_year = $year;
        }
        // 리스트 아이템 출력
        echo '<li class="pro' . $year . '">';
        echo '<div class="res_pd clear">';
        echo '<div class="year mc">' . $year . '</div>';
        echo '<div class="con"><a href="' . $list[$i]['href'] . '&sca=' . urlencode($list[$i]['ca_name']) . '">' . $list[$i]['wr_subject'] . '</a></div>';
        echo '</div>';
        echo '</li>';
    }
    // 마지막 그룹을 닫음
    echo '</ul></div>';
    ?>
</div>

이렇게 하면 동일한 연도의 리스트가 하나의 그룹으로 묶이게 될 것 같습니다.

답변을 작성하시기 전에 로그인 해주세요.
QA 내용 검색
질문등록
전체 178
© SIRSOFT
현재 페이지 제일 처음으로