mod: 前台缓存、后台权限、更换cms渲染器

This commit is contained in:
冼子明 2025-03-30 23:48:44 +08:00
parent e58b3e870c
commit ed1b5aad3e
44 changed files with 476 additions and 279 deletions

File diff suppressed because one or more lines are too long

View File

@ -27,10 +27,10 @@ public final class CommonAttribute {
public static final String FRONT_PATH="/cms/"; public static final String FRONT_PATH="/cms/";
/** 后台错误页面 */ /** 后台错误页面 */
public static final String ADMIN_ERROR_VIEW = ADMIN_PATH+"error/500.html"; public static final String ADMIN_ERROR_VIEW = "error/500.html";
/** 后台权限错误页面 */ /** 后台权限错误页面 */
public static final String ADMIN_UNAUTHORIZED_VIEW = ADMIN_PATH+"error/403.html"; public static final String ADMIN_UNAUTHORIZED_VIEW = "error/403.html";
/** 前台错误页面 */ /** 前台错误页面 */
public static final String FRONT_ERROR_VIEW = "/500.html"; public static final String FRONT_ERROR_VIEW = "/500.html";

View File

@ -0,0 +1,147 @@
package vip.fuck.sm.plugins.cms.config;
import cn.hutool.core.util.HashUtil;
import cn.hutool.json.JSONUtil;
import com.jfinal.template.Directive;
import com.jfinal.template.Engine;
import com.jfinal.template.Template;
import org.noear.solon.annotation.Component;
import org.noear.solon.boot.ServerProps;
import org.noear.solon.core.handle.Context;
import org.noear.solon.core.handle.ModelAndView;
import org.noear.solon.core.util.SupplierEx;
import org.noear.solon.data.cache.LocalCacheService;
import org.noear.solon.view.ViewConfig;
import org.noear.solon.view.enjoy.EnjoyDirectiveFactory;
import org.noear.solon.view.enjoy.EnjoyRender;
import vip.fuck.sm.plugins.cms.filter.PageCacheFilter;
import java.io.BufferedWriter;
import java.io.ByteArrayOutputStream;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.nio.charset.StandardCharsets;
public class CmsEnjoyRender extends EnjoyRender {
EnjoyRender enjoyRender;
LocalCacheService localCacheService;
public CmsEnjoyRender(EnjoyRender enjoyRender , LocalCacheService localCacheService) {
this.enjoyRender = enjoyRender;
this.localCacheService = localCacheService;
}
@Override
public Engine getProvider() {
return enjoyRender.getProvider();
}
@Override
public Engine getProviderOfDebug() {
return enjoyRender.getProviderOfDebug();
}
public CmsEnjoyRender() {
super();
}
public CmsEnjoyRender(ClassLoader classLoader) {
super(classLoader);
}
public CmsEnjoyRender(ClassLoader classLoader, String viewPrefix) {
super(classLoader, viewPrefix);
}
@Override
public void putDirective(String name, Class<? extends Directive> clz) {
enjoyRender.putDirective(name, clz);
}
@Override
public void putDirective(String name, EnjoyDirectiveFactory directiveFactory) {
enjoyRender.putDirective(name, directiveFactory);
}
@Override
public void putVariable(String name, Object value) {
enjoyRender.putVariable(name, value);
}
@Override
public void putFunction(String path) {
enjoyRender.putFunction(path);
}
@Override
public void render(Object obj, Context ctx) throws Throwable {
if (obj == null) {
return;
}
if (obj instanceof ModelAndView) {
this.render_mav((ModelAndView) obj, ctx, ctx::outputStream);
} else {
ctx.output(obj.toString());
}
}
@Override
public String renderAndReturn(Object obj, Context ctx) throws Throwable {
if (obj == null) {
return null;
}
if (obj instanceof ModelAndView) {
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
render_mav((ModelAndView) obj, ctx, () -> outputStream);
return outputStream.toString();
} else {
return obj.toString();
}
}
@Override
public void render_mav(ModelAndView mv, Context ctx, SupplierEx<OutputStream> outputStream) throws Throwable {
if (ctx.contentTypeNew() == null) {
ctx.contentType("text/html;charset=utf-8");
}
if (ViewConfig.isOutputMeta()) {
ctx.headerSet(ViewConfig.HEADER_VIEW_META, "MyEnjoyRender");
}
//添加 context 变量
mv.putIfAbsent("context", ctx);
Template template = null;
if (super.getProviderOfDebug() != null) {
try {
template = super.getProviderOfDebug().getTemplate(mv.view());
} catch (Exception e) {
//忽略不计
}
}
if (template == null) {
template = super.getProvider().getTemplate(mv.view());
}
// 输出流
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(outputStream.get(), ServerProps.response_encoding));
String mvStr = template.renderToString(mv.model());
if(mvStr!=null && PageCacheFilter.isCache(ctx.pathNew())){
String jsonStr = JSONUtil.toJsonStr(ctx.paramMap());
long hash64 = HashUtil.metroHash64(jsonStr.getBytes(StandardCharsets.UTF_8));
localCacheService.store(PageCacheFilter.CMS_PAGE_CACHE+ctx.pathNew()+"_"+hash64,mvStr,3*60);
}
writer.write(mvStr);
// template.render(mv.model(), writer);
writer.flush();
}
}

View File

@ -8,13 +8,17 @@ import com.jfinal.template.ext.spring.JFinalView;
import com.zaxxer.hikari.HikariDataSource; import com.zaxxer.hikari.HikariDataSource;
import org.noear.solon.Solon; import org.noear.solon.Solon;
import org.noear.solon.annotation.Bean; import org.noear.solon.annotation.Bean;
import org.noear.solon.annotation.Component;
import org.noear.solon.annotation.Configuration; import org.noear.solon.annotation.Configuration;
import org.noear.solon.annotation.Inject; import org.noear.solon.annotation.Inject;
import org.noear.solon.data.cache.CacheService;
import org.noear.solon.data.cache.LocalCacheService;
import org.noear.solon.view.enjoy.EnjoyRender; import org.noear.solon.view.enjoy.EnjoyRender;
import vip.fuck.sm.plugins.cms.entity._MappingKit; import vip.fuck.sm.plugins.cms.entity._MappingKit;
import vip.fuck.sm.plugins.cms.util.JFinal; import vip.fuck.sm.plugins.cms.util.JFinal;
import javax.sql.DataSource; import javax.sql.DataSource;
import java.util.Properties;
@Configuration @Configuration
public class Configxv { public class Configxv {
@ -24,7 +28,10 @@ public class Configxv {
return dataSource; return dataSource;
} }
@Bean("cmsCacheService")
public CacheService cmsCacheService() {
return new LocalCacheService();
}
@Bean @Bean
public void cx(@Db("main") ActiveRecordPlugin arp){ public void cx(@Db("main") ActiveRecordPlugin arp){
@ -37,9 +44,13 @@ public class Configxv {
} }
} }
@Bean @Bean
public void putbase(@Inject EnjoyRender enjoyRender){ public void putbase(@Inject EnjoyRender enjoyRender , @Inject("cmsCacheService") LocalCacheService localCacheService){
enjoyRender.putVariable("base", JFinal.getContextPath()); enjoyRender.putVariable("base", JFinal.getContextPath());
CmsEnjoyRender render = new CmsEnjoyRender(enjoyRender,localCacheService);
Solon.app().renderManager().register(".shtm", render);
} }
} }

View File

