mirror of https://github.com/halo-dev/halo
feat: support post custom template.
parent
a0d4c7493f
commit
0c189ee06c
|
@ -80,9 +80,14 @@ public class ThemeController {
|
||||||
themeService.saveTemplateContent(themeId, param.getPath(), param.getContent());
|
themeService.saveTemplateContent(themeId, param.getPath(), param.getContent());
|
||||||
}
|
}
|
||||||
|
|
||||||
@GetMapping("files/custom")
|
@GetMapping("activation/template/custom/sheet")
|
||||||
public Set<String> customTemplate() {
|
public Set<String> customSheetTemplate() {
|
||||||
return themeService.listCustomTemplates(themeService.getActivatedThemeId());
|
return themeService.listCustomTemplates(themeService.getActivatedThemeId(), ThemeService.CUSTOM_SHEET_PREFIX);
|
||||||
|
}
|
||||||
|
|
||||||
|
@GetMapping("activation/template/custom/post")
|
||||||
|
public Set<String> customPostTemplate() {
|
||||||
|
return themeService.listCustomTemplates(themeService.getActivatedThemeId(), ThemeService.CUSTOM_POST_PREFIX);
|
||||||
}
|
}
|
||||||
|
|
||||||
@PostMapping("{themeId}/activation")
|
@PostMapping("{themeId}/activation")
|
||||||
|
|
|
@ -21,6 +21,7 @@ import run.halo.app.model.entity.Post;
|
||||||
import run.halo.app.model.entity.PostMeta;
|
import run.halo.app.model.entity.PostMeta;
|
||||||
import run.halo.app.model.entity.Tag;
|
import run.halo.app.model.entity.Tag;
|
||||||
import run.halo.app.model.enums.PostStatus;
|
import run.halo.app.model.enums.PostStatus;
|
||||||
|
import run.halo.app.model.support.HaloConst;
|
||||||
import run.halo.app.model.vo.BaseCommentVO;
|
import run.halo.app.model.vo.BaseCommentVO;
|
||||||
import run.halo.app.model.vo.PostListVO;
|
import run.halo.app.model.vo.PostListVO;
|
||||||
import run.halo.app.service.*;
|
import run.halo.app.service.*;
|
||||||
|
@ -160,6 +161,10 @@ public class ContentArchiveController {
|
||||||
model.addAttribute("metas", postMetaService.convertToMap(metas));
|
model.addAttribute("metas", postMetaService.convertToMap(metas));
|
||||||
model.addAttribute("comments", comments);
|
model.addAttribute("comments", comments);
|
||||||
|
|
||||||
|
if (themeService.templateExists(ThemeService.CUSTOM_POST_PREFIX + post.getTemplate() + HaloConst.SUFFIX_FTL)) {
|
||||||
|
return themeService.render(ThemeService.CUSTOM_POST_PREFIX + post.getTemplate());
|
||||||
|
}
|
||||||
|
|
||||||
return themeService.render("post");
|
return themeService.render("post");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -70,10 +70,15 @@ public interface ThemeService {
|
||||||
String THEMES_CACHE_KEY = "themes";
|
String THEMES_CACHE_KEY = "themes";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Custom sheet prefix.
|
* Custom sheet template prefix.
|
||||||
*/
|
*/
|
||||||
String CUSTOM_SHEET_PREFIX = "sheet_";
|
String CUSTOM_SHEET_PREFIX = "sheet_";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Custom post template prefix.
|
||||||
|
*/
|
||||||
|
String CUSTOM_POST_PREFIX = "post_";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Theme provider remote name.
|
* Theme provider remote name.
|
||||||
*/
|
*/
|
||||||
|
@ -132,8 +137,18 @@ public interface ThemeService {
|
||||||
* @param themeId theme id must not be blank
|
* @param themeId theme id must not be blank
|
||||||
* @return a set of templates
|
* @return a set of templates
|
||||||
*/
|
*/
|
||||||
|
@Deprecated
|
||||||
Set<String> listCustomTemplates(@NonNull String themeId);
|
Set<String> listCustomTemplates(@NonNull String themeId);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Lists a set of custom template, such as sheet_xxx.ftl/post_xxx.ftl, and xxx will be template name
|
||||||
|
*
|
||||||
|
* @param themeId theme id must not be blank
|
||||||
|
* @param prefix post_ or sheet_
|
||||||
|
* @return a set of templates
|
||||||
|
*/
|
||||||
|
Set<String> listCustomTemplates(@NonNull String themeId, @NonNull String prefix);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Judging whether template exists under the specified theme
|
* Judging whether template exists under the specified theme
|
||||||
*
|
*
|
||||||
|
|
|
@ -187,6 +187,25 @@ public class ThemeServiceImpl implements ThemeService {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Set<String> listCustomTemplates(String themeId, String prefix) {
|
||||||
|
// Get the theme path
|
||||||
|
Path themePath = Paths.get(getThemeOfNonNullBy(themeId).getThemePath());
|
||||||
|
|
||||||
|
try (Stream<Path> pathStream = Files.list(themePath)) {
|
||||||
|
return pathStream.filter(path -> StringUtils.startsWithIgnoreCase(path.getFileName().toString(), prefix))
|
||||||
|
.map(path -> {
|
||||||
|
// Remove prefix
|
||||||
|
String customTemplate = StringUtils.removeStartIgnoreCase(path.getFileName().toString(), prefix);
|
||||||
|
// Remove suffix
|
||||||
|
return StringUtils.removeEndIgnoreCase(customTemplate, HaloConst.SUFFIX_FTL);
|
||||||
|
})
|
||||||
|
.collect(Collectors.toSet());
|
||||||
|
} catch (IOException e) {
|
||||||
|
throw new ServiceException("Failed to list files of path " + themePath.toString(), e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean templateExists(String template) {
|
public boolean templateExists(String template) {
|
||||||
if (StringUtils.isBlank(template)) {
|
if (StringUtils.isBlank(template)) {
|
||||||
|
|
Loading…
Reference in New Issue