From 6fbac8efa5662ac933ab72f9121860b9cb08c025 Mon Sep 17 00:00:00 2001
From: Helius <wangdoubleone@gmail.com>
Date: Wed, 06 Jul 2022 20:05:52 +0800
Subject: [PATCH] finish @page
---
src/main/java/com/xcong/farmer/cms/core/tag/TagsEnum.java | 2
src/main/java/com/xcong/farmer/cms/core/tag/data/PageChildData.java | 34 ++++
/dev/null | 47 ------
src/main/java/com/xcong/farmer/cms/core/template/TemplateConfiguration.java | 10 +
src/main/java/com/xcong/farmer/cms/core/handler/PageDataParserHandler.java | 95 +++++++++++++
src/main/java/com/xcong/farmer/cms/core/tag/data/PageData.java | 88 ++++++++++++
src/main/java/com/xcong/farmer/cms/core/tag/model/Pagination.java | 88 ++++++++++++
7 files changed, 316 insertions(+), 48 deletions(-)
diff --git a/src/main/java/com/xcong/farmer/cms/core/handler/PageDataParserHandler.java b/src/main/java/com/xcong/farmer/cms/core/handler/PageDataParserHandler.java
index e886cb3..5ad116f 100644
--- a/src/main/java/com/xcong/farmer/cms/core/handler/PageDataParserHandler.java
+++ b/src/main/java/com/xcong/farmer/cms/core/handler/PageDataParserHandler.java
@@ -1,15 +1,110 @@
package com.xcong.farmer.cms.core.handler;
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.xcong.farmer.cms.configurations.properties.CmsProperties;
import com.xcong.farmer.cms.core.node.AttrNode;
+import com.xcong.farmer.cms.core.node.Template;
+import com.xcong.farmer.cms.core.tag.data.PageChildData;
+import com.xcong.farmer.cms.core.tag.data.PageData;
+import com.xcong.farmer.cms.core.tag.model.Article;
+import com.xcong.farmer.cms.core.tag.model.Pagination;
+import com.xcong.farmer.cms.modules.system.entity.ArticleEntity;
+import com.xcong.farmer.cms.modules.system.mapper.ArticleMapper;
+import com.xcong.farmer.cms.utils.SpringContextHolder;
+import lombok.extern.slf4j.Slf4j;
+
+import java.util.ArrayList;
+import java.util.List;
/**
* @author wzy
* @date 2022-07-05
**/
+@Slf4j
public class PageDataParserHandler implements DataParserHandler {
+ private ArticleMapper articleMapper = SpringContextHolder.getBean(ArticleMapper.class);
+ private CmsProperties cmsProperties = SpringContextHolder.getBean(CmsProperties.class);
@Override
public void dataParser(AttrNode attrNode) {
+ log.info("分页解析");
+ Template.HAS_PAGING = true;
+ Long companyId = (Long) attrNode.getSystemDataValue("companyId");
+ Pagination param = (Pagination) attrNode.getParam();
+
+ Page<ArticleEntity> page = new Page<>(Integer.parseInt(param.getPage()), Integer.parseInt(param.getLimit()));
+ ArticleEntity article = new ArticleEntity();
+ article.setColumnCode(param.getCode());
+ article.setCompanyId(companyId);
+ IPage<ArticleEntity> pageList = articleMapper.selectArticleInPage(page, article);
+
+ PageData pageData = new PageData();
+ pageData.setTotalPage((int) pageList.getPages());
+ pageData.setIndex(Integer.parseInt(param.getPage()));
+ pageData.setTotalCnt((int) pageList.getSize());
+
+ if (CollUtil.isNotEmpty(pageList.getRecords())) {
+ String path = cmsProperties.getBaseUrl() + "/" + param.getCode();
+ String filename = "index_{}.html";
+
+ List<PageChildData> list = new ArrayList<>();
+ int pageNo = Integer.parseInt(param.getPage());
+
+ // 计算出页面显示分页的最大和最小值
+ int[] startAndEnd = pageStartAndEnd(pageNo, (int) pageList.getPages(), Integer.parseInt(param.getSize()));
+ for (int i = startAndEnd[0]; i <= startAndEnd[1] ; i++) {
+ PageChildData child = new PageChildData();
+ child.setIndex(i);
+ if (pageNo == 1) {
+ child.setPath(path + "/index.html");
+ } else {
+ child.setPath(path + "/" + StrUtil.format(filename, i));
+ }
+ list.add(child);
+ }
+
+ pageData.setChildren(list);
+ } else {
+ pageData.setNext("javascript:void(0)");
+ pageData.setPrev("javascript:void(0)");
+ }
+
+ if (Integer.parseInt(param.getPage()) == pageList.getPages()) {
+ Template.HAS_PAGING = false;
+ }
+
+ attrNode.setData(pageData);
}
+
+ /**
+ * (x + y)/2 = index
+ * y - x= size 解二元一次方程
+ *
+ * @param index 当前页码
+ * @param totalPage 总页数
+ * @param size 分页大小
+ * @return
+ */
+ public int[] pageStartAndEnd(int index, int totalPage, int size) {
+ int[] page = new int[2];
+ int end = ((index * 2) + size) / 2;;
+
+ int start = end - size + 1;
+ if (start < 1) {
+ start = 1;
+ }
+
+ if (end > totalPage) {
+ end = totalPage;
+ }
+
+ page[0] = start;
+ page[1] = end;
+ return page;
+ }
+
}
diff --git a/src/main/java/com/xcong/farmer/cms/core/tag/TagsEnum.java b/src/main/java/com/xcong/farmer/cms/core/tag/TagsEnum.java
index 6445382..675afe9 100644
--- a/src/main/java/com/xcong/farmer/cms/core/tag/TagsEnum.java
+++ b/src/main/java/com/xcong/farmer/cms/core/tag/TagsEnum.java
@@ -10,7 +10,7 @@
ARTICLES("@articles", "com.xcong.farmer.cms.core.tag.model.Articles", "com.xcong.farmer.cms.core.handler.ArticlesDataParserHandler",2),
ARTICLE("@article", "com.xcong.farmer.cms.core.tag.model.Article", "com.xcong.farmer.cms.core.handler.ArticleDataParserHandler",2),
CHILD("@child", "com.xcong.farmer.cms.core.tag.model.Child", "com.xcong.farmer.cms.core.handler.ChildDataParserHandler",2),
- PAGE("@page", "com.xcong.farmer.cms.core.tag.model.Page", "com.xcong.farmer.cms.core.handler.PageDataParserHandler",2),
+ PAGE("@page", "com.xcong.farmer.cms.core.tag.model.Pagination", "com.xcong.farmer.cms.core.handler.PageDataParserHandler",2),
// AD("@ad", "com.xcong.farmer.cms.core.tag.model.Ad", "",2),
// COLUMNS("@columns", "com.xcong.farmer.cms.core.tag.model.Columns", "",2),
COLUMN("@column", "com.xcong.farmer.cms.core.tag.model.Column", "com.xcong.farmer.cms.core.handler.ColumnDataParserHandler",2);
diff --git a/src/main/java/com/xcong/farmer/cms/core/tag/data/PageChildData.java b/src/main/java/com/xcong/farmer/cms/core/tag/data/PageChildData.java
new file mode 100644
index 0000000..d7191d4
--- /dev/null
+++ b/src/main/java/com/xcong/farmer/cms/core/tag/data/PageChildData.java
@@ -0,0 +1,34 @@
+package com.xcong.farmer.cms.core.tag.data;
+
+/**
+ * @author wzy
+ * @date 2022-07-06
+ **/
+public class PageChildData {
+
+ /**
+ * 页码
+ */
+ private int index;
+
+ /**
+ * 链接
+ */
+ private String path;
+
+ public int getIndex() {
+ return index;
+ }
+
+ public void setIndex(int index) {
+ this.index = index;
+ }
+
+ public String getPath() {
+ return path;
+ }
+
+ public void setPath(String path) {
+ this.path = path;
+ }
+}
diff --git a/src/main/java/com/xcong/farmer/cms/core/tag/data/PageData.java b/src/main/java/com/xcong/farmer/cms/core/tag/data/PageData.java
new file mode 100644
index 0000000..444dd27
--- /dev/null
+++ b/src/main/java/com/xcong/farmer/cms/core/tag/data/PageData.java
@@ -0,0 +1,88 @@
+package com.xcong.farmer.cms.core.tag.data;
+
+import java.util.List;
+
+/**
+ * @author wzy
+ * @date 2022-07-06
+ **/
+public class PageData {
+
+ /**
+ * 当前页
+ */
+ private Integer index;
+
+ /**
+ * 下一页链接
+ */
+ private String next;
+
+ /**
+ * 上一页链接
+ */
+ private String prev;
+
+ /**
+ * 总页数
+ */
+ private int totalPage;
+
+ /**
+ * 总条数
+ */
+ private int totalCnt;
+
+ /**
+ * 页码
+ */
+ private List<PageChildData> children;
+
+ public List<PageChildData> getChildren() {
+ return children;
+ }
+
+ public void setChildren(List<PageChildData> children) {
+ this.children = children;
+ }
+
+ public Integer getIndex() {
+ return index;
+ }
+
+ public void setIndex(Integer index) {
+ this.index = index;
+ }
+
+ public String getNext() {
+ return next;
+ }
+
+ public void setNext(String next) {
+ this.next = next;
+ }
+
+ public String getPrev() {
+ return prev;
+ }
+
+ public void setPrev(String prev) {
+ this.prev = prev;
+ }
+
+ public int getTotalPage() {
+ return totalPage;
+ }
+
+ public void setTotalPage(int totalPage) {
+ this.totalPage = totalPage;
+ }
+
+ public int getTotalCnt() {
+ return totalCnt;
+ }
+
+ public void setTotalCnt(int totalCnt) {
+ this.totalCnt = totalCnt;
+ }
+}
diff --git a/src/main/java/com/xcong/farmer/cms/core/tag/model/Page.java b/src/main/java/com/xcong/farmer/cms/core/tag/model/Page.java
deleted file mode 100644
index d16bc79..0000000
--- a/src/main/java/com/xcong/farmer/cms/core/tag/model/Page.java
+++ /dev/null
@@ -1,47 +0,0 @@
-package com.xcong.farmer.cms.core.tag.model;
-
-/**
- * @author wzy
- * @date 2022-07-05
- **/
-public class Page {
-
- /**
- * 栏目ID
- */
- private String colId;
-
- /**
- * 分页数字显示几个
- */
- private String size;
-
- /**
- * 对象名称
- */
- private String field;
-
- public String getColId() {
- return colId;
- }
-
- public void setColId(String colId) {
- this.colId = colId;
- }
-
- public String getSize() {
- return size;
- }
-
- public void setSize(String size) {
- this.size = size;
- }
-
- public String getField() {
- return field;
- }
-
- public void setField(String field) {
- this.field = field;
- }
-}
diff --git a/src/main/java/com/xcong/farmer/cms/core/tag/model/Pagination.java b/src/main/java/com/xcong/farmer/cms/core/tag/model/Pagination.java
new file mode 100644
index 0000000..206e281
--- /dev/null
+++ b/src/main/java/com/xcong/farmer/cms/core/tag/model/Pagination.java
@@ -0,0 +1,88 @@
+package com.xcong.farmer.cms.core.tag.model;
+
+/**
+ * @author wzy
+ * @date 2022-07-05
+ **/
+public class Pagination {
+
+ /**
+ * 栏目ID
+ */
+ private String colId;
+
+ /**
+ * 栏目编码
+ */
+ private String code;
+
+ /**
+ * 分页数字显示几个
+ */
+ private String size;
+
+ /**
+ * 对象名称
+ */
+ private String field;
+
+ /**
+ * 每页数量
+ */
+ private String limit;
+
+ /**
+ * 页码
+ */
+ private String page;
+
+
+ public String getCode() {
+ return code;
+ }
+
+ public void setCode(String code) {
+ this.code = code;
+ }
+
+
+ public String getSize() {
+ return size;
+ }
+
+ public void setSize(String size) {
+ this.size = size;
+ }
+
+ public String getLimit() {
+ return limit;
+ }
+
+ public void setLimit(String limit) {
+ this.limit = limit;
+ }
+
+ public String getPage() {
+ return page;
+ }
+
+ public void setPage(String page) {
+ this.page = page;
+ }
+
+ public String getColId() {
+ return colId;
+ }
+
+ public void setColId(String colId) {
+ this.colId = colId;
+ }
+
+ public String getField() {
+ return field;
+ }
+
+ public void setField(String field) {
+ this.field = field;
+ }
+}
diff --git a/src/main/java/com/xcong/farmer/cms/core/template/TemplateConfiguration.java b/src/main/java/com/xcong/farmer/cms/core/template/TemplateConfiguration.java
index 6fec7de..b3f748a 100644
--- a/src/main/java/com/xcong/farmer/cms/core/template/TemplateConfiguration.java
+++ b/src/main/java/com/xcong/farmer/cms/core/template/TemplateConfiguration.java
@@ -34,6 +34,16 @@
this.templateLoader.data(map);
Template template = template(templateName);
template.output(this.outputPath);
+
+ // 判断是否有分页,有则执行。从第二页开始
+ int i = 2;
+ while(Template.HAS_PAGING) {
+ map.put("page", i);
+ this.templateLoader.data(map);
+ Template pageTemplate = template(templateName);
+ pageTemplate.output(this.outputPath);
+ i++;
+ }
}
public Template template(String templateName) {
--
Gitblit v1.9.1