@ -131,10 +131,13 @@ public class BaseController {
} }
protected Integer getParaToInt(String name){ protected Integer getParaToInt(String name){
if(Context.current().paramNames().contains(name)){ String v = Context.current().param(name);
if(ObjectUtil.isNull(v)){
return null;
} else if(NumberUtil.isInteger(v) ){
return Context.current().paramAsInt(name); return Context.current().paramAsInt(name);
}else{ }else{
return null; throw new RuntimeException("参数错误");
} }
} }
@ -254,7 +257,7 @@ public class BaseController {
view = fixedSubfix(view); view = fixedSubfix(view);
Site currSite = getCurrentSite(); Site currSite = getCurrentSite();
if (ObjectUtil.isEmpty(currSite)) { if (ObjectUtil.isEmpty(currSite)) {
Site currentSite = new Site().dao().findById(1); Site currentSite = new Site().findDefault();
getSession().sessionSet(Site.ADMIN_SESSION_SITE, currentSite); getSession().sessionSet(Site.ADMIN_SESSION_SITE, currentSite);
} }
return new ModelAndView(CommonAttribute.ADMIN_PATH+view); return new ModelAndView(CommonAttribute.ADMIN_PATH+view);
@ -289,14 +292,6 @@ public class BaseController {
} }
} }
Context current = Context.current(); Context current = Context.current();
SessionState s = getSession();
JSONObject session = JSONUtil.createObj();
if(ObjectUtil.isNotEmpty(s.sessionKeys())){
for (String sessionKey : s.sessionKeys()) {
session.set(sessionKey,s.sessionGet(sessionKey));
}
}
view.put("session",session);
if(kv!=null){ if(kv!=null){
for (int i = 0; i < kv.length; i+=2) { for (int i = 0; i < kv.length; i+=2) {

View File

@ -57,6 +57,9 @@ public class IndexController extends BaseController {
} }
} }
Site currentSite = new Site().dao().findById(siteId); Site currentSite = new Site().dao().findById(siteId);
if(currentSite==null){
currentSite = new Site().findDefault();
}
getSession().sessionSet(Site.ADMIN_SESSION_SITE, currentSite); getSession().sessionSet(Site.ADMIN_SESSION_SITE, currentSite);
//统计 //统计
setAttr("contentCount", Db.queryInt("select count(*) from cms_content")); setAttr("contentCount", Db.queryInt("select count(*) from cms_content"));

View File

@ -25,10 +25,7 @@ import vip.fuck.sm.plugins.cms.entity.base.BaseModel;
import java.lang.reflect.Field; import java.lang.reflect.Field;
import java.lang.reflect.Method; import java.lang.reflect.Method;
import java.util.HashMap; import java.util.*;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
/** /**
* Controller - 管理员登录 * Controller - 管理员登录
@ -97,7 +94,7 @@ public class LoginController extends BaseController {
} }
for (Method f : ms) { for (Method f : ms) {
if(f.getName().startsWith("get") && f.getReturnType() != Void.class && f.getParameterTypes().length ==0 ){ if(f.getName().startsWith("get") && f.getReturnType() != Void.class && f.getParameterTypes().length ==0 ){
System.out.println(m.getClass().getName()+"."+ f.getName()+"();"); // System.out.println(m.getClass().getName()+"."+ f.getName()+"();");
Object value = ReflectUtil.invoke(m, f); Object value = ReflectUtil.invoke(m, f);
if(value instanceof Model){ if(value instanceof Model){
value = toJSONObject((Model) value,models); value = toJSONObject((Model) value,models);

View File

@ -45,7 +45,7 @@ public class BaseController extends vip.fuck.sm.plugins.cms.controller.admin.Ba
view = fixedSubfix(view); view = fixedSubfix(view);
Site currSite = getCurrentSite(); Site currSite = getCurrentSite();
if (ObjectUtil.isEmpty(currSite)) { if (ObjectUtil.isEmpty(currSite)) {
Site currentSite = new Site().dao().findById(1); Site currentSite = new Site().findDefault();
getSession().sessionSet(Site.ADMIN_SESSION_SITE, currentSite); getSession().sessionSet(Site.ADMIN_SESSION_SITE, currentSite);
} }
String pcTemplate = currSite.getPcTemplate(); String pcTemplate = currSite.getPcTemplate();

View File

@ -1,51 +1,89 @@
//package vip.fuck.sm.plugins.cms.filter; package vip.fuck.sm.plugins.cms.filter;
//
// import cn.hutool.core.util.HashUtil;
//import net.sf.ehcache.constructs.web.filter.SimplePageCachingFilter; import cn.hutool.core.util.ObjectUtil;
//import org.apache.commons.lang.BooleanUtils; import cn.hutool.json.JSONObject;
//import org.noear.solon.core.handle.FilterChain; import cn.hutool.json.JSONUtil;
//import org.smartboot.http.server.HttpRequest; import org.apache.commons.lang.BooleanUtils;
//import org.smartboot.http.server.HttpResponse; import org.noear.solon.annotation.Component;
//import vip.fuck.sm.plugins.cms.Config; import org.noear.solon.annotation.Inject;
//import vip.fuck.sm.plugins.cms.util.SystemUtils; import org.noear.solon.core.handle.Context;
// import org.noear.solon.core.handle.Handler;
// import org.noear.solon.core.handle.SessionState;
// import org.noear.solon.core.route.RouterInterceptor;
//public class PageCacheFilter extends SimplePageCachingFilter { import org.noear.solon.core.route.RouterInterceptorChain;
// import org.noear.solon.core.util.LogUtil;
// @Override import org.noear.solon.data.cache.LocalCacheService;
// protected void doFilter(HttpRequest request, HttpResponse response, FilterChain chain) import vip.fuck.sm.plugins.cms.Config;
// throws Exception { import vip.fuck.sm.plugins.cms.util.SystemUtils;
// // TODO Auto-generated method stub
// Config config = SystemUtils.getConfig(); import java.nio.charset.StandardCharsets;
// if (BooleanUtils.isTrue(config.getIsCacheEnabled())
// && isCache(request.getRequestURI())) { @Component
// super.doFilter(request, response, chain); public class PageCacheFilter implements RouterInterceptor {
// } else {
// chain.doFilter(request, response); public static final String CMS_PAGE_CACHE ="cms_page_cache";
// }
// } @Inject("cmsCacheService")
// LocalCacheService cmsCacheService;
// private boolean isCache(String requestURI) {
// if (requestURI.startsWith("/api/") public static boolean isCache(String requestURI) {
// || requestURI.startsWith("/category/") if (requestURI.startsWith("/api/cms/")
// || requestURI.startsWith("/content/") || requestURI.startsWith("/cms/category/")
// ) { || requestURI.startsWith("/cms/content/")
// return false; || requestURI.startsWith("/cms/admin")
// } ) {
// //通过正则表达式判断是否缓存该页面 return false;
// String[] cacheUrl = new String[] { }
// "^/$",//首页 //通过正则表达式判断是否缓存该页面
// "^/[A-Za-z0-9_]+$",//栏目页 String[] cacheUrl = new String[] {
// "^/[A-Za-z0-9_]+/\\d+$" //详情页 "^/cms/*$",//首页
// }; "^/cms/[A-Za-z0-9_]+/*$",//栏目页
// for (String string : cacheUrl) { "^/cms/[A-Za-z0-9_]+/\\d+/*$" //详情页
// if (requestURI.matches(string)) { };
// return true; for (String string : cacheUrl) {
// } if (requestURI.matches(string)) {
// } return true;
// return false; }
// } }
// return false;
// }
//}
@Override
public void doIntercept(Context ctx, Handler mainHandler, RouterInterceptorChain chain) throws Throwable {
SessionState s = ctx.sessionState();
System.out.println(ctx.pathNew());
LogUtil.global().info("pathNew:"+ctx.pathNew());
LogUtil.global().info("paramMap:"+ctx.paramMap());
JSONObject session = JSONUtil.createObj();
if(ObjectUtil.isNotEmpty(s.sessionKeys())){
for (String sessionKey : s.sessionKeys()) {
session.set(sessionKey,s.sessionGet(sessionKey));
}
}
ctx.attrSet("session",session);
String pathNew = ctx.pathNew();
Config config = SystemUtils.getConfig();
if ( BooleanUtils.isTrue(config.getIsCacheEnabled())
&& isCache(pathNew)) {
String jsonStr = JSONUtil.toJsonStr(ctx.paramMap());
long hash64 = HashUtil.metroHash64(jsonStr.getBytes(StandardCharsets.UTF_8));
String o = cmsCacheService.get(PageCacheFilter.CMS_PAGE_CACHE+ctx.pathNew()+"_"+hash64,String.class);
if(o!=null){
ctx.outputAsHtml(o);
LogUtil.global().info("pageCache_outputAsHtml:"+ctx.pathNew());
return;
}
}
chain.doIntercept(ctx, mainHandler);
}
}

View File

@ -1,121 +1,125 @@
//package vip.fuck.sm.plugins.cms.filter; package vip.fuck.sm.plugins.cms.filter;
//
//import com.alibaba.fastjson.JSONObject; import cn.hutool.core.util.ObjectUtil;
//import com.cms.Feedback; import cn.hutool.json.JSONArray;
//import com.cms.entity.Admin; import cn.hutool.json.JSONObject;
//import com.cms.util.WebUtils; import cn.hutool.json.JSONUtil;
//import org.apache.commons.lang.BooleanUtils; import org.apache.commons.lang.BooleanUtils;
// import org.noear.solon.Solon;
//import javax.servlet.*; import org.noear.solon.annotation.Component;
//import javax.servlet.http.HttpServletRequest; import org.noear.solon.annotation.Inject;
//import javax.servlet.http.HttpServletResponse; import org.noear.solon.core.handle.Context;
//import java.io.IOException; import org.noear.solon.core.handle.Filter;
//import java.io.PrintWriter; import org.noear.solon.core.handle.FilterChain;
//import java.util.ArrayList; import org.noear.solon.core.handle.SessionState;
//import java.util.List; import org.noear.solon.data.cache.LocalCacheService;
// import org.smartboot.http.server.HttpRequest;
//public class PermissionFilter implements Filter{ import org.smartboot.http.server.HttpResponse;
// import vip.fuck.sm.plugins.cms.Feedback;
// /** 不包含 */ import vip.fuck.sm.plugins.cms.entity.Admin;
// private List<String> adminExcludes = new ArrayList<String>(){{ import vip.fuck.sm.plugins.cms.util.JFinal;
// add("/admin/login"); import vip.fuck.sm.plugins.cms.util.WebUtils;
// add("/admin/error");
// add("/admin/static");
// }}; import java.io.IOException;
// import java.io.PrintWriter;
// /** 不包含 */ import java.nio.charset.StandardCharsets;
// private List<String> permissionExcludes = new ArrayList<String>(){{ import java.util.ArrayList;
// add("/admin/logout"); import java.util.List;
// add("/admin/index");
// add("/admin/file"); @Component
// add("/admin/cache"); public class PermissionFilter implements Filter {
// add("/admin/profile");
// }};
//
// @Override /** 不包含 */
// public void init(FilterConfig filterConfig) throws ServletException { private static List<String> adminExcludes = new ArrayList<String>(){{
// // TODO Auto-generated method stub add("/cms/admin/login");
// add("/cms/admin/error");
// } add("/cms/admin/static");
// }};
// @Override
// public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) /** 不包含 */
// throws IOException, ServletException { private static List<String> permissionExcludes = new ArrayList<String>(){{
// // TODO Auto-generated method stub add("/cms/admin/logout");
// HttpServletRequest request = (HttpServletRequest)servletRequest; add("/cms/admin/index");
// HttpServletResponse response = (HttpServletResponse)servletResponse; add("/cms/admin/file");
// String url = request.getRequestURI().toString(); add("/cms/admin/cache");
// String contextPath = request.getContextPath(); add("/cms/admin/profile");
// url = url.substring(contextPath.length()); }};
// //匹配admin
// for(String key : adminExcludes){
// if(url.startsWith(key)){
// filterChain.doFilter(servletRequest, servletResponse); @Override
// return; public void doFilter(Context ctx, FilterChain filterChain) throws Throwable {
// }
// } // TODO Auto-generated method stub
// Admin currentAdmin = (Admin) request.getSession().getAttribute(Admin.SESSION_ADMIN); HttpRequest request = (HttpRequest) ctx.request();
// if(currentAdmin!=null){ HttpResponse response = (HttpResponse) ctx.response();
// //演示程序不允许修改新增删除开始 String url = ctx.pathNew();
// if("read".equals(currentAdmin.getUsername())){ //匹配admin
// String lowerUrl = url.toLowerCase(); for(String key : adminExcludes){
// if(lowerUrl.contains("save") if(url.startsWith(key)){
// || lowerUrl.contains("update") filterChain.doFilter(ctx);
// || lowerUrl.contains("delete") return;
// || lowerUrl.contains("backup") }
// || lowerUrl.contains("restore") }
// || lowerUrl.contains("setDefault".toLowerCase()) if(url.startsWith("/cms/admin")){
// || lowerUrl.contains("generate") JSONObject currentAdmin = ctx.session(Admin.SESSION_ADMIN, cn.hutool.json.JSONObject.class);
// ){ if(currentAdmin!=null){
// if(WebUtils.isAjaxRequest(request)){ //演示程序不允许修改新增删除开始
// //是ajax操作 if("read".equals(currentAdmin.getStr("username"))){
// response.setContentType("application/json;charset=UTF-8"); String lowerUrl = url.toLowerCase();
// PrintWriter writer = response.getWriter(); if(lowerUrl.contains("save")
// writer.write(JSONObject.toJSONString(Feedback.error("演示账号不允许操作!"))); || lowerUrl.contains("update")
// writer.flush(); || lowerUrl.contains("delete")
// writer.close(); || lowerUrl.contains("backup")
// return; || lowerUrl.contains("restore")
// }else{ || lowerUrl.contains("setDefault".toLowerCase())
// //是url操作 || lowerUrl.contains("generate")
// response.setContentType("text/html;charset=utf-8"); ){
// PrintWriter writer = response.getWriter(); if(WebUtils.isAjaxRequest(request)){
// writer.write("<script>alert('演示账号不允许操作!');history.back();</script>"); //是ajax操作
// writer.flush(); ctx.renderAndReturn(Feedback.error("演示账号不允许操作!"));
// writer.close(); return;
// return; }else{
// } //是url操作
// } response.setContentType("text/html;charset=utf-8");
// } response.write("<script>alert('演示账号不允许操作!');history.back();</script>"
// //演示程序不允许修改新增删除结束 .getBytes(StandardCharsets.UTF_8));
// //系统内置角色 return;
// if(currentAdmin.getRole()!=null && BooleanUtils.isTrue(currentAdmin.getRole().getIsSystem())){ }
// filterChain.doFilter(servletRequest, servletResponse); }
// return; }
// } //演示程序不允许修改新增删除结束
// for(String key : permissionExcludes){ //系统内置角色
// if(url.startsWith(key)){ if(currentAdmin.getObj("role")!=null && BooleanUtils.isTrue(currentAdmin.getJSONObject("role")
// filterChain.doFilter(servletRequest, servletResponse); .getBool("getIsSystem"))){
// return; filterChain.doFilter(ctx);
// } return;
// } }
// List<String> permissions = currentAdmin.getPermissions(); for(String key : permissionExcludes){
// for(String key : permissions){ if(url.startsWith(key)){
// if(url.startsWith(key)){ filterChain.doFilter(ctx);
// filterChain.doFilter(servletRequest, servletResponse); return;
// return; }
// } }
// } List<String> permissions = currentAdmin.getBeanList("permissions",String.class);
// response.sendRedirect(contextPath+"/admin/error/unauthorized"); for(String key : permissions){
// return; if(url.startsWith(key)){
// } filterChain.doFilter(ctx);
// response.sendRedirect(contextPath+"/admin/login"); return;
// return; }
// } }
// ctx.forward("/cms/admin/error/unauthorized");
// @Override return;
// public void destroy() { }
// // TODO Auto-generated method stub ctx.pathNew("/cms/admin/login");
// }
// } filterChain.doFilter(ctx);
// }
//}
}

