Update anatole theme.

pull/146/head
ruibaby 2019-04-21 12:24:37 +08:00
parent b6e42e2d7e
commit 135586b4ec
6 changed files with 125 additions and 9 deletions

View File

@ -1,6 +1,5 @@
package run.halo.app.model.entity; package run.halo.app.model.entity;
import run.halo.app.model.enums.AttachmentType;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import lombok.ToString; import lombok.ToString;

View File

@ -6,6 +6,7 @@ import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.jpa.repository.Query; import org.springframework.data.jpa.repository.Query;
import org.springframework.lang.NonNull; import org.springframework.lang.NonNull;
import run.halo.app.model.entity.Post; import run.halo.app.model.entity.Post;
import run.halo.app.model.enums.PostStatus;
import run.halo.app.repository.base.BasePostRepository; import run.halo.app.repository.base.BasePostRepository;
import java.util.Date; import java.util.Date;
@ -26,8 +27,8 @@ public interface PostRepository extends BasePostRepository<Post>, JpaSpecificati
Long countLike(); Long countLike();
@NonNull @NonNull
Page<Post> findAllByStatusAndCreateTimeBefore(Date createTime, @NonNull Pageable pageable); Page<Post> findAllByStatusAndCreateTimeBefore(PostStatus status, Date createTime, @NonNull Pageable pageable);
@NonNull @NonNull
Page<Post> findAllByStatusAndCreateTimeAfter(Date createTime, @NonNull Pageable pageable); Page<Post> findAllByStatusAndCreateTimeAfter(PostStatus status, Date createTime, @NonNull Pageable pageable);
} }

View File

