/{lang},/{lang}/,/{lang}/index 首页
/{lang}/{node_code} 栏目页
/{lang}/{node_code}/list,/{lang}/{node_code}/list/{page}列表页路由
/{lang}/{node_code}/detail/{content_id}详细页路由
/{lang}/Error错误页面页路由

多语言以语种开头:sc/tc/en ,如无语言标识则未默认语言:sc
路由结构为:/,index,{lang},{lang}/,{lang}/index

多语言以语种开头:sc/tc/en ,如无语言标识则未默认语言:sc
路由结构为:/{lang}/{node_code},/{lang}/{node_code}/

多语言以语种开头:sc/tc/en ,如无语言标识则未默认语言:sc
路由结构为:/{lang}/{node_code}/list 当前页码为1
路由结构为:/{lang}/{node_code}/list/{page} 当前页码为{page}
var page = Convert.ToInt32(string.Concat(ViewData["page"], ""));可获取当前的页数

多语言以语种开头:sc/tc/en ,如无语言标识则未默认语言:sc
路由结构为:/{lang}/{node_code}/detail/{content_id}当前内容记录ID为{content_id}
var data_id = Convert.ToInt64(string.Concat(ViewData["data_id"], ""));可获取当前内容主键ID
site_content row_data = ViewData["row_data"] as row_data;可获取当前内容记录实体

多语言以语种开头:sc/tc/en ,如无语言标识则未默认语言:sc
路由结构为:/{lang}/error
cshtml模板路经为:error/index.cshtml

多语言以语种开头:sc/tc/en ,如无语言标识则未默认语言:sc
路由结构为:/{lang}/search?q={key}当前要搜索的关键字为{key},默认页码为1
路由结构为:/{lang}/search/list?q={key}当前要搜索的关键字为{key},默认页码为1
路由结构为:/{lang}/search/list/{page}?q={key}当前要搜索的关键字为{key},默认页码为{page}
cshtml模板路经为:search/index.cshtml

实体类释义

常用实体类字段说明

字段 类型 描述
id bigint 主键ID,即栏目ID
lang varchar 语种标识:tc,en,sc
lang_flag int 1此记录只用于当前 2表示此记录既用于繁体有用于简体(视具体需求而定)
out_link varchar 栏目链接地址(一般用于外链)
node_code varchar 栏目代号
parent_node bigint 上级栏目ID
node_name varchar 栏目名称
node_tpl varchar 栏目页模板
list_tpl varchar 列表页模板
content_tpl varchar 内容页模板
node_pic varchar 栏目图片
node_atlas text 栏目图集多个用;分割
node_desc text 栏目说明
node_remark text 栏目备注
need_review StatusEnum 是否下的内容是否需要审核:StatusEnum.Legal标识需要审核,StatusEnum.UnLegal不需要审核
meta_keywords text meta关键字
mate_description text meta说明
show_menu StatusEnum 是否展示菜单:StatusEnum.Legal显示,StatusEnum.UnLegal不显示
show_path StatusEnum 是否展示导航:StatusEnum.Legal显示,StatusEnum.UnLegal不显示
nsort int 排序号,增加栏目时自动递增,页面加载数据视具体情况而定
extend_fields List<SysExtModelDetailesEntity> 栏目使用扩展模型数据集合,可通过item.extend_fields.GetExtModelField("key","defaultvalue")获取数据
pwd varchar 栏目访问密码
down_list text 栏目文件
review_status ReViewStatusEnum 审核状态:ReViewStatusEnum.UnReview待审核,ReViewStatusEnum.Pass审核通过,ReViewStatusEnum.UnPass审核不通过
is_show StatusEnum 是否显示:StatusEnum.Legal 显示,StatusEnum.UnLegal不显示
lucene_index StatusEnum 是否用于索引:StatusEnum.Legal 索引,StatusEnum.UnLegal不索引,*web有可访问的页面时才进行索引
del_flag DeleteEnum 删除状态:DeleteEnum.UnDelete未删除,DeleteEnum.Delete已删除
create_time datetime 创建时间
字段 类型 描述
id bigint 主键ID,即内容ID
lang varchar 语种标识:tc,en,sc
lang_flag int 1此记录只用于当前 2表示此记录既用于繁体有用于简体(视具体需求而定)
node_id bigint 所属栏目ID
node_code varchar 所属栏目代号
title varchar 内容标题
link varchar 链接
summary text 简介
chr_content longtext 内容Html格式,页面绑定請:@Html.Raw(item.chr_content)
extend_fields List<SysExtModelDetailesEntity> 栏目使用扩展模型数据集合,可通过item.extend_fields.GetExtModelField("key","defaultvalue")获取数据
cover varchar 内容封面图片
atlas text 内容图集:多个用;分割
n_sort int 排序号,增加默认递增,使用时视情况查询排序
is_home StatusEnum 是否首页显示:StatusEnum.Legal首页显示,StatusEnum.UnLegal不首页显示
is_top StatusEnum 是否置顶显示:StatusEnum.Legal置顶,StatusEnum.UnLegal不置顶
is_node StatusEnum 是否栏目显示:StatusEnum.Legal栏目显示,StatusEnum.UnLegal不栏目显示
view_count int 查看数,点击数在查看detail页面时会自动累加
status StatusEnum 状态是否正常:StatusEnum.Legal正常,StatusEnum.UnLegal不正常
review_status ReViewStatusEnum 审核状态:ReViewStatusEnum.UnReview待审核,ReViewStatusEnum.Pass审核通过,ReViewStatusEnum.UnPass审核不通过
create_time datetime 创建时间
creator bigint 创建记录的用户ID(后台)
creator_name varchar 创建记录的用户名称(后台)
tag varchar 标签
author varchar 作者
source varchar 来源
del_flag DeleteEnum 删除状态:DeleteEnum.UnDelete未删除,DeleteEnum.Delete已删除
down_file varchar 文件下载路径
is_show StatusEnum 是否显示:StatusEnum.Legal显示,StatusEnum.UnLegal不显示
publish_date varchar 发布时间

