게시글 출력 시 여분 필드 값에 따라 div 묶는 방법?
본문
안녕하세요~ 회사 홈페이지 연혁을 게시판으로 등록을 하고 있는데 여분 필드 값에 따라 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의 값이 동일한 리스트만 한곳에 묶였으면 좋겠네요.
<기존 모양>
<원하는 모양>
아참. 해당 게시판은 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>
이렇게 하면 동일한 연도의 리스트가 하나의 그룹으로 묶이게 될 것 같습니다.
!-->
답변을 작성하시기 전에 로그인 해주세요.