쌓고 쌓다

[스프링 부트] 게시글 상단 고정(공지사항) - 24 본문

프로그래밍/spring

[스프링 부트] 게시글 상단 고정(공지사항) - 24

승민아 2023. 8. 22. 17:35

공지사항 기능을 위해

공지사항 테이블을 따로 만들까, 게시글에 카테고리 컬럼을 추가할까... 이런저런 생각하다가

일단 상단 고정 기능부터 만들어봤다.

 

Poster 클래스 fix 필드 추가

@Entity
@Getter
@Setter
public class Poster {
    private Boolean fix;
}

고정할 게시글인지 fix 필드로 구별한다.

 

Poster 테이블 fix 컬럼 추가

alter table poster add fix boolean; -- BOOLEAN = tinyint(1) --

고정할 게시글은 fix 컬럼의 0과 1로 구별한다.

 

게시글 작성 폼

<form th:action="@{|/posters/${category}|}" method="post" th:object="${poster}">
    <div>
        <input type="checkbox" th:field="*{fix}">
        <label th:text="'상단 고정'"></label>
    </div>
</form>

체크박스로 게시글 고정 유무를 설정하다.

 

게시글 목록 HTML

<table class="table table-hover">
    <th>No</th>
    <th></th> <!-- Image -->
    <th>title</th>
    <th>writer</th>
    <th>date</th>
    
    <!-- 상단 고정 게시글 출력 -->
    <tr th:each="fixedPoster : ${fixedPosters}" style="background-color: whitesmoke">
        <td th:text="[알림]" style="color: green"></td>
        <td><img width="50" height="50" th:if="${fixedPoster.getImgFiles().size()}!=0" th:src="|/images/${fixedPoster.getImgFiles().get(0).getStoreFileName()}|"></td>
        <td><a th:text="|${fixedPoster.title} [${fixedPoster.commentCnt}]|" th:href="@{|/posters/view/${fixedPoster.id}|}" style="text-decoration-line: none;"></a></td>
    <td th:text="${fixedPoster.writer}"></td>
    <td th:text="${#temporals.format(fixedPoster.regdate, 'yyyy.MM.dd HH:mm')}"></td>
    </tr>

    <!-- 게시글 목록 출력 -->
    <tr th:each="poster : ${posters}" height="70">
        ...
    </tr>
</table>

게시글 목록 출력 위에

반복문으로 해당 카테고리의 고정된 게시글을 출력하는 태그를 추가했다.

고정 게시글들을 모두 출력하고 기본 페이징으로 보여지는 게시글을 뿌려준다.

 

게시글 수정 HTML

<form ... th:object="${poster}">
    <div> 
        <input type="checkbox" th:field="*{fix}">
        <label th:text="'상단 고정'"></label>
    </div>
</form>

th:field로 불러온 poster 객체의 fix 값을 통해 자동으로 checked 옵션을 넣어준다.

(th:field가 id, name, value 옵션을 자동으로 넣어줌)

 

 

PosterRepository 추가

List<Poster> findByCategoryAndFix(Category category, Boolean fix);

게시글 카테고리마다 고정한 게시글을 분류하여 뿌려주기위해

카테고리와 고정 유무로 게시글들을 뽑아온다.

 

PosterController

List<Poster> fixedPoster = posterService.fixPosterList(category, true);
model.addAttribute("fixedPosters", fixedPoster);

요청한 카테고리에 따라 고정된 게시글들을 뽑아와 게시글 목록 HTML에 넣어준다.

 

 

동작 모습

Comments