字段 类型 描述
id bigint 主键ID,即文档ID
lang varchar 语种标识:tc,en,sc
lang_flag int 1此记录只用于当前 2表示此记录既用于繁体有用于简体(视具体需求而定)
module varchar 所属分类代号
node_id bigint 所属栏目ID
node_code varchar 所属栏目代号
name varchar 文档标题
chr_desc text 文档说明
chr_content longtext 文档内容HTML
img varchar 文档图片
file_link varchar 文档文件
link varchar 文档链接
author varchar 作者
source varchar 来源
is_top StatusEnum 是否置顶:StatusEnum.Legal置顶,StatusEnum.UnLegal不置顶
is_new StatusEnum 是否置新:StatusEnum.Legal置新,StatusEnum.UnLegal不置新
is_login StatusEnum 是否需要登录:StatusEnum.Legal需要登录,StatusEnum.UnLegal不需要登录
date varchar 发布日期
create_id bigint 创建者ID
create_name varchar 创建者名称
create_time datetime 创建时间
n_sort int 排序号,默认会自动递增
valid StatusEnum 是否有效:StatusEnum.Legal有效,StatusEnum.UnLegal无效
is_show StatusEnum 是否显示:StatusEnum.Legal显示,StatusEnum.UnLegal不显示
服务与函数

首先顶部进行DI注入:

@using Microsoft.Extensions.Localization
@inject IStringLocalizerFactory localizerFactory

实例化对象

@{
//创建实例
var _ = localizerFactory.Create(null);
}

使用

@_["JSON文件中的Key"]

首先顶部进行DI注入:

@inject ChinaSky.CMS.Net.Services.ISiteNodeService CMSNode

查询所有级别的栏目*注意返回的所有级别栏目其字段比较特殊

@{
    //初始化查询条件集合
    var condtions = new List<.Linq.Expressions.Expression<Func<ChinaSky.CMS.Net.Models.site_node, bool>>>();
    //获取当前语种
    var lang = ViewData["lang"].MyToString();
    //添加匿名条件函数到集合中
    condtions.Add((a) => a.show_menu == StatusEnum.Legal && a.show_path == StatusEnum.Legal && a.review_status == ReViewStatusEnum.Pass);
    //添加匿名条件函数到集合中
    condtions.Add((a) => (a.lang == lang));
    //查询所有级别栏目
    var all_level = CMSNode.GetAllLevelData(condtions);
    
}

