mirror of
https://gitee.com/EMF/solon-manager.git
synced 2025-12-06 08:48:33 +08:00
mod: 前台缓存、后台权限、更换cms渲染器
This commit is contained in:
parent
e58b3e870c
commit
ed1b5aad3e
File diff suppressed because one or more lines are too long
@ -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";
|
||||||
|
|||||||
@ -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();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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) {
|
||||||
|
|||||||
@ -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"));
|
||||||
|
|||||||
@ -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);
|
||||||
|
|||||||
@ -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();
|
||||||
|
|||||||
@ -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);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|||||||
@ -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);
|
||||||
//
|
}
|
||||||
//}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|||||||
@ -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);
|
||||||
|
|||||||
@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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");
|
||||||
|
|||||||
@ -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>
|
||||||
|
|
||||||
|
|||||||
@ -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>
|
||||||
|
|||||||
@ -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>
|
||||||
|
|||||||
@ -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>
|
||||||
|
|
||||||
|
|||||||
@ -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">
|
||||||
|
|||||||
@ -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">
|
||||||
|
|||||||
@ -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">
|
||||||
|
|||||||
@ -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-->
|
||||||
|
|||||||
@ -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-->
|
||||||
|
|||||||
@ -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-->
|
||||||
|
|||||||
@ -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>
|
||||||
|
|||||||
@ -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-->
|
||||||
|
|||||||
@ -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">
|
||||||
|
|||||||
@ -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">
|
||||||
|
|||||||
@ -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">
|
||||||
|
|||||||
@ -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-->
|
||||||
|
|||||||
@ -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>
|
||||||
|
|||||||
@ -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-->
|
||||||
|
|||||||
@ -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-->
|
||||||
|
|||||||
@ -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>
|
||||||
|
|||||||
@ -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-->
|
||||||
|
|||||||
@ -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>
|
||||||
|
|||||||
@ -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>
|
||||||
|
|||||||
@ -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>
|
||||||
|
|||||||
@ -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>
|
||||||
|
|||||||
@ -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>
|
||||||
<!--文章内容结束-->
|
<!--文章内容结束-->
|
||||||
|
|||||||
@ -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>
|
||||||
<!--文章内容结束-->
|
<!--文章内容结束-->
|
||||||
|
|||||||
@ -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>
|
||||||
<!--图片内容结束-->
|
<!--图片内容结束-->
|
||||||
|
|||||||
@ -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>
|
||||||
|
|||||||
@ -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>
|
||||||
|
|||||||
@ -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>
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user