View File

@ -52,7 +52,7 @@ public class SiteHandler
String[] urls = target.split("/"); String[] urls = target.split("/");
Integer siteNum = Db.queryInt("select count(*) from cms_site where domain=?",domain); Integer siteNum = Db.queryInt("select count(*) from cms_site where domain=?",domain);
if(siteNum == null || siteNum<1){ if(siteNum == null || siteNum<1){
if(urls.length<1){ if(urls.length<=2){
//默认站点 //默认站点
Site site = new Site().dao().findDefault(); Site site = new Site().dao().findDefault();
wrappedRequest(site,ctx,chain, target); wrappedRequest(site,ctx,chain, target);

View File

@ -92,7 +92,8 @@ public class UrlHandler implements Filter {
Tag tag = new Tag().dao().findByCat(tagCat); Tag tag = new Tag().dao().findByCat(tagCat);
if(tag!=null){ if(tag!=null){
ctx.paramMap().put("id",tag.getId()+""); ctx.paramMap().put("id",tag.getId()+"");
ctx.forward("/cms/tag"); ctx.pathNew("/cms/tag");
chain.doFilter(ctx);
} }
return; return;
} }
@ -122,7 +123,8 @@ public class UrlHandler implements Filter {
if(StringUtils.isNotBlank(newTarget)){ if(StringUtils.isNotBlank(newTarget)){
target = newTarget; target = newTarget;
} }
ctx.forward(target); ctx.pathNew(target);
chain.doFilter(ctx);
} }
} }