@ -196,6 +196,22 @@ public interface PostService extends CrudService<Post, Integer> {
@NonNull @NonNull
Page<PostListVO> convertToListVo(@NonNull Page<Post> postPage); Page<PostListVO> convertToListVo(@NonNull Page<Post> postPage);
/**
* Get pre post by current post date.
* @param date date
* @return post
*/
@NonNull
Post getPrePostOfNullable(@NonNull Date date);
/**
* Get next post by current post date.
* @param date date
* @return post
*/
@NonNull
Post getNextPostOfNullable(@NonNull Date date);
/** /**
* Lists all posts by post status. * Lists all posts by post status.
* *

View File

@ -363,6 +363,15 @@ public class PostServiceImpl extends AbstractCrudService<Post, Integer> implemen
return super.removeById(postId); return super.removeById(postId);
} }
@Override
public Post getPrePostOfNullable(Date date) {
return getPrePost(date).orElse(null);
}
@Override
public Post getNextPostOfNullable(Date date) {
return getNextPost(date).orElse(null);
}
@Override @Override
public Page<PostSimpleOutputDTO> convertToSimpleDto(@NonNull Page<Post> postPage) { public Page<PostSimpleOutputDTO> convertToSimpleDto(@NonNull Page<Post> postPage) {
@ -441,7 +450,7 @@ public class PostServiceImpl extends AbstractCrudService<Post, Integer> implemen
public Optional<Post> getPrePost(Date createTime) { public Optional<Post> getPrePost(Date createTime) {
Assert.notNull(createTime, "Create time must not be null"); Assert.notNull(createTime, "Create time must not be null");
Page<Post> prePostPage = postRepository.findAllByStatusAndCreateTimeAfter(createTime, PageRequest.of(0, 1)); Page<Post> prePostPage = postRepository.findAllByStatusAndCreateTimeAfter(PostStatus.PUBLISHED, createTime, PageRequest.of(0, 1));
if (prePostPage.isEmpty()) { if (prePostPage.isEmpty()) {
return Optional.empty(); return Optional.empty();
@ -454,13 +463,13 @@ public class PostServiceImpl extends AbstractCrudService<Post, Integer> implemen
public Optional<Post> getNextPost(Date createTime) { public Optional<Post> getNextPost(Date createTime) {
Assert.notNull(createTime, "Create time must not be null"); Assert.notNull(createTime, "Create time must not be null");
Page<Post> prePostPage = postRepository.findAllByStatusAndCreateTimeBefore(createTime, PageRequest.of(0, 1)); Page<Post> nextPostPage = postRepository.findAllByStatusAndCreateTimeBefore(PostStatus.PUBLISHED, createTime, PageRequest.of(0, 1));
if (prePostPage.isEmpty()) { if (nextPostPage.isEmpty()) {
return Optional.empty(); return Optional.empty();
} }
return Optional.of(prePostPage.getContent().get(0)); return Optional.of(nextPostPage.getContent().get(nextPostPage.getContent().size()-1));
} }
/** /**

View File

@ -0,0 +1,91 @@
package run.halo.app.web.controller.content;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import run.halo.app.model.entity.Category;
import run.halo.app.model.entity.Post;
import run.halo.app.model.entity.Tag;
import run.halo.app.model.enums.PostStatus;
import run.halo.app.service.*;
import javax.servlet.http.HttpServletRequest;
import java.util.Date;
import java.util.List;
/**
* Blog archive page controller
*
* @author : RYAN0UP
* @date : 2019-03-17
*/
@Controller
@RequestMapping(value = "/archives")
public class ContentArchiveController {
private final PostService postService;
private final CommentService commentService;
private final ThemeService themeService;
private final PostCategoryService postCategoryService;
private final PostTagService postTagService;
public ContentArchiveController(PostService postService,
CommentService commentService,
ThemeService themeService,
PostCategoryService postCategoryService,
PostTagService postTagService) {
this.postService = postService;
this.commentService = commentService;
this.themeService = themeService;
this.postCategoryService = postCategoryService;
this.postTagService = postTagService;
}
/**
* Render post page.
*
* @param url post slug url.
* @param cp comment page number
* @param request request
* @param model model
* @return template path: theme/{theme}/post.ftl
*/
@GetMapping(value = "{url}")
public String post(@PathVariable String url,
@RequestParam(value = "cp", defaultValue = "1") Integer cp,
HttpServletRequest request,
Model model) {
final Post post = postService.getByUrl(url);
if (null == post || !post.getStatus().equals(PostStatus.PUBLISHED)) {
return "redirect:/404";
}
final Date publishTime = post.getCreateTime();
final Post nextPost = postService.getNextPostOfNullable(publishTime);
final Post prePost = postService.getPrePostOfNullable(publishTime);
if (null != prePost) {
model.addAttribute("prePost", prePost);
}
if (null != nextPost) {
model.addAttribute("nextPost", nextPost);
}
List<Category> categories = postCategoryService.listCategoryBy(post.getId());
List<Tag> tags = postTagService.listTagsBy(post.getId());
model.addAttribute("is_post", true);
model.addAttribute("post",post);
model.addAttribute("categories", categories);
model.addAttribute("tags", tags);
return themeService.render("post");
}
}

View File

@ -81,12 +81,12 @@
<ul class="clearfix"> <ul class="clearfix">
<#if nextPost??> <#if nextPost??>
<li class="pre pagbuttons"> <li class="pre pagbuttons">
<a class="btn" role="navigation" href="${options.blog_url!}/archives/${nextPost.url}" title="${nextPost.title}">一篇</a> <a class="btn" role="navigation" href="${options.blog_url!}/archives/${nextPost.url}" title="${nextPost.title}">一篇</a>
</li> </li>
</#if> </#if>
<#if prePost??> <#if prePost??>
<li class="next pagbuttons"> <li class="next pagbuttons">
<a class="btn" role="navigation" href="${options.blog_url!}/archives/${prePost.url}" title="${prePost.title}">一篇</a> <a class="btn" role="navigation" href="${options.blog_url!}/archives/${prePost.url}" title="${prePost.title}">一篇</a>
</li> </li>
</#if> </#if>
</ul> </ul>