根据栏目ID查询栏目

@{
    var node_id=要查询的栏目ID;
    //定义匿名条件函数,实例重点查询父级,其他条件自己根据实际情况而定
    System.Linq.Expressions.Expression<Func<site_node, bool>> node_condution = a =>a.lang==lang&&a.id==node_id;
    //查询父级栏目
    var node_data = CMSNode.GetByOne(node_condution);
}

根据栏目代号查询栏目

@{

    var node_code="要查询的栏目代号";
    //定义匿名条件函数,实例重点查询父级,其他条件自己根据实际情况而定
    System.Linq.Expressions.Expression<Func<site_node, bool>> node_condution = a =>a.lang==lang&&a.node_code==node_code;
    //查询父级栏目
    var node_data = CMSNode.GetByOne(node_condution);
}

查询父级栏目

@{
    //获取当前栏目
    site_node current_node = ViewData["node_info"] as site_node;
    //定义匿名条件函数,实例重点查询父级,其他条件自己根据实际情况而定
    System.Linq.Expressions.Expression<Func<site_node, bool>> parent_node_condution = a =>a.lang==lang&&a.id==current_node.parent_node;
    //查询父级栏目
    var parent_node = CMSNode.GetByOne(parent_node_condution);
}

查询直属子栏目

@{
    //初始化查询条件集合
    var condtions = new List<.Linq.Expressions.Expression<Func<ChinaSky.CMS.Net.Models.site_node, bool>>
    //获取当前栏目
    site_node current_node = ViewData["node_info"] as site_node;
    //定义匿名条件函数,实例重点查询父级,其他条件自己根据实际情况而定
    condtions.Add( a =>a.lang==lang&&a.parent_node==current_node.id);
    //查询子级栏目
    var children_node_list = CMSNode.GetList(condtions);
}

查询所有子栏目

@{
    var all_children = CMSNode.GetPathChildNodes(current_node.node_code,lang);
}

首先顶部进行DI注入:

@inject ChinaSky.CMS.Net.Services.ISiteContentService CMSContent

根据栏目代号查询一条类容

@{
    //创建匿名条件函数
    System.Linq.Expressions.Expression<<site_content, bool>> content_one_condition = (a) =>a.lang == lang&& a.node_code == "栏目代号"&& a.review_status == ReViewStatusEnum.Pass;
    //排序非常重要,会根据此条件取排序后的第一条,如果可预见此条件下只有一条数据可忽略排序
    var content_one = CMSContent.GetByOne("n_sort asc", content_one_condition);
}

查询栏目下内容列表

@{ 
//匿名条件函数集合
var conditions = new List<System.Linq.Expressions.Expression<Func<site_content, bool>>>();
//条件只是演示,具体需要审核条件可自己根据实际情况而定
conditions.Add((a) => (a.lang == lang) && a.node_code == "栏目代号" && a.review_status == ReViewStatusEnum.Pass&&a.is_show==StatusEnum.Legal);
var content_list = CMSContent.GetList("n_sort asc,publish_date desc", conditions);
}

查询栏目内容分页列表

@{ 
//获取当前页面的页码
var page = Convert.ToInt32(string.Concat(ViewData["page"], ""));
//定义页大小
int page_size=10;
//定义总记录数
int total_record = 0;
//匿名条件函数集合
var conditions = new List<System.Linq.Expressions.Expression<Func<site_content, bool>>>();
//条件只是演示,具体需要审核条件可自己根据实际情况而定
conditions.Add((a) => (a.lang == lang) && a.node_code == "栏目代号" && a.review_status == ReViewStatusEnum.Pass&&a.is_show==StatusEnum.Legal);
var content_page_list = CMSContent.GetPageList(page, page_size, "n_sort desc,publish_date desc,create_time desc", conditions);
//返回的content_page_list格式如下:
    {
        List<site_content> list site_content 集合
        Total 总记录数
        PageIndex 当前页码
        PageSize 页大小
        PageCount 页数

    }
//可配合分页组件生成分页的html元素
@await Component.InvokeAsync("CMSPagination", new { UrlFomart = "/{lang}/栏目代号/list/{0}", PageSize = page_size, IPage = page, Total = content_page_list.Total })
}

