JNTemplate 文章标签解析
using JinianNet.JNTemplate;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
using xxtsoft.Common;
using xxtsoft.Core.Common;
namespace xxtsoft.Web.Entry.Pages
{
public class Index1Model : PageModel
{
private readonly SqlSugar.ISqlSugarClient _db;
public Index1Model(SqlSugar.ISqlSugarClient db)
{
this._db = db;
}
public IActionResult OnGet()
{
//变量标签
//var template = Engine.CreateTemplate("<p>你好,${name}</p>");
//template.Set("name", "liugongxun");
//var result = template.Render();
//return Content(result);
////加载公共文件
//var templateContent = "${include(\"" + App.HostEnvironment.ContentRootPath + "\\Pages\\Shared\\_top.cshtml\")}";
//var template = Engine.CreateTemplate(templateContent);
////template.Set("name", "liugongxun");
//var result = template.Render();
//return Content(result);
////调用静态属性
//var templateContent = "${DateTime.Now.ToString(\"MM-dd\")}";
//var template = Engine.CreateTemplate(templateContent);
//template.SetStaticType("DateTime", typeof(DateTime));
//var result = template.Render();
//return Content(result);
//调用函数标签
//var templateContent = "${TemplateValueHelper.ValTest(\"id,dictname\")}";
//var templateContent = @"
//<ul>
// ${for(i=0;i<4;i++)}
// <li>${i}</li>
// ${end}
//</ul>
//调用dt";
//var templateContent = "${set(id=10)}${id}";
//var templateContent = "${set(dt=TemplateValueHelper.ValTest(\"id,dictname\"))}${dt.Rows.Count}";
//var templateContent = @"
// ${set(dt=TemplateValueHelper.ValTest(""id,dictname,dictno""))}
//<ul>
// ${for(i=0;i<dt.Rows.Count;i++)}
// <li>${dt.Rows[i][""dictname""].ToString()}--${dt.Rows[i][""dictno""].ToString()}--${dt.Rows[i][""id""].ToString()}</li>
// ${end}
//</ul>
//";
//var template = Engine.CreateTemplate(templateContent);
//template.Set("TemplateValueHelper", new TemplateValueHelper(_db));
//var result = template.Render();
//string path = FileHelper.absolutPath("wwwroot/list/aa/1.html");
//FileHelper.FileWrite(path, result);
//获取标题
//string catid = Request.Query["catid"];
//var templateContent = "${TemplateValueHelper.PageTitle(catid)}";
//var template = Engine.CreateTemplate(templateContent);
//template.Set("TemplateValueHelper", new TemplateValueHelper(_db));
//template.Set("catid", catid);
//var result = template.Render();
//获取当前路径
//string catid = Request.Query["catid"];
//var templateContent = "${TemplateValueHelper.Location(catid)}";
//var template = Engine.CreateTemplate(templateContent);
//template.Set("TemplateValueHelper", new TemplateValueHelper(_db));
//template.Set("catid", catid);
//var result = template.Render();
//获取单页文章
//string catid = Request.Query["catid"];
//var templateContent = "${TemplateValueHelper.Getdanye(catid)}";
//var template = Engine.CreateTemplate(templateContent);
//template.Set("TemplateValueHelper", new TemplateValueHelper(_db));
//template.Set("catid", catid);
//var result = template.Render();
//获取文章详细
//var templateContent = "${ArticleDetail[\"title\"]}${ArticleDetail[\"author\"]}${id}";
//var template = Engine.CreateTemplate(templateContent);
//string id = Request.Query["catid"];
//var ArticleDetail = new TemplateValueHelper(_db).GetArticleDetail(id);
//template.Set("ArticleDetail", ArticleDetail);
//template.Set("id", id);
//var result = template.Render();
//文章列表
var templateContent = @"
${set(pagesize=10)}
${set(dt=TemplateValueHelper.PageList(""article_title"",""id,title,created"",""created desc"",""catid=1"",pagesize,pageindex))}
<ul>
${for(i=0;i<dt.Rows.Count;i++)}
<li>${dt.Rows[i][""title""].ToString()}--${dt.Rows[i][""id""].ToString()}--${dt.Rows[i][""created""].ToString()}</li>
${end}
</ul>
${pageindex}
$*总条数*$
${set(pagetotal=TemplateValueHelper.pagetotal(""article_title"",""catid=1""))}
${pagetotal}
$*分页代码*$
${TemplateValueHelper.PageStr(1,pagetotal,pagesize,1)}
";
var template = Engine.CreateTemplate(templateContent);
template.Set("TemplateValueHelper", new TemplateValueHelper(_db));
template.Set("pageindex", 1);
var result = template.Render();
return Content(result);
}
}
}后端解析
using Dm.util;
using SqlSugar;
using System.Data;
using System.Text;
using xxtsoft.Common;
namespace xxtsoft.Core.Common
{
/// <summary>
/// 模板标签处理
/// </summary>
public class TemplateValueHelper
{
private readonly SqlSugar.ISqlSugarClient _db;
public TemplateValueHelper(ISqlSugarClient db)
{
this._db = db;
}
public DataTable ValTest(string fld)
{
var dt = _db.Ado.GetDataTable("select " + fld + " from article_class");
return dt;
}
#region 调用任意表的数据标签
/// <summary>
/// 调用任意表的数据标签
/// </summary>
/// <param name="table">查询表名</param>
/// <param name="fld">要读取的字段</param>
/// <param name="sort">用于排序的字段</param>
/// <param name="row">读取最新几条</param>
/// <param name="where">查询的条件</param>
/// <returns></returns>
public DataTable Loop(string table, string fld, string sort, int row, string where)
{
var sql = "select " + CommHelper.FilterSQL(fld) + " from " + CommHelper.FilterSQL(table) + " where 1=1";
if (!string.IsNullOrEmpty(where))
{
sql += " and " + where;
}
if (!string.IsNullOrEmpty(sort))
{
sql += " order by " + sort;
}
if (!string.IsNullOrEmpty(row.ToString()))
{
sql += " LIMIT " + row;
}
var dt = _db.Ado.GetDataTable(sql);
return dt;
}
#endregion
#region 站点信息
//读取站点名称
/// <summary>
/// 站点名称
/// </summary>
/// <returns></returns>
public string SiteName()
{
return CommHelper.GuanLian("pub_pz_site", "1", "webname");
}
/// <summary>
/// 主办单位
/// </summary>
/// <returns></returns>
public string SiteZbdw()
{
return CommHelper.GuanLian("pub_pz_site", "1", "zbdw");
}
/// <summary>
/// 统计代码
/// </summary>
/// <returns></returns>
public string SiteStatis()
{
return CommHelper.GuanLian("pub_pz_site", "1", "statis");
}
#endregion
#region 获取当前分类的名字
/// <summary>
/// 获取当前分类的名字
/// </summary>
/// <param name="catid">分类名字</param>
/// <returns></returns>
public string PageTitle(string catid)
{
if (string.IsNullOrEmpty(catid))
{
return "";
}
return CommHelper.GuanLian("article_class", CommHelper.FilterSQL(catid), "dictname");
}
#endregion
#region 获取文章当前分类
/// <summary>
/// 获取文章当前分类
/// </summary>
/// <param name="catid"></param>
/// <returns></returns>
public string Location(string catid)
{
if (string.IsNullOrEmpty(catid))
{
return null;
}
string dictno = CommHelper.GuanLian("article_class", CommHelper.FilerForm(catid), "dictno");
#region 获取各节点字典
//获取各节点字典
int l = dictno.Length / 4;
string _dictno = "";
for (int i = 1; i <= l; i++)
{
_dictno += "'" + CommHelper.CutString(dictno, 4 * i, false) + "',";
}
if (!string.IsNullOrEmpty(_dictno))
{
_dictno = CommHelper.RepStrRight(_dictno, ",", "");
}
#endregion
string sql = "select * from article_class where dictno in(" + _dictno + ") order by dictno asc";
var dt = _db.Ado.GetDataTable(sql);
StringBuilder sb = new StringBuilder();
sb.AppendLine("<nav aria-label=\"breadcrumb\">");
sb.AppendLine(" <ol class=\"breadcrumb\">");
sb.AppendLine(" <li class=\"breadcrumb-item\"><a href=\"/\">首页</a></li>");
for (int i = 0; i < dt.Rows.Count; i++)
{
if (i == dt.Rows.Count - 1)
{
sb.AppendLine(" <li class=\"breadcrumb-item active\" aria-current=\"page\">" + dt.Rows[i]["dictname"].ToString() + "</li>");
}
else
{
sb.AppendLine(" <li class=\"breadcrumb-item\"><a href=\"" + SetLink(dt.Rows[i]["id"].toString(), dt.Rows[i]["lmlj"].toString(), dt.Rows[i]["danye"].toString()) + "\">" + dt.Rows[i]["dictname"].ToString() + "</a></li>");
}
}
sb.AppendLine(" </ol>");
sb.AppendLine("</nav>");
return sb.toString();
}
#region 设置链接
/// <summary>
/// 设置链接
/// </summary>
/// <param name="id">id</param>
/// <param name="lmlj">栏目外链</param>
/// <param name="danye">是否单页</param>
/// <returns></returns>
private string SetLink(string id, string lmlj, string danye)
{
string Rn = "";
if (!string.IsNullOrEmpty(lmlj))
{
Rn = lmlj;
}
else if (danye.ToLower() == "true")
{
Rn = "/danye/" + id + ".html";
}
else
{
Rn = "/list/" + id + "/1.html";
}
return Rn;
}
#endregion
#endregion
#region 读取单页文章
/// <summary>
/// 读取单页文章
/// </summary>
/// <param name="catid">文章分类</param>
/// <returns></returns>
public string Getdanye(string catid)
{
_db.Ado.ExecuteCommand("update article_danye set views=views+1 where catid=" + int.Parse(catid));
return CommHelper.GetFld("article_danye", "article", "catid=" + int.Parse(catid));
}
#endregion
#region 读取文章详细
/// <summary>
/// 读取文章详细
/// </summary>
/// <param name="id">文章id</param>
/// <returns></returns>
public Dictionary<string, string> GetArticleDetail(string id)
{
if (string.IsNullOrEmpty(id))
{
return null;
}
var dictionary = new Dictionary<string, string>();
//_db.Ado.ExecuteCommand("update article_title set pv=pv+1 where id=" + id);
var dt = _db.Ado.GetDataTable("select * from article_title where id=" + int.Parse(id));
if (dt.Rows.Count > 0)
{
dictionary.Add("title", dt.Rows[0]["title"].toString());
dictionary.Add("source", dt.Rows[0]["ssourceid"].toString());
dictionary.Add("author", dt.Rows[0]["author"].toString());
dictionary.Add("created", TimeHelper.ToDataByString(dt.Rows[0]["created"].toString()));
dictionary.Add("pv", "<script src=\"/ajax?t=detail&p=pv&id=" + SecurityHelper.DesEnc(id) + "\"></script>");
dictionary.Add("article", dt.Rows[0]["article"].toString());
dictionary.Add("pre", "<script src=\"/ajax?t=detail&p=pre&id=" + SecurityHelper.DesEnc(id) + "\"></script>");
dictionary.Add("next", "<script src=\"/ajax.aspx?t=detail&p=next&id=" + SecurityHelper.DesEnc(id) + "\"></script>");
}
else
{
return null;
}
// 你可以根据 id 查询文章详情,并填充字典
// 例如:dictionary.Add("Title", article.Title);
return dictionary;
}
#endregion
#region 读取列表分页内容
/// <summary>
///
/// </summary>
/// <param name="tbl">表名</param>
/// <param name="flds">读取字段:如title,cdt,pv,flg</param>
/// <param name="orderfld">排序:如id desc</param>
/// <param name="sqlwhere">搜索条件:如1=1</param>
/// <param name="pagesize">分页大小:如10</param>
/// <param name="pageindex">当前页数:如1</param>
///
/// <returns></returns>
public DataTable PageList(string tbl, string flds, string orderfld, string sqlwhere, int pagesize = 15, int pageindex = 1)
{
string sql = "SELECT " + CommHelper.FilterSQL(flds) + " FROM " + CommHelper.FilterSQL(tbl) + " WHERE " + CommHelper.FilterSQL(sqlwhere) + " ORDER BY " + CommHelper.FilterSQL(orderfld) + " LIMIT " + pagesize + " OFFSET " + pagesize + " * (" + pageindex + " - 1)";
var dt = _db.Ado.GetDataTable(sql);
return dt;
}
/// <summary>
/// 读取总条数
/// </summary>
/// <param name="tbl"></param>
/// <param name="sqlwhere"></param>
/// <returns></returns>
public int pagetotal(string tbl, string sqlwhere)
{
return _db.Ado.GetInt("select count(*) from "+tbl+" where "+ sqlwhere);
}
#endregion
#region 分页代码显示
/// <summary>
/// 分页代码显示
/// </summary>
/// <param name="catid">分类id</param>
/// <param name="TotleNum">总数据量</param>
/// <param name="NumPerPage">每页显示多少条</param>
/// <param name="Thepage">当前页</param>
/// <returns></returns>
public string PageStr(int catid, int TotleNum, int NumPerPage, int Thepage)
{
StringBuilder sb = new StringBuilder();
//sb.AppendLine(" <li class=\"page-item\"><a class=\"page-link\" href=\"#\">2</a></li>");
//sb.AppendLine(" <li class=\"page-item\"><a class=\"page-link\" href=\"#\">3</a></li>");
//sb.AppendLine(" <li class=\"page-item\">");
//sb.AppendLine(" <a class=\"page-link\" href=\"#\" aria-label=\"Next\">");
//sb.AppendLine(" <span aria-hidden=\"true\">»</span>");
//sb.AppendLine(" </a>");
//sb.AppendLine(" </li>");
//string strTemp = "<div class=\"pagestr\"><div class=\"pagetotal\">";
sb.AppendLine("<nav aria-label=\"Page navigation example\">");
sb.AppendLine(" <ul class=\"pagination\">");
int n;
int p;
int ii;
if (Convert.ToInt32(TotleNum) <= Convert.ToInt32(NumPerPage))
{
n = 1;
}
if (Convert.ToInt32(TotleNum) % Convert.ToInt32(NumPerPage) == 0)
{
n = TotleNum / NumPerPage;
}
else
{
n = TotleNum / NumPerPage + 1;
}
//strTemp += "共 " + TotleNum + " 条记录 页次:" + Thepage + "/" + n + "页 " + NumPerPage + "条/页</div><ul>";
if (Thepage - 1 % 10 == 0)
p = (Thepage - 1) / 10;
else
p = (Thepage - 1) / 10;
if (p * 10 > 0)
{
sb.AppendLine(" <li class=\"page-item\">");
sb.AppendLine(" <a class=\"page-link\" href=\"/list/" + catid + "/" + (p * 10).ToString() + ".html\" aria-label=\"Previous\">");
sb.AppendLine(" <span aria-hidden=\"true\">«</span>");
sb.AppendLine(" </a>");
sb.AppendLine(" </li>");
}
//strTemp += "<li class=\"pre\"><a href='/list/" + catid + "/" + (p * 10).ToString() + ".html' title=上十页 ><<</a></li> ";
int uming_i = 1;
for (ii = p * 10 + 1; ii <= p * 10 + 10; ii++)
{
if (ii == Thepage)
sb.AppendLine(" <li class=\"page-item active\"><a class=\"page-link\" href=\"/list/" + catid + "/" + ii.ToString() + ".html\">" + ii + "</a></li>");
//strTemp += "<li class=\"on\">" + ii + "</li> ";
else
sb.AppendLine(" <li class=\"page-item\"><a class=\"page-link\" href=\"/list/" + catid + "/" + ii.ToString() + ".html\">" + ii + "</a></li>");
//strTemp += "<li><a href='/list/" +catid+"/"+ii.ToString() + ".html'>" + ii + "</a></li>";
if (ii == n)
break;
uming_i = uming_i + 1;
}
if (ii <= n && uming_i == 11)
{
sb.AppendLine(" <li class=\"page-item\">");
sb.AppendLine(" <a class=\"page-link\" href=\"/list/" + catid + "/" + ii.ToString() + ".html\" aria-label=\"Next\">");
sb.AppendLine(" <span aria-hidden=\"true\">»</span>");
sb.AppendLine(" </a>");
sb.AppendLine(" </li>");
//strTemp += "<li class=\"next\"><a href='/list/" + catid + "/" + ii.ToString() + "/' title=下十页>>></a></li> ";
}
//strTemp += "</ul>";
sb.AppendLine(" </ul>");
sb.AppendLine("</nav>");
return sb.toString();
}
#endregion
}
}
