123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661 |
- using CZFW.Core.Security;
- using CZFW.Framework.Model;
- using CZFW.Framework.Tools;
- using CZFW.MDB;
- using CZFW.MDB.Logic;
- using CZFW.MDB.Model;
- using CZFW.MDB.Util;
- using Microsoft.AspNetCore.Html;
- using Microsoft.AspNetCore.Http;
- using Microsoft.AspNetCore.Mvc.Razor;
- using Microsoft.AspNetCore.Routing;
- using MongoDB.Bson;
- using Newtonsoft.Json.Linq;
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Text.RegularExpressions;
- using System.Threading.Tasks;
- using System.Web;
- namespace CZFW.CMS.Web.App_Code
- {
- public static class ViewHelper
- {
- /// <summary>
- /// 获取当前页的SEO及分享数据
- /// </summary>
- /// <param name="razorPage"></param>
- /// <returns></returns>
- public static SEOShareModel GetSEOShareModel(this RazorPage<dynamic> razorPage)
- {
- var site = SiteHelper.GetSiteModel(razorPage.Context);
- var res = new SEOShareModel();
- SimpleSysConfigModel sysConfig = SysConfig.GetSimpleProjectInfo(site.SiteName, site.TplName);
-
- if (razorPage.Model is JObject share) ///获取Model数据
- {
- var tp = share.SelectToken($"$.{Constants.SEOSHARE_SEO_PREFIX}.{Constants.SEO_TITLE}");
- res.SEOTitle = tp is null ? null : tp.ToString();
- tp = share.SelectToken($"$.{Constants.SEOSHARE_SEO_PREFIX}.{Constants.SEO_DESCRIPTION}");
- res.SEODescription = tp is null ? null : tp.ToString();
- tp = share.SelectToken($"$.{Constants.SEOSHARE_SEO_PREFIX}.{Constants.SEO_KEYWORDS}");
- res.SEOKeywords = tp is null ? null : tp.ToString();
- tp = share.SelectToken($"$.{Constants.SEOSHARE_SHARE_PREFIX}.{Constants.SHARE_DESCRIPTION}");
- res.ShareDescription = tp is null ? null : tp.ToString();
- tp = share.SelectToken($"$.{Constants.SEOSHARE_SHARE_PREFIX}.{Constants.SHARE_IMAGE}");
- res.ShareImage = tp is null ? null : tp.ToString();
- tp = share.SelectToken($"$.{Constants.SEOSHARE_SHARE_PREFIX}.{Constants.SHARE_TITLE}");
- res.ShareTitle = tp is null ? null : tp.ToString();
- tp = share.SelectToken($"$.{Constants.SEOSHARE_SHARE_PREFIX}.{Constants.SHARE_URL}");
- res.ShareUrl = tp is null ? null : tp.ToString();
- }
- ///获取ViewBag数据
- res.SEOTitle = string.IsNullOrWhiteSpace(res.SEOTitle) ? razorPage.ViewBag.seoTitle : res.SEOTitle;
- res.SEODescription = string.IsNullOrWhiteSpace(res.SEODescription) ? razorPage.ViewBag.seoDescription : res.SEODescription;
- res.SEOKeywords = string.IsNullOrWhiteSpace(res.SEOKeywords) ? razorPage.ViewBag.seoKeywords : res.SEOKeywords;
- res.ShareTitle = string.IsNullOrWhiteSpace(res.ShareTitle) ? razorPage.ViewBag.shareTitle : res.ShareTitle;
- res.ShareUrl = string.IsNullOrWhiteSpace(res.ShareUrl) ? razorPage.ViewBag.shareUrl : res.ShareUrl;
- res.ShareImage = string.IsNullOrWhiteSpace(res.ShareImage) ? razorPage.ViewBag.shareImage : res.ShareImage;
- res.ShareDescription = string.IsNullOrWhiteSpace(res.ShareDescription) ? razorPage.ViewBag.shareDescription : res.ShareDescription;
- string path = razorPage.Context.Request.Path;
- if (string.IsNullOrWhiteSpace(path))
- path = "/";
- string pathAndQuery = path + razorPage.Context.Request.QueryString;
- ///获取SEOSHare表中数据
- if (string.IsNullOrWhiteSpace(res.SEOTitle) && string.IsNullOrWhiteSpace(res.SEOKeywords) && string.IsNullOrWhiteSpace(res.SEODescription) &&
- string.IsNullOrWhiteSpace(res.ShareDescription) && string.IsNullOrWhiteSpace(res.ShareImage) &&
- string.IsNullOrWhiteSpace(res.ShareTitle) && string.IsNullOrWhiteSpace(res.ShareUrl))
- {
-
-
- MongoRepository mongoRepository = new MongoRepository();
- mongoRepository.SetCurrentTable($"{SiteHelper.GetSiteModel(razorPage.Context).TplName}_{Constants.SEOSHARE_TABLE_NAME}");
- var bson = mongoRepository.GetOne($"{{{Constants.SEO_URL}:'{pathAndQuery}'}}");
- if(bson==null)
- bson = mongoRepository.GetOne($"{{{Constants.SEO_URL}:'{path}'}}");
- if (bson != null)
- {
- bson.TryGetValue(Constants.SEOSHARE_SEO_PREFIX, out BsonValue seoBson);
- BsonValue tp;
- if (string.IsNullOrWhiteSpace(res.SEOTitle) && seoBson != null)
- res.SEOTitle = seoBson.AsBsonDocument.TryGetValue(Constants.SEO_TITLE, out tp) ? (tp is BsonString ? tp.AsString : null) : null;
- if (string.IsNullOrWhiteSpace(res.SEODescription) && seoBson != null)
- res.SEODescription = seoBson.AsBsonDocument.TryGetValue(Constants.SEO_DESCRIPTION, out tp) ? (tp is BsonString ? tp.AsString : null) : null;
- if (string.IsNullOrWhiteSpace(res.SEOKeywords) && seoBson != null)
- res.SEOKeywords = seoBson.AsBsonDocument.TryGetValue(Constants.SEO_KEYWORDS, out tp) ? (tp is BsonString ? tp.AsString : null) : null;
- bson.TryGetValue(Constants.SEOSHARE_SHARE_PREFIX, out BsonValue shareBson);
- res.ShareDescription = shareBson.AsBsonDocument.TryGetValue(Constants.SHARE_DESCRIPTION, out tp) ? (tp is BsonString ? tp.AsString : null) : null;
- if (string.IsNullOrWhiteSpace(res.ShareImage) && shareBson != null)
- res.ShareImage = shareBson.AsBsonDocument.TryGetValue(Constants.SHARE_IMAGE, out tp) ? (tp is BsonString ? tp.AsString : null) : null;
- if (string.IsNullOrWhiteSpace(res.ShareTitle) && shareBson != null)
- res.ShareTitle = shareBson.AsBsonDocument.TryGetValue(Constants.SHARE_TITLE, out tp) ? (tp is BsonString ? tp.AsString : null) : null;
- if (string.IsNullOrWhiteSpace(res.ShareUrl) && shareBson != null)
- res.ShareUrl = shareBson.AsBsonDocument.TryGetValue(Constants.SHARE_URL, out tp) ? (tp is BsonString ? tp.AsString : null) : null;
- }
- }
- ///获取默认数据
- if (string.IsNullOrWhiteSpace(res.SEOTitle))
- res.SEOTitle = sysConfig.ProjectName;
- if (string.IsNullOrWhiteSpace(res.SEOKeywords))
- res.SEOKeywords = sysConfig.ProjectName;
- if (string.IsNullOrWhiteSpace(res.SEODescription))
- if (!string.IsNullOrWhiteSpace(res.SEOTitle))
- res.SEODescription = res.SEOTitle;
- else
- res.SEODescription = sysConfig.ProjectName;
- if (string.IsNullOrWhiteSpace(res.ShareTitle))
- if (!string.IsNullOrWhiteSpace(res.SEOTitle))
- res.ShareTitle = res.SEOTitle;
- else
- res.ShareTitle = res.SEOTitle;
- if (string.IsNullOrWhiteSpace(res.ShareDescription))
- if (!string.IsNullOrWhiteSpace(res.SEOTitle))
- res.ShareDescription = res.SEOTitle;
- else
- res.ShareDescription = res.SEOTitle;
- if (string.IsNullOrWhiteSpace(res.ShareImage))
- res.ShareImage = sysConfig.Logo;
- if (string.IsNullOrWhiteSpace(res.ShareUrl))
- res.ShareUrl = sysConfig.SiteUrl + path;
- res.ShareImage = RelativeToAbsolutePath(res.ShareImage, razorPage.Context);
- return res;
- }
- //获取当前网站的系统配置数据
- public static dynamic GetSiteConfig(this RazorPage razorPage)
- {
- var site = SiteHelper.GetSiteModel(razorPage.Context);
- var data = SysConfig.SiteConfig(site.SiteName, site.TplName, site.ThemeName);
- return data;
- }
- /// <summary>
- /// 根据导航Id获取导航数据。
- /// </summary>
- /// <param name="razorPage"></param>
- /// <param name="navId"></param>
- /// <returns></returns>
- public static dynamic GetNavigation(this RazorPage razorPage, string navId)
- {
- var site = SiteHelper.GetSiteModel(razorPage.Context);
- var data = SiteNavigation.GetNavigation(site.SiteName, navId, site.TplName);
- return data;
- }
- //通过id获取单条数据
- public static dynamic Get(this RazorPage razorPage, string id, string pageName = null, string projection = "{}")
- {
- var pageLogic = CZHttpContext.ServiceProvider.GetService(typeof(IPage)) as IPage;
- var site = SiteHelper.GetSiteModel(razorPage.Context);
- if (string.IsNullOrWhiteSpace(pageName))
- pageName = GetPageName(razorPage);
- var bson = pageLogic.GetByName($"{site.TplName}_{pageName}", id, null, projection);
- if (bson == null)
- return null;
- else
- {
- var json = bson.CZToJson();
- dynamic jobject = JObject.Parse(json);
- return jobject;
- }
- }
- //通过id获取多条数据
- public static dynamic Gets(this RazorPage razorPage, string[] ids, string pageName = null, string projection = "{}")
- {
- var pageLogic = CZHttpContext.ServiceProvider.GetService(typeof(IPage)) as IPage;
- var site = SiteHelper.GetSiteModel(razorPage.Context);
- if (string.IsNullOrWhiteSpace(pageName))
- pageName = GetPageName(razorPage);
- var pages = new BsonArray();
- foreach (var id in ids)
- {
- var bson = pageLogic.GetByName($"{site.TplName}_{pageName}", id, null, projection);
- pages.Add(bson);
- }
- if (pages == null || pages.Count < 0)
- return null;
- else
- {
- var json = pages.CZToJson();
- dynamic jobject = JObject.Parse(json);
- return jobject;
- }
- }
- /// <summary>
- /// 按条件获取一条数据
- /// </summary>
- /// <param name="razorPage"></param>
- /// <param name="pageName">如果为空,则取当前页面的pageName</param>
- /// <param name="query"></param>
- /// <param name="projection"></param>
- /// <param name="sort"></param>
- /// <returns></returns>
- public static dynamic GetOne(this RazorPage razorPage, string pageName = null, string query = "{}", string projection = "{}", string sort = "{'sort_order':-1}")
- {
- var pageLogic = CZHttpContext.ServiceProvider.GetService(typeof(IPage)) as IPage;
- var site = SiteHelper.GetSiteModel(razorPage.Context);
- if (string.IsNullOrWhiteSpace(pageName))
- pageName = GetPageName(razorPage);
- query = AssureLangPara(query, site.ThemeName);
- var bson = pageLogic.GetOneByName(site.SiteName, $"{site.TplName}_{pageName}", query, projection, sort);
- if (bson == null)
- return null;
- else
- {
- var json = bson.CZToJson();
- dynamic jarray = JObject.Parse(json);
- return jarray;
- }
- }
- /// <summary>
- /// 获取下一条
- /// </summary>
- /// <param name="razorPage"></param>
- /// <param name="projection"></param>
- /// <param name="sort">默认按创建时间取</param>
- /// <returns></returns>
- public static dynamic GetNext(this RazorPage<dynamic> razorPage, string projection = "{_id:1, title:1, summary:1, image:1}", string sort = "{sort_order:-1,modify_time:-1}")
- {
- var model = razorPage.Model;
- var pageName = razorPage.Context.GetRouteValue("pageName").ToString();
- var sortOrder = model.sort_order;
- var query = $"{{sort_order:{{$lt:{sortOrder}}}}}";
- query = AssureLangPara(query, SiteHelper.GetSiteModel(razorPage.Context).ThemeName);
- return GetOne(razorPage: razorPage, pageName: pageName, query: query, projection: projection, sort: sort);
- }
- /// <summary>
- /// 获取上一条
- /// </summary>
- /// <param name="razorPage"></param>
- /// <param name="projection"></param>
- /// <param name="sort">默认按创建时间取</param>
- /// <returns></returns>
- public static dynamic GetPre(this RazorPage<dynamic> razorPage, string projection = "{_id:1, title:1, summary:1, image:1}", string sort = "{sort_order:1,modify_time:1}")
- {
- var model = razorPage.Model;
- var pageName = razorPage.Context.GetRouteValue("pageName").ToString();
- var query = $"{{sort_order:{{$gt:{model.sort_order}}}}}";
- query = AssureLangPara(query, SiteHelper.GetSiteModel(razorPage.Context).ThemeName);
- return GetOne(razorPage: razorPage, pageName: pageName, query: query, projection: projection, sort: sort);
- }
- /// <summary>
- /// 获取数据列表
- /// </summary>
- /// <param name="razorPage"></param>
- /// <param name="pageName">如果为空,则为当前页面的pageName</param>
- /// <param name="query"></param>
- /// <param name="type"></param>
- /// <param name="projection"></param>
- /// <param name="pageIndex"></param>
- /// <param name="pageSize"></param>
- /// <param name="sort"></param>
- /// <returns></returns>
- public static dynamic GetList(this RazorPage razorPage, string pageName = null, string query = "{}", string type = null, string projection = "{}", int pageIndex = 1, int pageSize = 12, string sort = "{'sort_order':-1}")
- {
- var pageLogic = CZHttpContext.ServiceProvider.GetService(typeof(IPage)) as IPage;
- var site = SiteHelper.GetSiteModel(razorPage.Context);
- if (string.IsNullOrWhiteSpace(pageName))
- pageName = GetPageName(razorPage);
- query = AssureLangPara(query, site.ThemeName);
- var bson = pageLogic.GetListByName(site.SiteName, $"{site.TplName}_{pageName}", type, query, projection, pageIndex, pageSize, sort);
- if (bson == null)
- return null;
- else
- {
- var json = bson.CZToJson();
- dynamic jarray = JArray.Parse(json);
- return jarray;
- }
- }
- /// <summary>
- /// 获取随机相关记录,通常在详情页的下方会有获取相关记录。获取的记录会根据查询结果随机取出,并且支持排除当前记录
- /// </summary>
- /// <param name="razorPage"></param>
- /// <param name="selfId">当前记录Id,避免数据少时将当前显示的数据给取出来</param>
- /// <param name="size">需要取的相关记录的条数</param>
- /// <param name="query">查询条件。</param>
- /// <param name="projection">需要取回的字段</param>
- /// <returns></returns>
- public static dynamic GetRelated(this RazorPage razorPage, object selfId = null, int size = 4, string query = "{}", string projection = "{}")
- {
- var pageLogic = CZHttpContext.ServiceProvider.GetService(typeof(IPage)) as IPage;
- var (siteName, tplName, tableName) = SiteInfo(razorPage);
- var self = selfId == null ? string.Empty : selfId.ToString();
- query = AssureLangPara(query, SiteHelper.GetSiteModel(razorPage.Context).ThemeName);
- var res = pageLogic.GetRelated(siteName, tableName, self, query, projection, size);
- dynamic re = JArray.Parse(res.CZToJson());
- return re;
- }
- ///获取条数
- public static int GetCount(this RazorPage razorPage, string query = "{}")
- {
- var pageLogic = CZHttpContext.ServiceProvider.GetService(typeof(IPage)) as IPage;
- var site = SiteHelper.GetSiteModel(razorPage.Context);
- var pageName = GetPageName(razorPage);
- query = AssureLangPara(query, site.ThemeName);
- var count = pageLogic.GetCount(site.SiteName, $"{site.TplName}_{pageName}", query);
- return (int)count;
- }
- public static int GetQryCount(this RazorPage razorPage, string pageName = null, string query = "{}")
- {
- var pageLogic = CZHttpContext.ServiceProvider.GetService(typeof(IPage)) as IPage;
- var site = SiteHelper.GetSiteModel(razorPage.Context);
- if (string.IsNullOrWhiteSpace(pageName))
- pageName = GetPageName(razorPage);
- query = AssureLangPara(query, site.ThemeName);
- var count = pageLogic.GetCount(site.SiteName, $"{site.TplName}_{pageName}", query);
- return (int)count;
- }
- //获取分页对象。
- public static PagerModel GetPager(this RazorPage razorPage)
- {
- int pageIndex = 1, pageSize = 12;
- int total = razorPage.ViewBag.total;
- var query = razorPage.Context.Request.Query;
- if (query.ContainsKey(CMSWebConstant.PAGE_INDEX_QUERY_STRING_KEY))
- {
- int.TryParse(query[CMSWebConstant.PAGE_INDEX_QUERY_STRING_KEY], out pageIndex);
- }
- if (query.ContainsKey(CMSWebConstant.PAGE_SIZE_QUERY_STRING_KEY))
- int.TryParse(query[CMSWebConstant.PAGE_SIZE_QUERY_STRING_KEY], out pageSize);
- var pager = new PagerModel(total, pageIndex, pageSize);
- return pager;
- }
- //替换当前页面url中的pageindex参数。主要用于配合生成分页列表。
- /// <param name="razorPage"></param>
- /// <param name="pageIndex">要替换的pageIndex值</param>
- /// <param name="absoluteUrl">是否生成绝对路径</param>
- /// <returns>更新pageIndex后的路径</returns>
- public static string ReplacePageIndex(this RazorPage razorPage, int pageIndex, bool absoluteUrl = false)
- {
- var url = razorPage.Context.Request.Path.ToString();
- var query = razorPage.Context.Request.Query;
- var querystring = $"?{CMSWebConstant.PAGE_INDEX_QUERY_STRING_KEY}={pageIndex}";
- foreach (var item in query)
- {
- if (item.Key != CMSWebConstant.PAGE_INDEX_QUERY_STRING_KEY)
- querystring += $"&{item.Key}={item.Value}";
- }
- url = url + querystring;
- if (absoluteUrl)
- {
- var request = razorPage.Context.Request;
- url = $"{request.Scheme}://{request.Host.Host}{url}";
- }
- return url;
- }
- //替换当前页面url中的pageSize参数。主要用于配合生成分页列表。
- /// <param name="razorPage"></param>
- /// <param name="pageIndex">要替换的pageSize值</param>
- /// <param name="absoluteUrl">是否生成绝对路径</param>
- /// <returns>更新pageIndex后的路径</returns>
- public static string ReplacePageSize(this RazorPage razorPage, int pageSize, bool absoluteUrl = false)
- {
- var url = razorPage.Context.Request.Path.ToString();
- var query = razorPage.Context.Request.Query;
- var querystring = $"?{CMSWebConstant.PAGE_SIZE_QUERY_STRING_KEY}={pageSize}";
- foreach (var item in query)
- {
- if (item.Key != CMSWebConstant.PAGE_SIZE_QUERY_STRING_KEY)
- querystring += $"&{item.Key}={item.Value}";
- }
- url = url + querystring;
- if (absoluteUrl)
- {
- var request = razorPage.Context.Request;
- url = $"{request.Scheme}://{request.Host.Host}{url}";
- }
- return url;
- }
- public static string ReplaceQueryString(string url, string key, string newVal)
- {
- var query = url;
- var reg = new Regex($"{key}=\\w*");
- var match = reg.Match(query);
- var newquery = $"{key}={newVal}";
- if (match.Success)
- {
- url = reg.Replace(query, newquery);
- }
- else
- {
- if (url.Contains("?"))
- url += $"&{newquery}";
- else
- url += $"?{newquery}";
- }
- return url;
- }
- /// <summary>
- /// 生成Url工具
- /// </summary>
- /// <param name="razorPage"></param>
- /// <param name="action">不填时为与当前页面的action一致。例如当前时List,则生成的url的action也为List</param>
- /// <param name="pageName">不填时与当前页面的pageName一致</param>
- /// <param name="id">Id参数,通常在生成详情页时使用。</param>
- /// <param name="query">查询字符串,需要将所有的查询字符串完整传入。且需要在传入前完成加密</param>
- /// <param name="absoluteUrl">是否生成绝对路径url</param>
- /// <returns></returns>
- public static string Url(this RazorPage razorPage,
- string action = null,
- string pageName = null,
- object id = null,
- string query = null,
- bool absoluteUrl = false)
- {
- string _id = null;
- if (id != null)
- _id = id.ToString();
- var route = razorPage.Context.GetRouteData();
- if (string.IsNullOrWhiteSpace(pageName))
- {
- pageName = route.Values["pageName"].ToString();
- }
- if (string.IsNullOrWhiteSpace(action))
- {
- action = route.Values["action"].ToString();
- }
- if (!string.IsNullOrWhiteSpace(_id) && route.Values.ContainsKey("id"))
- {
- _id = route.Values["id"].ToString();
- }
- if (action.ToLower() == "list")
- action = null;
- else
- {
- if (action.ToLower() == "detail")
- {
- action = $"/{action}";
- }
- else
- {
- action = $"/{action}.html";
- }
- }
- string lang = SiteHelper.GetSiteModel(razorPage.Context).ThemeName;
- if (lang != SysConfig.DefaultLanguage())
- lang = $"/{lang}";
- if (!string.IsNullOrWhiteSpace(_id))
- _id = $"/{_id}.html";
- var url = $"/{lang}/{pageName}{action}{_id}";
- if (!string.IsNullOrWhiteSpace(query))
- url = $"{url}?{query}";
- if (absoluteUrl)
- {
- var request = razorPage.Context.Request;
- url = $"{request.Scheme}://{request.Host.Host}{url}";
- }
- return url;
- }
- public static string UrlDetail(this RazorPage razorPage, object id, string pageName = null)
- {
- return Url(razorPage, "detail", id: id, pageName: pageName);
- }
- public static string UrlList(this RazorPage razorPage,
- string pageName = null,
- string qry = null,
- string type = null,
- string prj = null,
- string st = null,
- string view = null,
- int pageIndex = 0,
- int pageSize = 12,
- string otherQuery = null,
- int total = 0)
- {
- var query = string.Empty;
- if (!string.IsNullOrWhiteSpace(qry))
- query += $"qry={DesEncrypt.Encrypt(qry)}&";
- if (!string.IsNullOrWhiteSpace(prj))
- query += $"prj={DesEncrypt.Encrypt(prj)}&";
- if (!string.IsNullOrWhiteSpace(st))
- query += $"st={DesEncrypt.Encrypt(st)}&";
- if (!string.IsNullOrWhiteSpace(view))
- query += $"view={view}&";
- if (pageIndex > 0)
- query += $"pageIndex={pageIndex}&";
- if (pageSize > 0)
- query += $"pageSize={pageSize}&";
- if (total > 0)
- query += $"total={total}&";
- if (!string.IsNullOrWhiteSpace(otherQuery))
- query += otherQuery;
- if (query.EndsWith("&"))
- query.Remove(query.Length - 1);
- return Url(razorPage, "list", pageName, null, query);
- }
- /// <summary>
- /// 获取分类对象
- /// </summary>
- /// <param name="razorPage"></param>
- /// <param name="cateName">分类的cate_name,就是分类本身,也是分类对象的根节点的cate_name值。该值是在建模时填入的。</param>
- /// <param name="descendants">分类的路径。 当分类有多层时,从外到内,每一层的cate_name</param>
- /// <returns></returns>
- public static dynamic GetCategory(this RazorPage razorPage, object cateName, params object[] descendants)
- {
- var site = SiteHelper.GetSiteModel(razorPage.Context);
- var cate = CategoryRepository.GetCategory(site.SiteName, cateName.ToString(), site.TplName, site.ThemeName);
- BsonDocument res = null;
- if (cate == null) return null;
- if (descendants.Count() == 0)
- res = cate;
- else
- {
- if (!cate.Contains(Constants.CATEGORY_CHILDREN_FIELD))
- return null;
- var children = cate[Constants.CATEGORY_CHILDREN_FIELD].AsBsonArray;
- if (children.Count == 0)
- return null;
- foreach (var item1 in descendants)
- {
- var item = item1.ToString();
- res = GetCategoryChildByCateName(children, item);
- if (res == null)
- return null;
- if (res.Contains(Constants.CATEGORY_CHILDREN_FIELD) && res[Constants.CATEGORY_CHILDREN_FIELD].IsBsonArray)
- children = res[Constants.CATEGORY_CHILDREN_FIELD].AsBsonArray;
- else
- children = new BsonArray();
- }
- }
- dynamic obj = JObject.Parse(res.CZToJson());
- return obj;
- }
- /// <summary>
- /// 获取分类对象的名称。用法与GetCategory一致
- /// </summary>
- /// <param name="razorPage"></param>
- /// <param name="cateName"></param>
- /// <param name="descendants"></param>
- /// <returns></returns>
- public static string GetCateNameByStringIds(this RazorPage razorPage, object cateName, params object[] descendants)
- {
- var cate = GetCategory(razorPage, cateName.ToString(), descendants);
- if (cate == null)
- return null;
- return cate[Constants.CATEGORY_TITLE_FIELD];
- }
- /// <summary>
- /// 获取分类对象的名称。用法与GetCategory一致
- /// </summary>
- /// <param name="razorPage"></param>
- /// <param name="cateName"></param>
- /// <param name="descendants"></param>
- /// <returns></returns>
- public static string GetCateName(this RazorPage razorPage, object cateName, JArray descendants = null)
- {
- var items = new string[] { };
- if (descendants != null)
- items = descendants.ToObject<string[]>();
- var cate = GetCategory(razorPage, cateName.ToString(), items);
- if (cate == null)
- return null;
- return cate[Constants.CATEGORY_TITLE_FIELD];
- }
- /// <summary>
- /// 获取分类对象的名称。用法与GetCategory一致 by:cr
- /// </summary>
- /// <param name="razorPage"></param>
- /// <param name="cateName"></param>
- /// <param name="descendants"></param>
- /// <returns></returns>
- public static dynamic GetCate2(this RazorPage razorPage, object cateName, JArray descendants = null)
- {
- var items = new string[] { };
- if (descendants != null)
- items = descendants.ToObject<string[]>();
- var cate = GetCategory(razorPage, cateName.ToString(), items);
- if (cate == null)
- return null;
- return cate;
- }
- //从当前url的查询字符串中获取值
- public static string GetQueryString(this RazorPage razorPage, string key)
- {
- var query = razorPage.Context.Request.Query[key];
- return query;
- }
- static BsonDocument GetCategoryChildByCateName(BsonArray children, string cateName)
- {
- return children.SingleOrDefault(x => x.AsBsonDocument.Contains(Constants.CATEGORY_ID_FIELD) && x[Constants.CATEGORY_ID_FIELD].AsString == cateName)?.AsBsonDocument;
- }
- static string GetPageName(RazorPage razorPage)
- {
- return razorPage.Context.GetRouteValue("pageName").ToString();
- }
- static (string siteName, string tplName, string tableName) SiteInfo(RazorPage razorPage)
- {
- var site = SiteHelper.GetSiteModel(razorPage.Context);
- return (site.SiteName, site.TplName, $"{site.TplName}_{GetPageName(razorPage)}");
- }
- public static string AssureLangPara(string query, string lang)
- {
- var obj = JObject.Parse(query);
- if (!obj.ContainsKey(Constants.LANG_FIELD))
- obj[Constants.LANG_FIELD] = lang;
- return obj.ToString();
- }
- public static string RelativeToAbsolutePath(string path, HttpContext razorPage)
- {
- if (string.IsNullOrWhiteSpace(path))
- return null;
- var host = $"{razorPage.Request.Scheme}://{razorPage.Request.Host}";
- if (path.Contains(host))
- return path;
- if (!path.StartsWith("/"))
- path = $"/{path}";
- var res = $"{host}{path}";
- return res;
- }
- public static string UrlDecode(string uriComponent) {
- var res = HttpUtility.UrlDecode(uriComponent);
- return res;
- }
- }
- }
|