首先顶部进行DI注入:

@inject ChinaSky.CMS.Net.Services.ISiteDocService SiteDoc

根据栏目代号查询一条类容

@{
    //创建匿名条件函数
    System.Linq.Expressions.Expression<<site_doc, bool>> doc_one_condition = (a) =>a.lang == lang&& a.node_code == "栏目代号"&&a.module=="文档分类代号"&& a.is_show == StatusEnum.Legal;
    //排序非常重要,会根据此条件取排序后的第一条,如果可预见此条件下只有一条数据可忽略排序
    var codoc_one = SiteDoc.GetByOne("n_sort asc", doc_one_condition);
}

查询栏目下文档列表

@{ 
//匿名条件函数集合
var conditions = new List<System.Linq.Expressions.Expression<Func<site_doc, bool>>>();
//条件只是演示,具体需要审核条件可自己根据实际情况而定
conditions.Add((a) =>a.lang == lang&& a.node_code == "栏目代号"&&a.module=="文档分类代号"&& a.is_show == StatusEnum.Legal);
var doc_list = SiteDoc.GetList("n_sort asc,date desc", conditions);
}

查询栏目内容分页列表

@{ 
//获取当前页面的页码
var page = Convert.ToInt32(string.Concat(ViewData["page"], ""));
//定义页大小
int page_size=10;
//定义总记录数
int total_record = 0;
//匿名条件函数集合
var conditions = new List<System.Linq.Expressions.Expression<Func<site_doc, bool>>>();
//条件只是演示,具体需要审核条件可自己根据实际情况而定
conditions.Add((a) =>a.lang == lang&& a.node_code == "栏目代号"&&a.module=="文档分类代号"&& a.is_show == StatusEnum.Legal);
var doc_page_list = SiteDoc.GetPageList(page, page_size, "n_sort desc,date desc,create_time desc", conditions);
//返回的doc_page_list格式如下:
    {
        List<site_doc> list site_doc 集合
        Total 总记录数
        PageIndex 当前页码
        PageSize 页大小
        PageCount 页数

    }
//可配合分页组件生成分页的html元素
@await Component.InvokeAsync("CMSPagination", new { UrlFomart = "/{lang}/栏目代号/list/{0}", PageSize = page_size, IPage = page, Total = doc_page_list.Total })
}

首先顶部进行DI注入:

@inject ChinaSky.CMS.Net.Setting.IApplicationSettingService AppSite

根据栏目代号查询一条类容

@{ 
    //根据Key获取站点配置
    string ValueOfKey = AppSite.Get("Key", "DefautValue");
    //可使用的Key包括
    en_SiteName 英文站点名称
    Favicon 站点Fovicon
    Logo 站点Logo
    OuterChainPicture 图片是否允许同域外链
    sc_SiteName 简体站点名称
    SiteMetaKeywords 站点Meta关键字
    tc_SiteName 繁体站点名称
}
                    
工具方法
//顶部注入
@inject ChinaSky.CMS.Net.Services.ISiteOtherService site_other
//获取站点附加类容
@{
    var index_notice = site_other.GetContentByCode("附加类容代号", lang, StatusEnum.Legal);
}
            
//获取当前页面所属栏目信息
@{
    site_node current_node = ViewData["node_info"] as site_node;
}
            
//获取当前语种
 @{
    var lang = ViewData["lang"].MyToString() == "" ? "sc" : ViewData["lang"].MyToString();
 }
            
//获取请求路径
 @{
    var req_path = ViewData["req_path"].MyToString();
 }
            
//清除Html标签
@ClearHTML(content.chr_content)
            
//格式化时间
@FormatDate("2020-06-12", "yyyy.MM.dd")
            
//截取字符串
@Sub("要截取的字符串", 开始位置,截取长度)
            
//截取html内容此函数会预先清理html标签再截取
@SubHtml("要截取的字符串", 开始位置,截取长度)
            
//生成分页
@await Component.InvokeAsync("CMSPagination", new { UrlFomart = "news/list/{0}", PageSize = 20, IPage = 5, Total = 500 })
            
//转义Html进行页面绑定
@Html.Raw(content.chr_content)