mirror of https://github.com/halo-dev/halo
🎨 支持使用自定义模板
parent
3d9ad78854
commit
fa46456abf
|
@ -130,6 +130,11 @@ public class Post implements Serializable {
|
||||||
*/
|
*/
|
||||||
private Integer allowComment = 0;
|
private Integer allowComment = 0;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 指定渲染模板
|
||||||
|
*/
|
||||||
|
private String customTpl;
|
||||||
|
|
||||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm")
|
@JsonFormat(pattern = "yyyy-MM-dd HH:mm")
|
||||||
public Date getPostDate() {
|
public Date getPostDate() {
|
||||||
return postDate;
|
return postDate;
|
||||||
|
|
|
@ -219,6 +219,33 @@ public class HaloUtils {
|
||||||
return tpls;
|
return tpls;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取定制模板
|
||||||
|
* 格式 page_xxx
|
||||||
|
*
|
||||||
|
* @return List
|
||||||
|
*/
|
||||||
|
public static List<String> getCustomTpl(String theme) {
|
||||||
|
List<String> tpls = new ArrayList<>();
|
||||||
|
try {
|
||||||
|
File basePath = new File(ResourceUtils.getURL("classpath:").getPath());
|
||||||
|
//获取主题路径
|
||||||
|
File themePath = new File(basePath.getAbsolutePath(), "templates/themes/" + theme);
|
||||||
|
File[] themeFiles = themePath.listFiles();
|
||||||
|
if (null != themeFiles && themeFiles.length > 0) {
|
||||||
|
for (File file : themeFiles) {
|
||||||
|
String[] split = StrUtil.removeSuffix(file.getName(), ".ftl").split("_");
|
||||||
|
if (split.length == 2 && "page".equals(split[0])) {
|
||||||
|
tpls.add(StrUtil.removeSuffix(file.getName(), ".ftl"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (FileNotFoundException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
return tpls;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 导出为文件
|
* 导出为文件
|
||||||
*
|
*
|
||||||
|
|
|
@ -11,6 +11,7 @@ import cc.ryanc.halo.service.GalleryService;
|
||||||
import cc.ryanc.halo.service.LinkService;
|
import cc.ryanc.halo.service.LinkService;
|
||||||
import cc.ryanc.halo.service.LogsService;
|
import cc.ryanc.halo.service.LogsService;
|
||||||
import cc.ryanc.halo.service.PostService;
|
import cc.ryanc.halo.service.PostService;
|
||||||
|
import cc.ryanc.halo.utils.HaloUtils;
|
||||||
import cc.ryanc.halo.utils.LocaleMessageUtil;
|
import cc.ryanc.halo.utils.LocaleMessageUtil;
|
||||||
import cn.hutool.core.date.DateUtil;
|
import cn.hutool.core.date.DateUtil;
|
||||||
import cn.hutool.core.util.RandomUtil;
|
import cn.hutool.core.util.RandomUtil;
|
||||||
|
@ -196,14 +197,16 @@ public class PageController {
|
||||||
return new JsonResult(ResultCodeEnum.SUCCESS.getCode(), localeMessageUtil.getMessage("code.admin.common.delete-success"));
|
return new JsonResult(ResultCodeEnum.SUCCESS.getCode(), localeMessageUtil.getMessage("code.admin.common.delete-success"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 跳转到新建页面
|
* 跳转到新建页面
|
||||||
*
|
*
|
||||||
|
* @param model model
|
||||||
* @return 模板路径admin/admin_page_md_editor
|
* @return 模板路径admin/admin_page_md_editor
|
||||||
*/
|
*/
|
||||||
@GetMapping(value = "/new")
|
@GetMapping(value = "/new")
|
||||||
public String newPage() {
|
public String newPage(Model model) {
|
||||||
|
List<String> customTpls = HaloUtils.getCustomTpl(HaloConst.OPTIONS.get(BlogPropertiesEnum.THEME.getProp()));
|
||||||
|
model.addAttribute("customTpls",customTpls);
|
||||||
return "admin/admin_page_md_editor";
|
return "admin/admin_page_md_editor";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -255,7 +258,9 @@ public class PageController {
|
||||||
@GetMapping(value = "/edit")
|
@GetMapping(value = "/edit")
|
||||||
public String editPage(@RequestParam("pageId") Long pageId, Model model) {
|
public String editPage(@RequestParam("pageId") Long pageId, Model model) {
|
||||||
Optional<Post> post = postService.findByPostId(pageId);
|
Optional<Post> post = postService.findByPostId(pageId);
|
||||||
|
List<String> customTpls = HaloUtils.getCustomTpl(HaloConst.OPTIONS.get(BlogPropertiesEnum.THEME.getProp()));
|
||||||
model.addAttribute("post", post.get());
|
model.addAttribute("post", post.get());
|
||||||
|
model.addAttribute("customTpls",customTpls);
|
||||||
return "admin/admin_page_md_editor";
|
return "admin/admin_page_md_editor";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -103,6 +103,11 @@ public class FrontPageController extends BaseController {
|
||||||
model.addAttribute("commentsCount", comments.size());
|
model.addAttribute("commentsCount", comments.size());
|
||||||
model.addAttribute("rainbow", rainbow);
|
model.addAttribute("rainbow", rainbow);
|
||||||
postService.updatePostView(post);
|
postService.updatePostView(post);
|
||||||
|
|
||||||
|
//如果设置了自定义模板,则渲染自定义模板
|
||||||
|
if(StrUtil.isNotEmpty(post.getCustomTpl())){
|
||||||
|
return this.render(post.getCustomTpl());
|
||||||
|
}
|
||||||
return this.render("page");
|
return this.render("page");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -69,11 +69,26 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="box-body">
|
<div class="box-body">
|
||||||
<label for="allowComment" class="control-label"><@spring.message code='admin.editor.allow-comment' /></label>
|
<div class="form-group">
|
||||||
<select class="form-control" id="allowComment" name="allowComment">
|
<label for="allowComment" class="control-label"><@spring.message code='admin.editor.allow-comment' /></label>
|
||||||
<option value="1" <#if post?? && post.allowComment?default(1)==1>selected</#if>><@spring.message code='common.select.yes' /></option>
|
<select class="form-control" id="allowComment" name="allowComment">
|
||||||
<option value="0" <#if post?? && post.allowComment?default(1)==0>selected</#if>><@spring.message code='common.select.no' /></option>
|
<option value="1" <#if post?? && post.allowComment?default(1)==1>selected</#if>><@spring.message code='common.select.yes' /></option>
|
||||||
</select>
|
<option value="0" <#if post?? && post.allowComment?default(1)==0>selected</#if>><@spring.message code='common.select.no' /></option>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label for="customTpl" class="control-label">自定义模板:</label>
|
||||||
|
<select class="form-control" id="customTpl" name="customTpl">
|
||||||
|
<#if customTpls?? && customTpls?size gt 0>
|
||||||
|
<option value="">选择模板</option>
|
||||||
|
<#list customTpls as tpl>
|
||||||
|
<option value="${tpl}" <#if post?? && post.customTpl?if_exists == "${tpl}">selected</#if>>${tpl}</option>
|
||||||
|
</#list>
|
||||||
|
<#else>
|
||||||
|
<option value="">无自定义模板</option>
|
||||||
|
</#if>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="box-footer">
|
<div class="box-footer">
|
||||||
<button onclick="push(1)" class="btn btn-default btn-sm "><@spring.message code='admin.editor.save-draft' /></button>
|
<button onclick="push(1)" class="btn btn-default btn-sm "><@spring.message code='admin.editor.save-draft' /></button>
|
||||||
|
@ -207,7 +222,8 @@
|
||||||
'postContentMd': simplemde.value(),
|
'postContentMd': simplemde.value(),
|
||||||
'postContent': simplemde.markdown(simplemde.value()),
|
'postContent': simplemde.markdown(simplemde.value()),
|
||||||
'postThumbnail': $('#selectImg').attr('src'),
|
'postThumbnail': $('#selectImg').attr('src'),
|
||||||
'allowComment' : $('#allowComment').val()
|
'allowComment' : $('#allowComment').val(),
|
||||||
|
'customTpl' : $("#customTpl").val()
|
||||||
},
|
},
|
||||||
success: function (data) {
|
success: function (data) {
|
||||||
if(data.code==1){
|
if(data.code==1){
|
||||||
|
|
Loading…
Reference in New Issue