diff --git a/src/main/java/cc/ryanc/halo/config/FreeMarkerAutoConfiguration.java b/src/main/java/cc/ryanc/halo/config/FreeMarkerAutoConfiguration.java index 0ae24fdfe..e854e7b85 100644 --- a/src/main/java/cc/ryanc/halo/config/FreeMarkerAutoConfiguration.java +++ b/src/main/java/cc/ryanc/halo/config/FreeMarkerAutoConfiguration.java @@ -1,5 +1,7 @@ package cc.ryanc.halo.config; +import cc.ryanc.halo.model.method.RandomMethod; +import cc.ryanc.halo.model.method.RecentPostsMethod; import cc.ryanc.halo.model.tag.ArticleTagDirective; import cc.ryanc.halo.model.tag.CommonTagDirective; import cc.ryanc.halo.service.OptionsService; @@ -38,6 +40,12 @@ public class FreeMarkerAutoConfiguration { @Autowired private ArticleTagDirective articleTagDirective; + @Autowired + private RandomMethod randomMethod; + + @Autowired + private RecentPostsMethod recentPostsMethod; + @PostConstruct public void setSharedVariable() { try { @@ -46,6 +54,8 @@ public class FreeMarkerAutoConfiguration { configuration.setSharedVariable("articleTag", articleTagDirective); configuration.setSharedVariable("options", optionsService.findAllOptions()); configuration.setSharedVariable("user", userService.findUser()); + configuration.setSharedVariable("randomMethod", randomMethod); + configuration.setSharedVariable("recentPostsMethod", recentPostsMethod); } catch (TemplateModelException e) { log.error("Custom tags failed to load:{}", e.getMessage()); } diff --git a/src/main/java/cc/ryanc/halo/model/method/RandomMethod.java b/src/main/java/cc/ryanc/halo/model/method/RandomMethod.java new file mode 100644 index 000000000..6ed1be3ac --- /dev/null +++ b/src/main/java/cc/ryanc/halo/model/method/RandomMethod.java @@ -0,0 +1,33 @@ +package cc.ryanc.halo.model.method; + +import cn.hutool.core.util.RandomUtil; +import freemarker.template.SimpleNumber; +import freemarker.template.TemplateMethodModelEx; +import freemarker.template.TemplateModelException; +import org.springframework.stereotype.Component; + +import java.util.List; + +/** + * @author : RYAN0UP + * @date : 2018/12/21 + */ +@Component +public class RandomMethod implements TemplateMethodModelEx { + + /** + * 生成随机数 + * + * @param arguments 参数 + * @return Object + * @throws TemplateModelException TemplateModelException + */ + @Override + public Object exec(List arguments) throws TemplateModelException { + SimpleNumber argOne = (SimpleNumber) arguments.get(0); + SimpleNumber argTwo = (SimpleNumber) arguments.get(1); + int start = argOne.getAsNumber().intValue(); + int end = argTwo.getAsNumber().intValue(); + return RandomUtil.randomInt(start, end); + } +} diff --git a/src/main/java/cc/ryanc/halo/model/method/RecentPostsMethod.java b/src/main/java/cc/ryanc/halo/model/method/RecentPostsMethod.java new file mode 100644 index 000000000..8575837cb --- /dev/null +++ b/src/main/java/cc/ryanc/halo/model/method/RecentPostsMethod.java @@ -0,0 +1,35 @@ +package cc.ryanc.halo.model.method; + +import cc.ryanc.halo.service.PostService; +import freemarker.template.SimpleNumber; +import freemarker.template.TemplateMethodModelEx; +import freemarker.template.TemplateModelException; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.List; + +/** + * @author : RYAN0UP + * @date : 2018/12/31 + */ +@Component +public class RecentPostsMethod implements TemplateMethodModelEx { + + @Autowired + private PostService postService; + + /** + * 获取最近的文章 + * + * @param arguments 参数 + * @return Object + * @throws TemplateModelException TemplateModelException + */ + @Override + public Object exec(List arguments) throws TemplateModelException { + SimpleNumber argOne = (SimpleNumber) arguments.get(0); + int limit = argOne.getAsNumber().intValue(); + return postService.getRecentPosts(limit); + } +} diff --git a/src/main/java/cc/ryanc/halo/repository/PostRepository.java b/src/main/java/cc/ryanc/halo/repository/PostRepository.java index dd79f5df2..eb13a587e 100644 --- a/src/main/java/cc/ryanc/halo/repository/PostRepository.java +++ b/src/main/java/cc/ryanc/halo/repository/PostRepository.java @@ -222,4 +222,13 @@ public interface PostRepository extends JpaRepository { * @return 文章数量 */ Integer countAllByPostStatusAndPostType(Integer status, String postType); + + /** + * 获取指定条数的文章 + * + * @param limit 条数 + * @return List + */ + @Query(value = "SELECT * FROM HALO_POST WHERE POST_STATUS = 0 AND POST_TYPE = 'post' ORDER BY POST_DATE DESC LIMIT :limit",nativeQuery = true) + List getPostsByLimit(@Param(value = "limit") int limit); } diff --git a/src/main/java/cc/ryanc/halo/service/PostService.java b/src/main/java/cc/ryanc/halo/service/PostService.java index 87e8a4c37..833c581dd 100755 --- a/src/main/java/cc/ryanc/halo/service/PostService.java +++ b/src/main/java/cc/ryanc/halo/service/PostService.java @@ -277,4 +277,12 @@ public interface PostService { * @return Post Post */ Post buildCategoriesAndTags(Post post, List cateList, @RequestParam("tagList") String tagList); + + /** + * 获取最近的文章 + * + * @param limit 条数 + * @return List + */ + List getRecentPosts(int limit); } diff --git a/src/main/java/cc/ryanc/halo/service/impl/PostServiceImpl.java b/src/main/java/cc/ryanc/halo/service/impl/PostServiceImpl.java index e4083b4fa..37c83704d 100755 --- a/src/main/java/cc/ryanc/halo/service/impl/PostServiceImpl.java +++ b/src/main/java/cc/ryanc/halo/service/impl/PostServiceImpl.java @@ -483,4 +483,15 @@ public class PostServiceImpl implements PostService { } return post; } + + /** + * 获取最近的文章 + * + * @param limit 条数 + * @return List + */ + @Override + public List getRecentPosts(int limit) { + return postRepository.getPostsByLimit(limit); + } }