View File

@ -5,7 +5,7 @@ import org.noear.solon.Solon;
public class JFinal { public class JFinal {
public static String getContextPath() { public static String getContextPath() {
String contextPath = Solon.cfg().get("server.contextPath","/"); String contextPath = Solon.cfg().get("server.contextPath","");
String port = Solon.cfg().get("server.port",""); String port = Solon.cfg().get("server.port","");
String schema = Solon.cfg().get("server.schema"); String schema = Solon.cfg().get("server.schema");
String domain = Solon.cfg().get("server.domain","localhost"); String domain = Solon.cfg().get("server.domain","localhost");

View File

@ -38,8 +38,8 @@
<div class="content mb-3">#(currentContent.introduction)</div> <div class="content mb-3">#(currentContent.introduction)</div>
<div class="text-secondary lh-2"> <div class="text-secondary lh-2">
<p>上一篇:#if(currentContent.lastContent??)<a href="#(currentContent.lastContent.path)">#(abbreviate(currentContent.lastContent.title,15,''))</a>#else无#end</p> <p>上一篇:#if(currentContent.lastContent??)<a href="#(currentContent.lastContent.path)">#(abbreviate(currentContent.lastContent.title,15,''))</a>#else #end</p>
<p>下一篇:#if(currentContent.nextContent??)<a href="#(currentContent.nextContent.path)">#(abbreviate(currentContent.nextContent.title,15,''))</a>#else无#end</p> <p>下一篇:#if(currentContent.nextContent??)<a href="#(currentContent.nextContent.path)">#(abbreviate(currentContent.nextContent.title,15,''))</a>#else #end</p>
</div> </div>
</div> </div>

View File

@ -37,8 +37,8 @@
</div> </div>
<div class="content mb-3">#(currentContent.introduction)</div> <div class="content mb-3">#(currentContent.introduction)</div>
<div class="text-secondary lh-2"> <div class="text-secondary lh-2">
<p>上一篇:#if(currentContent.lastContent??)<a href="#(currentContent.lastContent.path)">#(abbreviate(currentContent.lastContent.title,15,''))</a>#else无#end</p> <p>上一篇:#if(currentContent.lastContent??)<a href="#(currentContent.lastContent.path)">#(abbreviate(currentContent.lastContent.title,15,''))</a>#else #end</p>
<p>下一篇:#if(currentContent.nextContent??)<a href="#(currentContent.nextContent.path)">#(abbreviate(currentContent.nextContent.title,15,''))</a>#else无#end</p> <p>下一篇:#if(currentContent.nextContent??)<a href="#(currentContent.nextContent.path)">#(abbreviate(currentContent.nextContent.title,15,''))</a>#else #end</p>
</div> </div>
</div> </div>

View File

@ -37,8 +37,8 @@
</div> </div>
<div class="content mb-3">#(currentContent.introduction)</div> <div class="content mb-3">#(currentContent.introduction)</div>
<div class="text-secondary lh-2"> <div class="text-secondary lh-2">
<p>上一篇:#if(currentContent.lastContent??)<a href="#(currentContent.lastContent.path)">#(abbreviate(currentContent.lastContent.title,15,''))</a>#else无#end</p> <p>上一篇:#if(currentContent.lastContent??)<a href="#(currentContent.lastContent.path)">#(abbreviate(currentContent.lastContent.title,15,''))</a>#else #end</p>
<p>下一篇:#if(currentContent.nextContent??)<a href="#(currentContent.nextContent.path)">#(abbreviate(currentContent.nextContent.title,15,''))</a>#else无#end</p> <p>下一篇:#if(currentContent.nextContent??)<a href="#(currentContent.nextContent.path)">#(abbreviate(currentContent.nextContent.title,15,''))</a>#else #end</p>
</div> </div>
</div> </div>

View File

@ -101,8 +101,8 @@
<div class="content">#(currentContent.introduction)</div> <div class="content">#(currentContent.introduction)</div>
<div class="text-secondary lh-2"> <div class="text-secondary lh-2">
<p>上一篇:#if(currentContent.lastContent??)<a href="#(currentContent.lastContent.path)">#(abbreviate(currentContent.lastContent.title,15,''))</a>#else无#end</p> <p>上一篇:#if(currentContent.lastContent??)<a href="#(currentContent.lastContent.path)">#(abbreviate(currentContent.lastContent.title,15,''))</a>#else #end</p>
<p>下一篇:#if(currentContent.nextContent??)<a href="#(currentContent.nextContent.path)">#(abbreviate(currentContent.nextContent.title,15,''))</a>#else无#end</p> <p>下一篇:#if(currentContent.nextContent??)<a href="#(currentContent.nextContent.path)">#(abbreviate(currentContent.nextContent.title,15,''))</a>#else #end</p>
</div> </div>
</div> </div>

View File

@ -62,8 +62,8 @@
</div> </div>
</div> </div>
<div class="relink"> <div class="relink">
<p>上一篇:#if(currentContent.lastContent??)<a href="#(currentContent.lastContent.path)">#(abbreviate(currentContent.lastContent.title,15,''))</a>#else无#end</p> <p>上一篇:#if(currentContent.lastContent??)<a href="#(currentContent.lastContent.path)">#(abbreviate(currentContent.lastContent.title,15,''))</a>#else #end</p>
<p>下一篇:#if(currentContent.nextContent??)<a href="#(currentContent.nextContent.path)">#(abbreviate(currentContent.nextContent.title,15,''))</a>#else无#end</p> <p>下一篇:#if(currentContent.nextContent??)<a href="#(currentContent.nextContent.path)">#(abbreviate(currentContent.nextContent.title,15,''))</a>#else #end</p>
</div> </div>
<div class="rmd-pro"> <div class="rmd-pro">
<div class="head"> <div class="head">

View File

@ -66,8 +66,8 @@
</div> </div>
</div> </div>
<div class="relink"> <div class="relink">
<p>上一篇:#if(currentContent.lastContent??)<a href="#(currentContent.lastContent.path)">#(abbreviate(currentContent.lastContent.title,15,''))</a>#else无#end</p> <p>上一篇:#if(currentContent.lastContent??)<a href="#(currentContent.lastContent.path)">#(abbreviate(currentContent.lastContent.title,15,''))</a>#else #end</p>
<p>下一篇:#if(currentContent.nextContent??)<a href="#(currentContent.nextContent.path)">#(abbreviate(currentContent.nextContent.title,15,''))</a>#else无#end</p> <p>下一篇:#if(currentContent.nextContent??)<a href="#(currentContent.nextContent.path)">#(abbreviate(currentContent.nextContent.title,15,''))</a>#else #end</p>
</div> </div>
<div class="rmd-pro"> <div class="rmd-pro">
<div class="head"> <div class="head">

View File

@ -62,8 +62,8 @@
</div> </div>
</div> </div>
<div class="relink"> <div class="relink">
<p>上一篇:#if(currentContent.lastContent??)<a href="#(currentContent.lastContent.path)">#(abbreviate(currentContent.lastContent.title,15,''))</a>#else无#end</p> <p>上一篇:#if(currentContent.lastContent??)<a href="#(currentContent.lastContent.path)">#(abbreviate(currentContent.lastContent.title,15,''))</a>#else #end</p>
<p>下一篇:#if(currentContent.nextContent??)<a href="#(currentContent.nextContent.path)">#(abbreviate(currentContent.nextContent.title,15,''))</a>#else无#end</p> <p>下一篇:#if(currentContent.nextContent??)<a href="#(currentContent.nextContent.path)">#(abbreviate(currentContent.nextContent.title,15,''))</a>#else #end</p>
</div> </div>
<div class="rmd-pro"> <div class="rmd-pro">
<div class="head"> <div class="head">

View File

@ -63,8 +63,8 @@
</div> </div>
</div> </div>
<div class="relink"> <div class="relink">
<p><b>向前:</b>#if(currentContent.lastContent??)<a href="#(currentContent.lastContent.path)">#(abbreviate(currentContent.lastContent.title,15,''))</a>#else无#end</p> <p><b>向前:</b>#if(currentContent.lastContent??)<a href="#(currentContent.lastContent.path)">#(abbreviate(currentContent.lastContent.title,15,''))</a>#else #end</p>
<p><b>向后:</b>#if(currentContent.nextContent??)<a href="#(currentContent.nextContent.path)">#(abbreviate(currentContent.nextContent.title,15,''))</a>#else无#end</p> <p><b>向后:</b>#if(currentContent.nextContent??)<a href="#(currentContent.nextContent.path)">#(abbreviate(currentContent.nextContent.title,15,''))</a>#else #end</p>
</div> </div>
</div> </div>
<!--right--> <!--right-->

View File

@ -63,8 +63,8 @@
</div> </div>
</div> </div>
<div class="relink"> <div class="relink">
<p><b>向前:</b>#if(currentContent.lastContent??)<a href="#(currentContent.lastContent.path)">#(abbreviate(currentContent.lastContent.title,15,''))</a>#else无#end</p> <p><b>向前:</b>#if(currentContent.lastContent??)<a href="#(currentContent.lastContent.path)">#(abbreviate(currentContent.lastContent.title,15,''))</a>#else #end</p>
<p><b>向后:</b>#if(currentContent.nextContent??)<a href="#(currentContent.nextContent.path)">#(abbreviate(currentContent.nextContent.title,15,''))</a>#else无#end</p> <p><b>向后:</b>#if(currentContent.nextContent??)<a href="#(currentContent.nextContent.path)">#(abbreviate(currentContent.nextContent.title,15,''))</a>#else #end</p>
</div> </div>
</div> </div>
<!--right--> <!--right-->

View File

@ -63,8 +63,8 @@
</div> </div>
</div> </div>
<div class="relink"> <div class="relink">
<p><b>向前:</b>#if(currentContent.lastContent??)<a href="#(currentContent.lastContent.path)">#(abbreviate(currentContent.lastContent.title,15,''))</a>#else无#end</p> <p><b>向前:</b>#if(currentContent.lastContent??)<a href="#(currentContent.lastContent.path)">#(abbreviate(currentContent.lastContent.title,15,''))</a>#else #end</p>
<p><b>向后:</b>#if(currentContent.nextContent??)<a href="#(currentContent.nextContent.path)">#(abbreviate(currentContent.nextContent.title,15,''))</a>#else无#end</p> <p><b>向后:</b>#if(currentContent.nextContent??)<a href="#(currentContent.nextContent.path)">#(abbreviate(currentContent.nextContent.title,15,''))</a>#else #end</p>
</div> </div>
</div> </div>
<!--right--> <!--right-->

View File

@ -36,8 +36,8 @@
<div id="article" class="ArticleTencont">#(currentContent.introduction)</div> <div id="article" class="ArticleTencont">#(currentContent.introduction)</div>
<div class="clear"></div> <div class="clear"></div>
<div class="reLink"> <div class="reLink">
<div class="prevLink">上一篇:#if(currentContent.lastContent??)<a href="#(currentContent.lastContent.path)">#(abbreviate(currentContent.lastContent.title,15,''))</a>#else无#end</div> <div class="prevLink">上一篇:#if(currentContent.lastContent??)<a href="#(currentContent.lastContent.path)">#(abbreviate(currentContent.lastContent.title,15,''))</a>#else #end</div>
<div class="nextLink">下一篇:#if(currentContent.nextContent??)<a href="#(currentContent.nextContent.path)">#(abbreviate(currentContent.nextContent.title,15,''))</a>#else无#end</div> <div class="nextLink">下一篇:#if(currentContent.nextContent??)<a href="#(currentContent.nextContent.path)">#(abbreviate(currentContent.nextContent.title,15,''))</a>#else #end</div>
</div> </div>
</div> </div>
</div> </div>

View File

@ -62,8 +62,8 @@
</div> </div>
</div> </div>
<div class="relink"> <div class="relink">
<p><b>向前:</b>#if(currentContent.lastContent??)<a href="#(currentContent.lastContent.path)">#(abbreviate(currentContent.lastContent.title,15,''))</a>#else无#end</p> <p><b>向前:</b>#if(currentContent.lastContent??)<a href="#(currentContent.lastContent.path)">#(abbreviate(currentContent.lastContent.title,15,''))</a>#else #end</p>
<p><b>向后:</b>#if(currentContent.nextContent??)<a href="#(currentContent.nextContent.path)">#(abbreviate(currentContent.nextContent.title,15,''))</a>#else无#end</p> <p><b>向后:</b>#if(currentContent.nextContent??)<a href="#(currentContent.nextContent.path)">#(abbreviate(currentContent.nextContent.title,15,''))</a>#else #end</p>
</div> </div>
</div> </div>
<!--right--> <!--right-->

View File

@ -45,8 +45,8 @@
<div class="article">#(currentContent.introduction)</div> <div class="article">#(currentContent.introduction)</div>
</div> </div>
<div class="relink"> <div class="relink">
<p><b>上一篇:</b>#if(currentContent.lastContent??)<a href="#(currentContent.lastContent.path)">#(abbreviate(currentContent.lastContent.title,15,''))</a>#else无#end</p> <p><b>上一篇:</b>#if(currentContent.lastContent??)<a href="#(currentContent.lastContent.path)">#(abbreviate(currentContent.lastContent.title,15,''))</a>#else #end</p>
<p><b>下一篇:</b>#if(currentContent.nextContent??)<a href="#(currentContent.nextContent.path)">#(abbreviate(currentContent.nextContent.title,15,''))</a>#else无#end</p> <p><b>下一篇:</b>#if(currentContent.nextContent??)<a href="#(currentContent.nextContent.path)">#(abbreviate(currentContent.nextContent.title,15,''))</a>#else #end</p>
</div> </div>
<div class="recommend-pro"> <div class="recommend-pro">
<div class="head"> <div class="head">

View File

@ -59,8 +59,8 @@
</div> </div>
</div> </div>
<div class="relink"> <div class="relink">
<p><b>上一篇:</b>#if(currentContent.lastContent??)<a href="#(currentContent.lastContent.path)">#(abbreviate(currentContent.lastContent.title,15,''))</a>#else无#end</p> <p><b>上一篇:</b>#if(currentContent.lastContent??)<a href="#(currentContent.lastContent.path)">#(abbreviate(currentContent.lastContent.title,15,''))</a>#else #end</p>
<p><b>下一篇:</b>#if(currentContent.nextContent??)<a href="#(currentContent.nextContent.path)">#(abbreviate(currentContent.nextContent.title,15,''))</a>#else无#end</p> <p><b>下一篇:</b>#if(currentContent.nextContent??)<a href="#(currentContent.nextContent.path)">#(abbreviate(currentContent.nextContent.title,15,''))</a>#else #end</p>
</div> </div>
<div class="recommend-pro"> <div class="recommend-pro">
<div class="head"> <div class="head">

View File

@ -75,8 +75,8 @@
</div> </div>
</div> </div>
<div class="relink"> <div class="relink">
<p><b>上一篇:</b>#if(currentContent.lastContent??)<a href="#(currentContent.lastContent.path)">#(abbreviate(currentContent.lastContent.title,15,''))</a>#else无#end</p> <p><b>上一篇:</b>#if(currentContent.lastContent??)<a href="#(currentContent.lastContent.path)">#(abbreviate(currentContent.lastContent.title,15,''))</a>#else #end</p>
<p><b>下一篇:</b>#if(currentContent.nextContent??)<a href="#(currentContent.nextContent.path)">#(abbreviate(currentContent.nextContent.title,15,''))</a>#else无#end</p> <p><b>下一篇:</b>#if(currentContent.nextContent??)<a href="#(currentContent.nextContent.path)">#(abbreviate(currentContent.nextContent.title,15,''))</a>#else #end</p>
</div> </div>
<div class="recommend-pro"> <div class="recommend-pro">
<div class="head"> <div class="head">

View File

@ -62,8 +62,8 @@
</div> </div>
</div> </div>
<div class="relink"> <div class="relink">
<p><b>向前:</b>#if(currentContent.lastContent??)<a href="#(currentContent.lastContent.path)">#(abbreviate(currentContent.lastContent.title,15,''))</a>#else无#end</p> <p><b>向前:</b>#if(currentContent.lastContent??)<a href="#(currentContent.lastContent.path)">#(abbreviate(currentContent.lastContent.title,15,''))</a>#else #end</p>
<p><b>向后:</b>#if(currentContent.nextContent??)<a href="#(currentContent.nextContent.path)">#(abbreviate(currentContent.nextContent.title,15,''))</a>#else无#end</p> <p><b>向后:</b>#if(currentContent.nextContent??)<a href="#(currentContent.nextContent.path)">#(abbreviate(currentContent.nextContent.title,15,''))</a>#else #end</p>
</div> </div>
</div> </div>
<!--right--> <!--right-->

View File

@ -36,8 +36,8 @@
<div id="article" class="ArticleTencont">#(currentContent.introduction)</div> <div id="article" class="ArticleTencont">#(currentContent.introduction)</div>
<div class="clear"></div> <div class="clear"></div>
<div class="reLink"> <div class="reLink">
<div class="prevLink">上一篇:#if(currentContent.lastContent??)<a href="#(currentContent.lastContent.path)">#(abbreviate(currentContent.lastContent.title,15,''))</a>#else无#end</div> <div class="prevLink">上一篇:#if(currentContent.lastContent??)<a href="#(currentContent.lastContent.path)">#(abbreviate(currentContent.lastContent.title,15,''))</a>#else #end</div>
<div class="nextLink">下一篇:#if(currentContent.nextContent??)<a href="#(currentContent.nextContent.path)">#(abbreviate(currentContent.nextContent.title,15,''))</a>#else无#end</div> <div class="nextLink">下一篇:#if(currentContent.nextContent??)<a href="#(currentContent.nextContent.path)">#(abbreviate(currentContent.nextContent.title,15,''))</a>#else #end</div>
</div> </div>
</div> </div>
</div> </div>

View File

@ -62,8 +62,8 @@
</div> </div>
</div> </div>
<div class="relink"> <div class="relink">
<p><b>向前:</b>#if(currentContent.lastContent??)<a href="#(currentContent.lastContent.path)">#(abbreviate(currentContent.lastContent.title,15,''))</a>#else无#end</p> <p><b>向前:</b>#if(currentContent.lastContent??)<a href="#(currentContent.lastContent.path)">#(abbreviate(currentContent.lastContent.title,15,''))</a>#else #end</p>
<p><b>向后:</b>#if(currentContent.nextContent??)<a href="#(currentContent.nextContent.path)">#(abbreviate(currentContent.nextContent.title,15,''))</a>#else无#end</p> <p><b>向后:</b>#if(currentContent.nextContent??)<a href="#(currentContent.nextContent.path)">#(abbreviate(currentContent.nextContent.title,15,''))</a>#else #end</p>
</div> </div>
</div> </div>
<!--right--> <!--right-->

View File

@ -65,8 +65,8 @@
</div> </div>
</div> </div>
<div class="relink"> <div class="relink">
<p><b>向前:</b>#if(currentContent.lastContent??)<a href="#(currentContent.lastContent.path)">#(abbreviate(currentContent.lastContent.title,15,''))</a>#else无#end</p> <p><b>向前:</b>#if(currentContent.lastContent??)<a href="#(currentContent.lastContent.path)">#(abbreviate(currentContent.lastContent.title,15,''))</a>#else #end</p>
<p><b>向后:</b>#if(currentContent.nextContent??)<a href="#(currentContent.nextContent.path)">#(abbreviate(currentContent.nextContent.title,15,''))</a>#else无#end</p> <p><b>向后:</b>#if(currentContent.nextContent??)<a href="#(currentContent.nextContent.path)">#(abbreviate(currentContent.nextContent.title,15,''))</a>#else #end</p>
</div> </div>
</div> </div>
<!--right--> <!--right-->

View File

@ -39,8 +39,8 @@
<div id="article" class="ArticleTencont">#(currentContent.introduction)</div> <div id="article" class="ArticleTencont">#(currentContent.introduction)</div>
<div class="clear"></div> <div class="clear"></div>
<div class="reLink"> <div class="reLink">
<div class="prevLink">上一篇:#if(currentContent.lastContent??)<a href="#(currentContent.lastContent.path)">#(abbreviate(currentContent.lastContent.title,15,''))</a>#else无#end</div> <div class="prevLink">上一篇:#if(currentContent.lastContent??)<a href="#(currentContent.lastContent.path)">#(abbreviate(currentContent.lastContent.title,15,''))</a>#else #end</div>
<div class="nextLink">下一篇:#if(currentContent.nextContent??)<a href="#(currentContent.nextContent.path)">#(abbreviate(currentContent.nextContent.title,15,''))</a>#else无#end</div> <div class="nextLink">下一篇:#if(currentContent.nextContent??)<a href="#(currentContent.nextContent.path)">#(abbreviate(currentContent.nextContent.title,15,''))</a>#else #end</div>
</div> </div>
</div> </div>
</div> </div>

View File

@ -65,8 +65,8 @@
</div> </div>
</div> </div>
<div class="relink"> <div class="relink">
<p><b>向前:</b>#if(currentContent.lastContent??)<a href="#(currentContent.lastContent.path)">#(abbreviate(currentContent.lastContent.title,15,''))</a>#else无#end</p> <p><b>向前:</b>#if(currentContent.lastContent??)<a href="#(currentContent.lastContent.path)">#(abbreviate(currentContent.lastContent.title,15,''))</a>#else #end</p>
<p><b>向后:</b>#if(currentContent.nextContent??)<a href="#(currentContent.nextContent.path)">#(abbreviate(currentContent.nextContent.title,15,''))</a>#else无#end</p> <p><b>向后:</b>#if(currentContent.nextContent??)<a href="#(currentContent.nextContent.path)">#(abbreviate(currentContent.nextContent.title,15,''))</a>#else #end</p>
</div> </div>
</div> </div>
<!--right--> <!--right-->

View File

@ -76,8 +76,8 @@ document.getElementById("bdshell_js").src = "http://bdimg.share.baidu.com/static
<div class="clear"></div> <div class="clear"></div>
</div> </div>
<div class="relatedLink"> <div class="relatedLink">
<div class="prevLink">上一篇:#if(currentContent.lastContent??)<a href="#(currentContent.lastContent.path)">#(abbreviate(currentContent.lastContent.title,15,''))</a>#else无#end</div> <div class="prevLink">上一篇:#if(currentContent.lastContent??)<a href="#(currentContent.lastContent.path)">#(abbreviate(currentContent.lastContent.title,15,''))</a>#else #end</div>
<div class="nextLink">下一篇:#if(currentContent.nextContent??)<a href="#(currentContent.nextContent.path)">#(abbreviate(currentContent.nextContent.title,15,''))</a>#else无#end</div> <div class="nextLink">下一篇:#if(currentContent.nextContent??)<a href="#(currentContent.nextContent.path)">#(abbreviate(currentContent.nextContent.title,15,''))</a>#else #end</div>
</div> </div>
<div class="reInformation clearfix"> <div class="reInformation clearfix">
<div class="tit">相关推荐</div> <div class="tit">相关推荐</div>

View File

@ -76,8 +76,8 @@ document.getElementById("bdshell_js").src = "http://bdimg.share.baidu.com/static
<div class="clear"></div> <div class="clear"></div>
</div> </div>
<div class="relatedLink"> <div class="relatedLink">
<div class="prevLink">上一篇:#if(currentContent.lastContent??)<a href="#(currentContent.lastContent.path)">#(abbreviate(currentContent.lastContent.title,15,''))</a>#else无#end</div> <div class="prevLink">上一篇:#if(currentContent.lastContent??)<a href="#(currentContent.lastContent.path)">#(abbreviate(currentContent.lastContent.title,15,''))</a>#else #end</div>
<div class="nextLink">下一篇:#if(currentContent.nextContent??)<a href="#(currentContent.nextContent.path)">#(abbreviate(currentContent.nextContent.title,15,''))</a>#else无#end</div> <div class="nextLink">下一篇:#if(currentContent.nextContent??)<a href="#(currentContent.nextContent.path)">#(abbreviate(currentContent.nextContent.title,15,''))</a>#else #end</div>
</div> </div>
<div class="reInformation clearfix"> <div class="reInformation clearfix">
<div class="tit">相关推荐</div> <div class="tit">相关推荐</div>

View File

@ -75,8 +75,8 @@ document.getElementById("bdshell_js").src = "http://bdimg.share.baidu.com/static
<div class="clear"></div> <div class="clear"></div>
</div> </div>
<div class="relatedLink"> <div class="relatedLink">
<div class="prevLink">上一篇:#if(currentContent.lastContent??)<a href="#(currentContent.lastContent.path)">#(abbreviate(currentContent.lastContent.title,15,''))</a>#else无#end</div> <div class="prevLink">上一篇:#if(currentContent.lastContent??)<a href="#(currentContent.lastContent.path)">#(abbreviate(currentContent.lastContent.title,15,''))</a>#else #end</div>
<div class="nextLink">下一篇:#if(currentContent.nextContent??)<a href="#(currentContent.nextContent.path)">#(abbreviate(currentContent.nextContent.title,15,''))</a>#else无#end</div> <div class="nextLink">下一篇:#if(currentContent.nextContent??)<a href="#(currentContent.nextContent.path)">#(abbreviate(currentContent.nextContent.title,15,''))</a>#else #end</div>
</div> </div>
<div class="reInformation clearfix"> <div class="reInformation clearfix">
<div class="tit">相关推荐</div> <div class="tit">相关推荐</div>

View File

@ -84,8 +84,8 @@ document.getElementById("bdshell_js").src = "http://bdimg.share.baidu.com/static
<div class="clear"></div> <div class="clear"></div>
</div> </div>
<div class="relatedLink"> <div class="relatedLink">
<div class="prevLink">上一篇:#if(currentContent.lastContent??)<a href="#(currentContent.lastContent.path)">#(abbreviate(currentContent.lastContent.title,15,''))</a>#else无#end</div> <div class="prevLink">上一篇:#if(currentContent.lastContent??)<a href="#(currentContent.lastContent.path)">#(abbreviate(currentContent.lastContent.title,15,''))</a>#else #end</div>
<div class="nextLink">下一篇:#if(currentContent.nextContent??)<a href="#(currentContent.nextContent.path)">#(abbreviate(currentContent.nextContent.title,15,''))</a>#else无#end</div> <div class="nextLink">下一篇:#if(currentContent.nextContent??)<a href="#(currentContent.nextContent.path)">#(abbreviate(currentContent.nextContent.title,15,''))</a>#else #end</div>
</div> </div>
<div class="reInformation clearfix"> <div class="reInformation clearfix">
<div class="tit">相关推荐</div> <div class="tit">相关推荐</div>

View File

@ -44,8 +44,8 @@
#(currentContent.introduction) #(currentContent.introduction)
</div> </div>
<div class="reLink clearfix"> <div class="reLink clearfix">
<div class="prevLink fl">上一篇:#if(currentContent.lastContent??)<a href="#(currentContent.lastContent.path)">#(abbreviate(currentContent.lastContent.title,15,''))</a>#else无#end</div> <div class="prevLink fl">上一篇:#if(currentContent.lastContent??)<a href="#(currentContent.lastContent.path)">#(abbreviate(currentContent.lastContent.title,15,''))</a>#else #end</div>
<div class="nextLink fl">下一篇:#if(currentContent.nextContent??)<a href="#(currentContent.nextContent.path)">#(abbreviate(currentContent.nextContent.title,15,''))</a>#else无#end </div> <div class="nextLink fl">下一篇:#if(currentContent.nextContent??)<a href="#(currentContent.nextContent.path)">#(abbreviate(currentContent.nextContent.title,15,''))</a>#else #end </div>
</div> </div>
</div> </div>
<!--文章内容结束--> <!--文章内容结束-->

View File

@ -44,8 +44,8 @@
#(currentContent.introduction) #(currentContent.introduction)
</div> </div>
<div class="reLink clearfix"> <div class="reLink clearfix">
<div class="prevLink fl">上一篇:#if(currentContent.lastContent??)<a href="#(currentContent.lastContent.path)">#(abbreviate(currentContent.lastContent.title,15,''))</a>#else无#end</div> <div class="prevLink fl">上一篇:#if(currentContent.lastContent??)<a href="#(currentContent.lastContent.path)">#(abbreviate(currentContent.lastContent.title,15,''))</a>#else #end</div>
<div class="nextLink fl">下一篇:#if(currentContent.nextContent??)<a href="#(currentContent.nextContent.path)">#(abbreviate(currentContent.nextContent.title,15,''))</a>#else无#end </div> <div class="nextLink fl">下一篇:#if(currentContent.nextContent??)<a href="#(currentContent.nextContent.path)">#(abbreviate(currentContent.nextContent.title,15,''))</a>#else #end </div>
</div> </div>
</div> </div>
<!--文章内容结束--> <!--文章内容结束-->

View File

@ -58,8 +58,8 @@
</div> </div>
<div class="clearfix"></div> <div class="clearfix"></div>
<div class="reLink clearfix"> <div class="reLink clearfix">
<div class="prevLink fl">上一篇:#if(currentContent.lastContent??)<a href="#(currentContent.lastContent.path)">#(abbreviate(currentContent.lastContent.title,15,''))</a>#else无#end</div> <div class="prevLink fl">上一篇:#if(currentContent.lastContent??)<a href="#(currentContent.lastContent.path)">#(abbreviate(currentContent.lastContent.title,15,''))</a>#else #end</div>
<div class="nextLink fl">下一篇:#if(currentContent.nextContent??)<a href="#(currentContent.nextContent.path)">#(abbreviate(currentContent.nextContent.title,15,''))</a>#else无#end </div> <div class="nextLink fl">下一篇:#if(currentContent.nextContent??)<a href="#(currentContent.nextContent.path)">#(abbreviate(currentContent.nextContent.title,15,''))</a>#else #end </div>
</div> </div>
</section> </section>
<!--图片内容结束--> <!--图片内容结束-->

View File

@ -89,8 +89,8 @@
<!--统计代码结束--> <!--统计代码结束-->
<div class="clear"></div> <div class="clear"></div>
<div class="reLink clearfix"> <div class="reLink clearfix">
<div class="prevLink">上一篇:#if(currentContent.lastContent??)<a href="#(currentContent.lastContent.path)">#(abbreviate(currentContent.lastContent.title,15,''))</a>#else无#end </div> <div class="prevLink">上一篇:#if(currentContent.lastContent??)<a href="#(currentContent.lastContent.path)">#(abbreviate(currentContent.lastContent.title,15,''))</a>#else #end </div>
<div class="nextLink">下一篇:#if(currentContent.nextContent??)<a href="#(currentContent.nextContent.path)">#(abbreviate(currentContent.nextContent.title,15,''))</a>#else无#end </div> <div class="nextLink">下一篇:#if(currentContent.nextContent??)<a href="#(currentContent.nextContent.path)">#(abbreviate(currentContent.nextContent.title,15,''))</a>#else #end </div>
</div> </div>
<!--推荐资讯开始--> <!--推荐资讯开始-->
<h4 class="anlitopH4"><span>推荐资讯</span></h4> <h4 class="anlitopH4"><span>推荐资讯</span></h4>

View File

@ -89,8 +89,8 @@
<!--统计代码结束--> <!--统计代码结束-->
<div class="clear"></div> <div class="clear"></div>
<div class="reLink clearfix"> <div class="reLink clearfix">
<div class="prevLink">上一篇:#if(currentContent.lastContent??)<a href="#(currentContent.lastContent.path)">#(abbreviate(currentContent.lastContent.title,15,''))</a>#else无#end </div> <div class="prevLink">上一篇:#if(currentContent.lastContent??)<a href="#(currentContent.lastContent.path)">#(abbreviate(currentContent.lastContent.title,15,''))</a>#else #end </div>
<div class="nextLink">下一篇:#if(currentContent.nextContent??)<a href="#(currentContent.nextContent.path)">#(abbreviate(currentContent.nextContent.title,15,''))</a>#else无#end </div> <div class="nextLink">下一篇:#if(currentContent.nextContent??)<a href="#(currentContent.nextContent.path)">#(abbreviate(currentContent.nextContent.title,15,''))</a>#else #end </div>
</div> </div>
<!--推荐资讯开始--> <!--推荐资讯开始-->
<h4 class="anlitopH4"><span>推荐资讯</span></h4> <h4 class="anlitopH4"><span>推荐资讯</span></h4>

View File

@ -229,8 +229,8 @@
<!--统计代码结束--> <!--统计代码结束-->
<div class="clear"></div> <div class="clear"></div>
<div class="reLink clearfix"> <div class="reLink clearfix">
<div class="prevLink">上一篇:#if(currentContent.lastContent??)<a href="#(currentContent.lastContent.path)">#(abbreviate(currentContent.lastContent.title,15,''))</a>#else无#end </div> <div class="prevLink">上一篇:#if(currentContent.lastContent??)<a href="#(currentContent.lastContent.path)">#(abbreviate(currentContent.lastContent.title,15,''))</a>#else #end </div>
<div class="nextLink">下一篇:#if(currentContent.nextContent??)<a href="#(currentContent.nextContent.path)">#(abbreviate(currentContent.nextContent.title,15,''))</a>#else无#end </div> <div class="nextLink">下一篇:#if(currentContent.nextContent??)<a href="#(currentContent.nextContent.path)">#(abbreviate(currentContent.nextContent.title,15,''))</a>#else #end </div>
</div> </div>
<!--推荐资讯开始--> <!--推荐资讯开始-->
<h4 class="anlitopH4"><span>推荐资讯</span></h4> <h4 class="anlitopH4"><span>推荐资讯</span></h4>